Forum: FPGA, VHDL & Co. Signalerzeugung


von Knut (Gast)


Lesenswert?

Guten Abend,

ich habe ein Einganssignal des Typs STD_LOGIC das für 1040 Takte logisch 
'1' ist. Nun möchte ich ein Signal erzeugen, dass zur selben Zeit wie 
das Einganssignal '1' wird und für 4 Takte länger '1' bleibt, also für 
1044 Takte.

Könnte mir jemand sagen wie sich das am einfachsten in VHDL realisieren 
lässt?


Schönen Abend

Knut

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Muss es genau zur "selben" Zeit aktiv werden, oder reicht es aus, wenn 
es um 1 Takt versetzt ist? Ist "das Signal" synchron zum Takt? Welcher 
Jitter ist erlaubt? Welche Taktfrequenz?
Kurz: was ist das eigentliche Problem?

von HTC-Programmer (Gast)


Lesenswert?

Nun ja, ich würde mal sagen eine 4fach-FF-Kette und ein OR mit dem 
Eingang.

Ganz zur "selben Zeit" geht natürlich nicht, wegen der Verzögerung.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ein komplett verwirrter Ansatz wäre sowas: asynchrones, 
schnellstmögliches Setzen des Ausgangs, mit gleichzeitigem Laden eines 
Zählers. Wenn der Eingang low wird, bleibt der Ausgang noch high, bis 
der Zähler abgelaufen ist:
1
signal counter : integer;
2
:
3
  process
4
    if eingangssignal='1' then
5
       ausgangssignal <= '1';
6
       counter<=0;
7
    elsif rising_edge(clk) then
8
       if counter=3 then
9
          ausgangssignal<='0';
10
       else
11
          counter<=counter+1;
12
       end if;
13
    end if;
14
  end process;

ABER damit hat man einen asynchronen Eingang an der Backe, der auf 
eine State-Machine (Zähler) geht. Und das kann böse ins Auge gehen:
http://www.lothar-miller.de/s9y/categories/34-Getakteter-Prozess
http://www.lothar-miller.de/s9y/archives/64-State-Machine-mit-asynchronem-Eingang.html

Deshalb meine Fragen nach der Synchronität des externen Signals...

Und auch der Vorschlag mit der OR ist nicht garantiert glitchfrei. Da 
könnte mit einem einfachen OR sogar im ungünstigsten Fall ein kompletter 
Takt lang das falsche Signal am Ausgang herauskommen. Wenn alle 4 Bits 
verodert werden, dann dürfte das aber klappen:
1
 signal sr : std_logic_vector(3 downto 0);
2
 :
3
4
 sr <= sr(2 downto 0)&eingangssignal;
5
 ausgangssignal <= '0' when eingangssignal='0' and sr="0000" else '1'; -- kürzere Schreibweise mit AND

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.