VHDL CODE ASYNCHRONER RESET-EINGANG?

Gast #3846232
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

>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
Lesenswert?

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

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