VHDL - synchron oder asynchron?

Gast #4187096
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!
Gast #4187099
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;
Gast #4187167
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).
Gast #4187192
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.
Gast #4187240
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

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