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
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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.