【基本知识】FMS有限状态机设计
有限状态机是Verilog中十分基本也是十分重要的知识。本文对有限状态机做了一个简单介绍。
1.状态机三要素
有限状态机具有三个要素:状态跳转、跳转判断、状态操作;
1)状态跳转:现态跳转到次态;
2)跳转判断:状态跳转的判断条件;
3)状态操作:状态对应的操作;
2.状态机的实现方式
1)一段式:状态机三要素集成于一个 always 块中。
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)begin
state <= 'b00;
Qout <= 'b0;
end
else case(state)
'b00: begin
if(A)begin
state <= 'b01;
Qout <= 'b1;
end
else begin
state <= 'b00;
Qout <= 'b0;
end
end
'b01: begin
if(!A)begin
state <= 'b00;
Qout <= 'b0;
end
else begin
state <= 'b01;
Qout <= 'b1;
end
end
default:;
endcase
end
FMS_ONE
2)二段式:状态机三要素分别设计于两个 always 块。
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
state <= 'b00;
else case(state)
'b00: begin
if(A)
state <= 'b01;
else
state <= 'b00;
end
'b01: begin
if(!A)
state <= 'b00;
else
state <= 'b01;
end
default:;
endcase
end always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
Qout <= 'b0;
else case(state)
'b00: Qout <= 1'b0;
'b01: Qout <= 1'b1;
default:;
endcase
end
FMS_TWO
3)三段式:状态机三要素分别于三个 always 块。
always@(posedge clk or negedge rst_n)//状态跳转
begin
if(!rst_n)
current_state <= 'b00; //复位
else
current_state <= next_state//在时钟上升沿刷新现状态
end always@(current_state) //跳转判断
begin
case(current_state)
'b00:begin
if(A)
next_state = 'b01;
else
next_state = 'b00;
end
'b01:begin
if(!A)
next_state = 'b00;
else
next_state = 'b01;
end
default:;
end always @ (*) //状态操作
begin
case(current_state)
'b00:Qout <= 1'b0;
'b01:Qout <= 1'b1;
default:;
endcase
end
3.状态机设计要求
1)根据设计需求选择合适的风格;
2)case语句中都应加入default语句;
3)巧加DFF中继,提高可靠性;
4)课采用独热编码、格雷码设计状态;
5)记得采用全局复位;
【基本知识】FMS有限状态机设计的更多相关文章
- kafka知识体系-kafka设计和原理分析
		
kafka设计和原理分析 kafka在1.0版本以前,官方主要定义为分布式多分区多副本的消息队列,而1.0后定义为分布式流处理平台,就是说处理传递消息外,kafka还能进行流式计算,类似Strom和S ...
 - HDMI接口基础知识及硬件设计
		
参考资料:http://blog.csdn.net/u013625961/article/details/53434189: http://blog.csdn.net/u014276460/artic ...
 - kafka知识体系-kafka设计和原理分析-kafka文件存储机制
		
kafka文件存储机制 topic中partition存储分布 假设实验环境中Kafka集群只有一个broker,xxx/message-folder为数据文件存储根目录,在Kafka broker中 ...
 - kafka知识体系-kafka设计和原理分析-kafka leader选举
		
kafka leader选举 一条消息只有被ISR中的所有follower都从leader复制过去才会被认为已提交.这样就避免了部分数据被写进了leader,还没来得及被任何follower复制就宕机 ...
 - kafka知识体系-kafka设计和原理分析-消息传递语义
		
消息传递语义 消息传递保障 本节讨论Kafka如何确保消息在producer和consumer之间传输.有以下三种可能的传输保障(delivery guarantee): At most once: ...
 - JAVA核心技术I---JAVA基础知识(常量设计和常量池)
		
一:常量---一种不会修改的变量 –Java没有constant关键字 –不能修改,final –不会修改/只读/只要一份,static –方便访问publicJava中的常量 –public sta ...
 - UI设计初学者教程:色彩基础知识
		
编辑:千锋UI设计 初学设计都会先认识三原色,通常我们说的三原色指的是颜料三原色:红.黄.蓝:其实三原色还有色光三原色:红.绿.蓝.我们通常说的红黄蓝就是减色法三原色,而红绿蓝是加色法三原色.可能这么 ...
 - 得到知识服务app原型设计比较与实践
		
一.几种原型设计工具的比较 墨刀 优点: 拥有PC端.手机端.网页版,让你随时随地可以进行产品原型设计: 其定位是主要用于设计移动APP原型,其控件的拖拉.大小的调整,都会自然去匹配相应的母版大小,非 ...
 - 至芯FPGA培训中心-1天FPGA设计集训(赠送FPGA开发板)
		
至芯FPGA培训中心-1天FPGA设计集训(赠送开发板) 开课时间2014年5月3日 课程介绍 FPGA设计初级培训班是针对于FPGA设计技术初学者的课程.课程不仅是对FPGA结构资源和设计流程的描述 ...
 
随机推荐
- 2019.10.1 qbxt模拟题
			
第一题 考虑树上\(DP\),f[i][j][0/1]表示以\(i\)为根的子树,入读为零点的个数为\(j\),点\(i\)的入度为\(0\)/不为\(0\)时的方案数 转移的时候考虑\(u\)的一个 ...
 - 一篇JavaScript技术栈带你了解继承和原型链
			
作者 | Jeskson 来源 | 达达前端小酒馆 1 在学习JavaScript中,我们知道它是一种灵活的语言,具有面向对象,函数式风格的编程模式,面向对象具有两点要记住,三大特性,六大原则. 那么 ...
 - Cloud-init原理
			
Ubuntu修改主机名后,重启自动恢复原来的主机名? 这是因为Ubuntu18.10上,默认安装并启动了cloud-init, 需要停止它的四个服务进程,才可以使用传统的方式修改主机名. cloud- ...
 - 使用adb连接Mumu模拟器
			
1)下载Mumu模拟器 2)运行Mumu模拟器 3)找到mumu安装目录下的MuMu\emulator\nemu\vmonitor\bin目录 4)在当前目录打开cmd,执行 adb connect ...
 - 【Beta】Scrum Meeting 9  & 助教参会记录
			
目录 前言 任务分配 燃尽图 会议照片 签入记录 上周助教交流总结 Q:项目进度如何? Q:有关commit与issue关联的问题? Q:人员变动后分工的变化情况? Q:接下来还有什么新功能? Q:大 ...
 - 使用kafka-python客户端进行kafka kerberos认证
			
之前说过python confluent kafka客户端做kerberos认证的过程,如果使用kafka python客户端的话同样也可以进行kerberos的认证,具体的认证机制这里不再描述,主要 ...
 - Windows通过URL启动本机App
			
Windows通过URL启动本机App http://xxx.itdhz.com/?file=001-Windows/100-Windows通过URL启动本机App
 - 干掉搜狗输入法云代理SogouCloud.exe
			
搜狗输入法暂时还离不开,但是很讨厌搜狗输入法一直在后台的"搜狗云代理程序"(C:\Program Files (x86)\SogouInput\9.1.0.2657\SogouCl ...
 - NSIS安装或卸载时检查程序是否正在运行
			
转载:https://www.cnblogs.com/z5337/p/4766415.html 转载:https://www.gongzi.org/nsisbuildqqstop.html 转载:ht ...
 - Roberts算子
			
https://blog.csdn.net/likezhaobin/article/details/6892176 https://zhuanlan.zhihu.com/p/35032299 Robe ...