FSM1/FSM1s
module top_module(
input clk,
input areset, // Asynchronous reset to state B
input in,
output reg out);//
parameter A=1'b0, B=1'b1;
reg state, next_state;
always @(posedge clk, posedge areset) begin // This is a sequential always block
if(areset)
state<=B;
else
state<=next_state;
end
always @(*) begin // This is a combinational always block
case(state)
A:if(in)
next_state<=A;
else
next_state<=B;
B:if(in)
next_state<=B;
else
next_state<=A;
endcase
end
always @(posedge clk) begin // This is a sequential always block
if(state==B)
out<=1'b1;
else
out<=1'b0;
end
// assign out=(state==B)?1'b1:1'b0;
endmodule
FSM2/FSM2s
module top_module(
input clk,
input areset, // Asynchronous reset to OFF
input j,
input k,
output out); //
parameter OFF=1'b0, ON=1'b1;
reg state, next_state;
always @(posedge clk, posedge areset) begin
if(areset)
state<=OFF;
else
state<=next_state;
end
always @(*) begin
case(state)
OFF:if(j)
next_state<=ON;
else
next_state<=OFF;
ON:if(k)
next_state<=OFF;
else
next_state<=ON;
endcase
end
// Output logic
assign out = (state == ON)?1'b1:1'b0;
endmodule
FSM3/FSM3s
独热码
module top_module(
input clk,
input in,
input areset,
output out); //
parameter A=2'd0, B=2'd1, C=2'd2, D=2'd3;
reg [3:0]state, next_state;
always @(posedge clk, posedge areset) begin
if(areset)
state<=4'd1;
else
state<=next_state;
end
assign next_state[A] =state[A]&(~in)|state[C]&(~in);
assign next_state[B] =state[A]&in|state[B]&in|state[D]∈
assign next_state[C] =state[B]&(~in)|state[D]&(~in);
assign next_state[D] =state[C]∈
// Output logic
assign out=state[D];
endmodule