【基本知识】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结构资源和设计流程的描述 ...
随机推荐
- P3350 [ZJOI2016]旅行者
题目描述 小Y来到了一个新的城市旅行.她发现了这个城市的布局是网格状的,也就是有n条从东到西的道路和m条从南到北的道路,这些道路两两相交形成n*m个路口 (i,j)(1<=i<=n,1&l ...
- ES6基础-变量的解构赋值
作者 | Jeskson 来源 | 达达前端小酒馆 解构赋值: 数组的解构赋值,对象的解构赋值,字符串的解构赋值,数值与布尔值的解构赋值,函数参数的解构赋值. 开发环境准备: 编辑器,VS Code, ...
- 「NOIP2016」换教室
传送门 Description 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 $ 2n $ 节课程安排在 $ n $ 个时间段上.在第 $ i ...
- linux 查看网卡以及开启网卡
1.查看并分配虚拟网络 我们首先要知道 VMware 三种网络模式的区别. ①.Bridged(桥接模式):就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信.在桥接的作用下,类似于把物理主机虚拟为 ...
- 【Beta】Scrum Meeting 9 & 助教参会记录
目录 前言 任务分配 燃尽图 会议照片 签入记录 上周助教交流总结 Q:项目进度如何? Q:有关commit与issue关联的问题? Q:人员变动后分工的变化情况? Q:接下来还有什么新功能? Q:大 ...
- Net core学习系列(七)——Net Core中间件
一.什么是中间件(Middleware)? 中间件是组装到应用程序管道中以处理请求和响应的软件. 每个组件: 选择是否将请求传递给管道中的下一个组件. 可以在调用管道中的下一个组件之前和之后执行工作. ...
- Java基础 awt Frame 窗体的大小不可调
JDK :OpenJDK-11 OS :CentOS 7.6.1810 IDE :Eclipse 2019‑03 typesetting :Markdown code ...
- Python之多态案例
class Canvas: def draw_pic(self, shape): print('--start draw--') shape.draw(self) class Rectangle: d ...
- 【iCore4 双核心板_FPGA】实验二十:NIOS II之UART串口通信实验
实验指导书及源代码下载地址: 链接:https://pan.baidu.com/s/1g_tWYYJxh4EgiGvlfkVu1Q 提取码:dwwa 复制这段内容后打开百度网盘手机App,操作更方便哦 ...
- 没有可用的软件包 xxx,但是它被其它的软件包引用了
在linux下apt安装软件,弹出这个错. 解决,更新下资源: sudo apt-get update