FSM 4x7 Segment zeigt Verilog an

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

Sie leiten kombinatorische Logik mit ab 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.
Sie können die Anodenauswahl bei voller Taktgeschwindigkeit ändern. Es gibt einen Fmax, der von Ihrem Display definiert wird -> im Datenblatt nachschlagen. Dieses Design ist nicht synchron.
@Paebbels , Das ganze Projekt besteht aus einem Topmodul und 6 Submodulen nach oben. Also ist alles verschachtelt und es sieht jetzt kompliziert aus. Ich habe also eine Master-Zustandsmaschine und eine Labyrinthmaschine. Wenn ich, sagen wir, Zustand 3 des Meisters betrete, gehe ich zur Labyrinthmaschine und dann muss ich sie beenden und das fertige Ergebnis an den Meister weitergeben. Außerdem muss ich 30 Sekunden zählen, in denen ich das Labyrinth vervollständigen muss. Wenn ich nicht kann, muss ich eine Nachricht anzeigen
Ich weiß nicht wirklich, wie das im 7segment-Modul funktionieren könnte, da es in einem Fall die Zahlen ändern und im anderen Fall alle Segmente verwenden muss, um eine Nachricht anzuzeigen.

Antworten (1)

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.