2016-11-01 7 views
-1

Coding Zustand Maschinentisch (Verilog HDL)

Dies ist eine Praxis Problem, dass ich denke, der richtige Ansatz ist. Ich habe herausgefunden, wofür x = 0 gesetzt ist. Ich bin ein Verilog-Neuling, also nicht sicher, ob das ein gültiges Zustandsautomatenmodul ist. Bitte weisen Sie auf Fehler hin.

Module SM(input x, clk, output z) 
reg[1:0] s, next_s; 
always @(posedge clk) 
    s <= next_s; 
always @(x,s) begin 
    if (x == 1)begin 
    next_s <= s + 1'b1; 
    else 
    next_s <= ????? 
    end 
end 

assign z = ~{s[0],s[1]}; 
endmodule 
+1

Verwenden Sie eine 'case' Anweisung für Ihre nächsten_Zuweisungen. Es gibt viele Beispiele, wenn Sie googlen. – toolic

+2

'assign z = ~^s; // Reduktion xnor' – toolic

Antwort

0

Paare von Noten:

  1. Verwenden [email protected] (*) für kombinatorische Logik, anstatt manuell die Empfindlichkeit Liste angeben.
  2. Wir verwenden nicht-blockierende Zuweisungen (<=) in sequentiellen (flankensensitiven) Blöcken, aber Blockzuweisungen (=) in kombinatorischen Blöcken.
  3. Ihre Zuordnung zu z ist falsch (Sie wollen wahrscheinlich etwas wie s[1] == s[0])
  4. Es ist wie der Zustand Verringerungen mir aussieht, wenn x==1 und Schritten, wenn x==0, während Sie in der x==1 Fall erhöhen, und haben nichts für die x==0.

Ansonsten sieht es OK aus!