Aufgabe 2.4: Moore-Automat, Typ 1 -> Frage
-
- Sonntagsinformatiker
- Beiträge: 253
- Registriert: 25. Okt 2006 17:44
Aufgabe 2.4: Moore-Automat, Typ 1 -> Frage
Hi,
ich verstehe eine Zeile im Verilog-Programm in Aufgabe 2.4: Moore-Automat, Typ 1 nicht ganz.
Komplettes Programm:
module moore1(clk, x, y1);
input clk, x;
output y1;
reg [1:0] s;
initial s = 0;
always @(posedge clk) case (s)
0: if (x == 0) s <= 1;
1: if (x == 1) s <= 2;
2: s <= 0;
default: s <= 0; // für den Fall s==3
endcase
assign y1 = (s == 0) || (s == 2);
endmodule
Und zwar geht es um die Zeile: assign y1 = (s == 0) || (s == 2);
y1 hat ja für jeden Zustand s einen speziellen Wert. Aus meiner Sicht müsste es hier (statt dieser Zeile) doch noch mal einen Case-Block geben, der y1 je nach Zustand s einen Wert zuweist, also so etwas:
always @(s) case (s)
0: y1 = 1;
1: y1 = 0;
2: y1 = 1;
default: y1=0 #???
endcase
Kann mir emand die Zeile: assign y1 = (s == 0) || (s == 2); erklären, also ob die das gleiche macht (wenn ja, wie) und kann jemand bestätigen, dass mein Case-Block auch richtig ist?
ich verstehe eine Zeile im Verilog-Programm in Aufgabe 2.4: Moore-Automat, Typ 1 nicht ganz.
Komplettes Programm:
module moore1(clk, x, y1);
input clk, x;
output y1;
reg [1:0] s;
initial s = 0;
always @(posedge clk) case (s)
0: if (x == 0) s <= 1;
1: if (x == 1) s <= 2;
2: s <= 0;
default: s <= 0; // für den Fall s==3
endcase
assign y1 = (s == 0) || (s == 2);
endmodule
Und zwar geht es um die Zeile: assign y1 = (s == 0) || (s == 2);
y1 hat ja für jeden Zustand s einen speziellen Wert. Aus meiner Sicht müsste es hier (statt dieser Zeile) doch noch mal einen Case-Block geben, der y1 je nach Zustand s einen Wert zuweist, also so etwas:
always @(s) case (s)
0: y1 = 1;
1: y1 = 0;
2: y1 = 1;
default: y1=0 #???
endcase
Kann mir emand die Zeile: assign y1 = (s == 0) || (s == 2); erklären, also ob die das gleiche macht (wenn ja, wie) und kann jemand bestätigen, dass mein Case-Block auch richtig ist?
Gruß TM
- Tigger
- Kernelcompilierer
- Beiträge: 404
- Registriert: 26. Okt 2007 17:35
- Wohnort: Hofheim
- Kontaktdaten:
Re: Aufgabe 2.4: Moore-Automat, Typ 1 -> Frage
Also die linke Seite ist eine logische Operation. || bedeutet "oder". == wird wahr, wenn rechts und links das selbe steht. Steht auch alles nochmal in der Verilog übersicht. Logische Operationen haben als Ergebnis ein Bit (Also 0 oder 1
). Also ist das Ergebnis (dass y1 zugewiesen wird) 1, wenn s 0 oder 2 ist. Genau das wollen wir ja haben. Dein alwaysblock macht im Prinzip auch nix anderes, is halt nur etwas mehr schreibarbeit.

Zuletzt geändert von Tigger am 20. Sep 2008 20:46, insgesamt 1-mal geändert.
- Krümelmonster
- Geek
- Beiträge: 767
- Registriert: 17. Okt 2007 13:58
- Wohnort: Jossgrund
Re: Aufgabe 2.4: Moore-Automat, Typ 1 -> Frage
Dein case-Block sieht auch richtig aus.
Du könntest ihn noch abkürzen:
always@(s)
case(s)
0: y1 = 1;
2: y1 = 1;
default: y1 = 0;
endcase
assign y1 = (s == 0) || (s == 2);
Das ist die Kurzschreibweise:
y1 ist in Zustand 0 und 2 eins ansonsten null.
Also ist y1 durch diese FO-Formel beschrieben:
\(\varphi_{y_{1}}(s) := (s = 0) \lor (s = 2)\)

Du könntest ihn noch abkürzen:
always@(s)
case(s)
0: y1 = 1;
2: y1 = 1;
default: y1 = 0;
endcase
assign y1 = (s == 0) || (s == 2);
Das ist die Kurzschreibweise:
y1 ist in Zustand 0 und 2 eins ansonsten null.
Also ist y1 durch diese FO-Formel beschrieben:
\(\varphi_{y_{1}}(s) := (s = 0) \lor (s = 2)\)

Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!
-
- Sonntagsinformatiker
- Beiträge: 253
- Registriert: 25. Okt 2006 17:44
Re: Aufgabe 2.4: Moore-Automat, Typ 1 -> Frage
Ok, super und danke. Frage ist damit beantwortet.
Gruß TM
Re: Aufgabe 2.4: Moore-Automat, Typ 1 -> Frage
Was genau ist der Unterschied zwischen Moore-Automat, Typ 1 und Typ 2.
Der Code von Typ 2 (mulö) gilt doch für die beide. Die einzige Unterschied ist y im Zustand 1.
Der Code von Typ 2 (mulö) gilt doch für die beide. Die einzige Unterschied ist y im Zustand 1.
-
- Nerd
- Beiträge: 555
- Registriert: 19. Okt 2006 14:41
- Wohnort: Darmstadt / Alzenau
- Kontaktdaten:
Re: Aufgabe 2.4: Moore-Automat, Typ 1 -> Frage
Wenn ich mich nicht vertue, dann ist der Moore Typ2 synchron.
Im ersten Takt ändert sich der Zustand. Im 2. dann auch der Ausgang.
Code: Alles auswählen
0: begin
if (x == 0) s <= 1; else s <= 0;
yd <= 1;
end
Re: Aufgabe 2.4: Moore-Automat, Typ 1 -> Frage
Richtig, man kann es sich auch am Code von Typ 2 in der Musterlösung veranschaulichen: Im case wird zuerst synchron der Zustand gewechselt, dann wird im gleichen Abschnitt der Ausgangswert zugewiesen -> also gibt es noch mal den zum alten Zustand gehörenden Wert. Erst bei der nächsten Takflanke laufen wir in den neuen case-Abschnitt und setzen den neuen Wert. Somit kommen alle Werte um einen Takt verzögert am Ausgang an.
Durch die synchrone Zuweisung ist es auch egal, ob man die Ausgabewerte gleich im case zuweist oder einen gesonderten Logikblock dafür verwendet - der neue Zustand wird sowieso erst nach Ablauf des gesamten Codes übernommen.
Durch die synchrone Zuweisung ist es auch egal, ob man die Ausgabewerte gleich im case zuweist oder einen gesonderten Logikblock dafür verwendet - der neue Zustand wird sowieso erst nach Ablauf des gesamten Codes übernommen.
Re: Aufgabe 2.4: Moore-Automat, Typ 1 -> Frage
Also, wenn wir <= durch = ersetzen (bei y), dann werden wir diese Verzögerung entfernen und y ändert sich gleich mit dem Zustandswechsel, oder?
-
- Sonntagsinformatiker
- Beiträge: 253
- Registriert: 25. Okt 2006 17:44
Re: Aufgabe 2.4: Moore-Automat, Typ 1 -> Frage
Ja, das ist so richtig.
Ich würde das dann in etwa so vor oder nach dem Case schreiben: always@(s) y = ... . Dann ist es auf jeden Fall asynchron und damit Moore Typ 1.
Insgesamt bewerte ich das aber mal als Feinheit, die die vielleicht einen Punkt kostet.
Ich würde das dann in etwa so vor oder nach dem Case schreiben: always@(s) y = ... . Dann ist es auf jeden Fall asynchron und damit Moore Typ 1.
Insgesamt bewerte ich das aber mal als Feinheit, die die vielleicht einen Punkt kostet.
Gruß TM