Ich habe Probleme, Verilog zu umgehen. Ich versuche, einen FSM zu erstellen, der Zahlen auf einem der Displays anzeigt und im nächsten Zustand eine Zeichenfolge anzeigt. Ich habe die Zeichenfolge so erstellt, dass sie separat und die Nummer in 2 Projekten separat angezeigt werden, aber ich erhalte Fehler, wenn ich versuche, sie zu kombinieren. Was ich getan habe, war, eine Always@-Schleife zu setzen und dort ein Flag in einer if else-Anweisung mit zwei Switch-Fällen zu platzieren, aber ich habe eine Fehlermeldung erhalten, die besagt, dass dies vorzuziehen ist, um die kombinatorische Logikschleife loszuwerden. Gibt es eine Möglichkeit, beide Funktionen zu kombinieren?
Ok, ich werde etwas Code posten, aber das Hauptbild ist, dass ich eine Master-Zustandsmaschine habe und dann eine andere Zustandsmaschine. Ich verwende die andere Zustandsmaschine als Eingabe für die 7-Segment-Anzeige für eine einzelne Zahl. Aber in einem anderen Zustand der Master-Zustandsmaschine muss ich eine Nachricht auf den 4 7-Segment-Anzeigen anzeigen. Was ich jetzt habe, ist: Hier habe ich CLK verwendet, um die Nachricht zu erstellen
always@(BIN_IN or CLK) begin
if(FAIL==1) begin
case(state)
left:
begin
HEX_OUT [6:0] <= F;
SEG_SELECT_OUT <= 4'b0111;
state <= midleft;
end
midleft:
begin
HEX_OUT [6:0] <= A;
SEG_SELECT_OUT <= 4'b1011;
state <= midright;
end
//same for the rest
end
else begin
case (BIN_IN)
4'h0 : begin
HEX_OUT [6:0] <= 7'b1000000;
SEG_SELECT_OUT <= 4'b0111;
end
//same logic for the other cases
Danke
Ich glaube, ich verstehe Ihr Problem, ich hatte ein ähnliches Problem, als ich anfing, Schaltungen in HDL (Verilog oder VHDL) zu erstellen und von der Programmierung von C++, Python oder anderen Sprachen kam.
Was Sie verstehen müssen, ist, dass Ihre Variablen in Verilog Drähte (Bits) oder Gruppen von Drähten (Vektoren) darstellen ... Sie können also nicht dieselbe Variable als Ausgang von 2 Teilen Ihrer Schaltung zuweisen ... das wäre so seltsam wie eine Lampe mit 2 Steckern ...
Setzen Sie einfach "irgendwie" beide Maschinen in denselben Prozess und es wird funktionieren.
Greg
always@(BIN_IN or CLK)
, und das RTL-Verhalten stimmt nicht mit synthetisierten Gattern überein. Sie müssen es zumindest in ändern,always@(posedge CLK)
um es synchron zu machen.Paebbels
Nick
Nick