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

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

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

`timescale 1ns/1ns

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

//*************code***********//
reg [4:0] current_state;
reg [4:0] next_state;

always @(posedge clk or negedge rst)begin
	if(!rst)begin
		current_state <= 5'b00001;
	end
	else begin
		current_state <= next_state;
	end
end

always @(*)begin
	if(current_state == 5'b10000)begin
		flag = 1'b1;
	end
	else begin
		flag = 1'b0;
	end
end

always @(*)begin
	case(current_state)
	5'b00001:begin
		if(data)begin
			next_state = 5'b00010;
		end
		else begin
			next_state = 5'b00001;
		end
	end
	5'b00010:begin
		if(data)begin
			next_state = 5'b00100;
		end
		else begin
			next_state = 5'b00010;
		end
	end
	5'b00100:begin
		if(data)begin
			next_state = 5'b01000;
		end
		else begin
			next_state = 5'b00100;
		end
	end
	5'b01000:begin
		if(data)begin
			next_state = 5'b10000;
		end
		else begin
			next_state = 5'b01000;
		end
	end
	5'b10000:begin
		if(data)begin
			next_state = 5'b00010;
		end
		else begin
			next_state = 5'b00001;
		end
	end
	default:begin
		next_state = 5'b00001;
	end
	endcase
end

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

全部评论
这是典型二段式写法,用always实现状态转移,用always组合逻辑实现输出和状态选择,注意data/flag位置
点赞 回复 分享
发布于 2024-06-04 15:46 甘肃

相关推荐

WhiteAlbum...:学院本2中大厂垂直实习➕acm比赛 秋招0面试
点赞 评论 收藏
分享
09-21 21:14
门头沟学院
否极泰来来来来:和他说:这里不好骂你,我们加个微信聊
点赞 评论 收藏
分享
10-09 09:19
已编辑
沈阳农业大学 C++
修订
丿南烟丶:个人评价可以删掉 两个项目都是轮子项目,把一个转换成应用型项目,把MySQL和redis用起来 另外项目的时间可以标明一下
最后再改一次简历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务