Consider the state diagram shown below.
Write complete Verilog code that represents this FSM. Use separate always blocks for the state table and the state flip-flops, as done in lectures. Describe the FSM output, which is called z , using either continuous assignment statement(s) or an always block (at your discretion). Assign any state codes that you wish to use.
module top_module (
input clk,
input reset, // Synchronous active-high reset
input w,
output z
);
parameter A=3'b000, B=3'b001, C=3'b010, D=3'b011, E=3'b100, F=3'b101;
wire[2:0] state, next;
// state transition logic
always@(*)begin
case(state)
A: next = w? B:A;
B: next = w? C:D;
C: next = w? E:D;
D: next = w? F:A;
E: next = w? E:D;
F: next = w? C:D;
endcase
end
// flip-flop and reset
always@(posedge clk)begin
if(reset)
state <= A;
else
state <= next;
end
// output
assign z = (state == E || state == F);
endmodule