Signalerzeugung

Gast #2916591
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
Moderator (Firma: Titel) Persönliche Seite #2917214
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren