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!
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;
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).
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
Oder hat dieser "Asynchrone Reset" garnichts mit dem synchronen Design zu tun?
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.
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.