根据状态图,写状态机:
Implement FSM by the following state transition diagram. (input: clk, rstn, dat_i; output: dat_o)
代码
module myfsm(
input clk,
input rstn,
input dat_i,
output reg dat_o
);
parameter S_0 = 2'b00;
parameter S_1 = 2'b01;
parameter S_2 = 2'b10;
parameter S_3 = 2'b11;
reg [1:0] c_s;
reg [1:0] n_s;
always@(posedge clk or negedge rstn)begin
if(!rstn)begin
c_s <= S_0;
end else begin
c_s <= n_s;
end
end
always@(*)begin
case(c_s)
S_0: n_s=(dat_i) ? S_3 : S_1;
S_1: n_s=(dat_i) ? S_1 : S_2;
S_2: n_s=(dat_i) ? S_3 : S_1;
S_3: n_s=(dat_i) ? S_0 : S_3;
default: n_s=S_0;
endcase
end
always@(posedge clk or negedge rstn)begin
if(!rstn)begin
dat_o <= 0;
end if(c_s==S_0 || c_s==S_1)begin
dat_o <= 0;
end else if(c_s==S_2 || c_s==S_3)begin
dat_o <= 1;
end else begin
dat_o <= 0;
end
end
endmodule