Wie funktioniert eine einfache state machine, Blick in Verilog?

Ich versuche zu konvertieren ein Flussdiagramm einfache state machine in Verilog code.
Aber ich bin irgendwie fest mit dem folgenden, und so habe ich kaum Kenntnisse in Verilog ich bin wahrscheinlich etwas fehlt.

Statemachine erkennt für einen input-stream von 0 and 1, wenn die Anzahl der 1s geteilt durch 3 (oder einfach: wenn es 3 mal die Zahl 1).

Wie funktioniert eine einfache state machine, Blick in Verilog?

module example (
  input clk,
  input rst,
  input input1,
  output output
);

reg state;
reg nextstate;

localparam state2 = 3'd0;
localparam state1 = 3'd1;
localparam state0 = 3'd2;

always @(posedge clk or posedge rst) begin
  if (rst)
    state <= state0;
  else
    state <= nextstate;
end

always @* begin
  case(state)
    state0: begin
      if(input1)
        nextstate = state1;
      end
    state2: begin
      if(input1)
        nextstate = state0;
      end
    state1: begin
      if(input1)
        nextstate = state2;
      end
    default: nextstate = state0;
  endcase
end

always @* begin
  output1 = state0 & input1;
end

endmodule

Ich bin mir nicht sicher:

  • muss ich definieren die Eingänge + Ausgänge als reg oder wire? Oder ist input und output! ausreichend?

  • muss ich eine Vektor-dimension für die reg state, nextstate? Wenn ja, wie weiß ich, welche Größe zu wählen?

  • kann, Schreibe ich diese Art von Behauptungen, die sich am Ende wie state0 & input1? Oder sollte ich state = state0 & input1 = ?? - ja, was?

InformationsquelleAutor membersound | 2013-04-10
Schreibe einen Kommentar