`timescale 1ns/1ns
module fsm1(
input wire clk ,
input wire rst ,
input wire data ,
output reg flag
);
//*************code***********//
reg [3:0] cur_state ;
reg [3:0] nex_state ;
parameter S0 = 4'b0001 ,
S1 = 4'b0010 ,
S2 = 4'b0100 ,
S3 = 4'b1000 ;
always@(posedge clk or negedge rst)begin
if(!rst)
cur_state <= S0 ;
else
cur_state <= nex_state ;
end
always@(*)begin
case(cur_state)
S0: nex_state = (data == 1'b1)?S1:S0 ;
S1: nex_state = (data == 1'b1)?S2:S1 ;
S2: nex_state = (data == 1'b1)?S3:S2 ;
S3: nex_state = (data == 1'b1)?S0:S3 ;
default: nex_state = S0 ;
endcase
end
always@(posedge clk or negedge rst)begin
if(!rst)
flag <= 1'b0 ;
else begin
case(cur_state)
S3: begin
if(data == 1 )
flag <= 1'b1 ;
else
flag <=1'b0 ;
end
default: flag <= 1'b0 ;
endcase
end
end
//*************code***********//
endmodule
标准三段式

京公网安备 11010502036488号