Forum: FPGA, VHDL & Co. VHDL - synchron oder asynchron?


von VHDL-Newcomer (Gast)


Lesenswert?

Habe mit VHDL bisher nichts zu tun gehabt, daher fällt mir die 
Beantwortung dieser Frage sehr schwer (ich hoffe, dass ich die File 
richtig abgetippt hab, falls Fehler drin sind, entschuldige ich mich 
schonmal!)

Gegeben ist folgender Code:



ARCHITECTURE a OF state_m IS
  TYPE  STATE_TYPE IS (a0, a1, a2);
  SIGNAL state : STATE_TYPE;
BEGIN
   PROCESS(clk, reset)
   BEGIN
   IF reset = '1' THEN
      state <= a0;
   ELSEIF (clk 'EVENT AND clk = '1') THEN
      CASE state IS
        WHEN a0 =>
    IF input = '1' THEN
       state <= a1;
    ELSE
       state <= a0;
    END IF;
      WHEN a1 =>
    IF input = '1' THEN
       state <= a2;
    ELSE
       state <= a1;
    END IF;
  END CASE;
    END IF;
END PROCESS;
    PROCESS (state)
BEGIN
     CASE state IS
  WHEN a0 =>
     output <= "00";
  WHEN a1 =>
     output <= "01";
  WHEN a2 =>
     output <= "10";
     END CASE;
END PROCESS;
END a;


Erklären und begründen Sie, ob dieses File ein synchrones oder 
asynchrones Design hat.

Meine Idee:

ELSEIF (clk 'EVENT AND clk = '1') THEN <- also hierdran erkenne ich 
doch, dass nur auf die positive Taktflanke reagiert wird, oder? Woher 
weiß ich aber, ob die Daten auch synchron zum Takt sind, also ob das 
Design dann wirklich synchron arbeitet?

Vielen Dank im Voraus!

von VHDL-Newcomer (Gast)


Lesenswert?

Entschuldigt, habe vergessen den oberen Part ebenfalls zu kopieren, 
also:

ENTITY state_m IS

PORT(
  clk: IN STD_LOGIC;
  input: IN STD_LOGIC;
  reset: IN STD_LOGIC;
  output: OUT STD_LOGIC_VECTOR (1 downto 0));
END state_m;

ARCHITECTURE a OF state_m IS
  TYPE  STATE_TYPE IS (a0, a1, a2);
  SIGNAL state : STATE_TYPE;
BEGIN
   PROCESS(clk, reset)
   BEGIN
   IF reset = '1' THEN
      state <= a0;
   ELSEIF (clk 'EVENT AND clk = '1') THEN
      CASE state IS
        WHEN a0 =>
    IF input = '1' THEN
       state <= a1;
    ELSE
       state <= a0;
    END IF;
      WHEN a1 =>
    IF input = '1' THEN
       state <= a2;
    ELSE
       state <= a1;
    END IF;
  END CASE;
    END IF;
END PROCESS;
    PROCESS (state)
BEGIN
     CASE state IS
  WHEN a0 =>
     output <= "00";
  WHEN a1 =>
     output <= "01";
  WHEN a2 =>
     output <= "10";
     END CASE;
END PROCESS;
END a;

von Achim S. (Gast)


Lesenswert?

VHDL-Newcomer schrieb im Beitrag #4187096:
> ELSEIF (clk 'EVENT AND clk = '1') THEN <- also hierdran erkenne ich
> doch, dass nur auf die positive Taktflanke reagiert wird, oder? Woher
> weiß ich aber, ob die Daten auch synchron zum Takt sind, also ob das
> Design dann wirklich synchron arbeitet?

richtig gedacht: die Statemachine reagiert nur bei der Taktflanke, also 
handelt es sich um ein synchones Design, bei dem die States in Registern 
gespeichert werden.

Du kannst das synchrone Design aushebeln, wenn die Eingänge nicht 
synchron mit der CLK sind und sich "im falschen Aufgenblick" ändern. 
Dann kommt es ggf. zu Fehlern und die Statemachine macht nicht das, was 
du eigentlich willst. Aber ein synchrones Design ist es trotzdem noch 
(nur halt eins, das nicht zuverlässig funktioniert).

von VHDL-Newcomer (Gast)


Lesenswert?

Hallo Achim, danke dir erstmal für deine Antwort. Mir fällt gerade auf, 
dass mein Prof scheinbar das aus dem Quartus-Tutorial verwendet hat, 
dort steht unten aber was mit asynchron ... ich bin nun sehr 
durcheinander :( Ich zeig dir mal das Tutorial, wo das steht:

http://quartushelp.altera.com/15.0/mergedProjects/hdl/vhdl/vhdl_pro_state_machines.htm

von VHDL-Newcomer (Gast)


Lesenswert?

Oder hat dieser "Asynchrone Reset" garnichts mit dem synchronen Design 
zu tun?

von Achim S. (Gast)


Lesenswert?

VHDL-Newcomer schrieb im Beitrag #4187173:
> Mir fällt gerade auf,
> dass mein Prof scheinbar das aus dem Quartus-Tutorial verwendet hat,
> dort steht unten aber was mit asynchron

so ein fauler Prof...

Der Reset ist asynchron - er steht außerhalb der if clk'event Struktur 
und wirk sofort (ohne erst auf die nächste Taktflanke zu warten). Der 
ganze Rest ist aber synchron (reagiert nur bei Taktflanke). Es ist also 
eine synchrone Statemachine mit asynchronem Reset.

von VHDL-Newcomer (Gast)


Lesenswert?

Vielen Dank! Also wenn man sagt "Synchrones Design" bezieht sich das 
dann nur auf die State-Machine und nicht auf den Reset? Ist das immer so 
oder mehr eine Konvention?

von Achim S. (Gast)


Lesenswert?

VHDL-Newcomer schrieb im Beitrag #4187211:
> Also wenn man sagt "Synchrones Design" bezieht sich das
> dann nur auf die State-Machine und nicht auf den Reset?

So würde ich es zumindest immer beschreiben. Der Reset spielt eine 
Sonderrolle und kann als einzig asynch. Signal in einem ansonsten 
vollständig synchronen Design vorkommen.

vielleicht ist folgender Artikel für dich interessant:
http://www.mikrocontroller.net/articles/Reset_f%C3%BCr_FPGA/CPLD

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.