题解 | #根据状态转移写状态机-二段式#

根据状态转移写状态机-二段式

https://www.nowcoder.com/practice/5b2ff27610d04993ae92374d51bfc2e6

`timescale 1ns/1ns

module fsm2(
	input wire clk  ,
	input wire rst  ,
	input wire data ,
	output reg flag
);

//*************code***********//

parameter S0 = 5'b00001 ;
parameter S1 = 5'b10000 ;
parameter S2 = 5'b01000 ;
parameter S3 = 5'b00100 ;
parameter S4 = 5'b00010 ;

reg [4:0] Cur_state ;
reg [4:0] Nxt_state ;

//第一段式
always@(posedge clk or negedge rst)  begin
	if(!rst)
		Cur_state <= S0 ;
	else
		Cur_state <= Nxt_state ;
end

//第二段式
always@(*) begin
	if(!rst) begin
		flag = 0;
		Nxt_state = S0 ;
	end
	else	
		case(Cur_state)
		S0:if(data == 0) begin
			flag = 0;
			Nxt_state = S0 ;
		end 
		else begin
			flag = 0;
			Nxt_state = S1 ;
		end

		S1:if(data == 0) begin
			flag = 0;
			Nxt_state = S1 ;
		end 
		else begin
			flag = 0;
			Nxt_state = S2 ;
		end

		S2:if(data == 0) begin
			flag = 0;
			Nxt_state = S2 ;
		end 
		else begin
			flag = 0;
			Nxt_state = S3 ;
		end

		S3:if(data == 0) begin
			flag = 0;
			Nxt_state = S3 ;
		end 
		else begin
			flag = 0;
			Nxt_state = S4 ;
		end

		S4:if(data == 0) begin
			flag = 1;
			Nxt_state = S0 ;
		end 
		else begin
			flag = 1;
			Nxt_state = S1 ;
		end

		endcase

end


//*************code***********//
endmodule

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务