VHDL CODE ASYNCHRONER RESET-EINGANG?

Gast #3846232
Hier habe ich einen VHDL-Code, ich glaube der Reset-Eingang ist 0-aktiv, 
wegen dem if reset='0' then q<='0'. Falls ich es falsch verstanden habe 
bitte ich gerne um Verbesserung.
Nun zu meiner Frage, wie erkenne ich ob der Reset-Eingang asynchron oder 
synchron ist? wäre lieb wenn mir das jemand ausführlich erklären könnte, 
da ich ein Anfänger bin.

LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.numeric_std.all;


entity counter4 is
  port (
    clk   : in  std_logic;
    reset : in  std_logic;
    q_out : out std_logic_vector(3 downto 0) );    --Ausgänge
end counter4;



architecture beh of counter4 is
  signal q,q_ns: unsigned(3 downto 0);

begin  -- beh
  q_out <= std_logic_vector(q);  -- connect internal signals to output 
ports

  process (clk,reset) -- process for register function
  begin
    if reset='0' then
      q <= (others => '0');
    elsif clk'event and clk = '1' then  -- rising clock edge
        q <= q_ns;
    end if;
  end process;

  process (q)  -- process for next state decoder
  begin
    q_ns <= q + 1;
  end process;

end beh;
Gast #3846238
Synchron ist er wenn er immer mit der Taktflanke ausgewertet wird. 
(Reset ist nicht in der Sensitivitylist des Prozesses).

Asynchron bedeutet, dass der Reset "sofort" vollzogen wird. Das ist in 
deinem Beispiel der Fall.
1
process (clk,reset) -- process for register function
2
  begin
3
    if reset='0' then
4
      q <= (others => '0');
5
    elsif clk'event and clk = '1' then  -- rising clock edge
6
        q <= q_ns;
7
    end if;
8
  end process;

asynchron

Du siehst in der Sensitivitylist stehen clk und reset. Damit wird der 
Prozess zu jeder Taktzeit und Reset-Signal-Änderung ausgeführt. Der 
Reset schlägt also sofort zu und nicht erst wenn der nächste Taktzyklus 
kommt.

So ist er z.B. synchron
1
process (clk) -- process for register function
2
  begin
3
    if reset='0' then
4
      q <= (others => '0');
5
    elsif clk'event and clk = '1' then  -- rising clock edge
6
        q <= q_ns;
7
    end if;
8
  end process;
Gast #3846257
1
if reset='0' then
2
      q <= (others => '0');
3
    elsif clk'event and clk = '1' then  -- rising clock edge
4
        q <= q_ns;
5
    end if;

naja jetzt schau doch mal hin
1
if reset='0' then
2
q <= (others => '0');

Das ist der Reset.

Also ja der Reset ist low aktiv.
Gast #3848318
>So ist er z.B. synchron

>process (clk) -- process for register function
>  begin
>    if reset='0' then
>      q <= (others => '0');
>    elsif clk'event and clk = '1' then  -- rising clock edge
>        q <= q_ns;
>    end if;
>  end process;

Bullshit! Hier ist die Sensitivitätsliste einfach nur unvollständig-
Gast #3848353
Wichtig zu wissen:

Die Sensitivliste benötigt ausschließlich der Simulator!
D.h. der Prozess wird in der Simulation gestartet, wenn sich ein Eintrag 
der Sensitivliste ändert.

Hier wird ein asynchroner Reset simuliert und synthetisiert.
1
process (clk,reset) -- process for register function
2
  begin
3
    if reset='0' then
4
      q <= (others => '0');
5
    elsif clk'event and clk = '1' then  -- rising clock edge
6
        q <= q_ns;
7
    end if;
8
  end process;

Hier verhalten sich Simulation und generierte Hardware unterschiedlich!
Denn die Sensitivliste ist unvollständig, es wird aber weiterhin ein 
asynchroner Reset synthetisiert.
1
process (clk) -- process for register function
2
  begin
3
    if reset='0' then
4
      q <= (others => '0');
5
    elsif clk'event and clk = '1' then  -- rising clock edge
6
        q <= q_ns;
7
    end if;
8
  end process;

Hier wird ein synchroner reset simuliert und synthetisiert, da der Reset 
auch nur mit einer clk-Flanke überprüft wird.
1
process (clk) -- process for register function
2
  begin
3
    if clk'event and clk = '1' then  -- rising clock edge
4
      if reset='0' then
5
        q <= (others => '0');
6
      else
7
        q <= q_ns;
8
      end if;
9
    end if;
10
  end process;

Gruß
derLars

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.