【重拾FPGA】三段式状态机的路口红绿灯
以前我写状态机都是一段式状态机,虽然目前因为项目都很小,所以一段式没觉得有什么不对劲的,但是为了以后的需要,还是转向三段式状态机吧。
三段式是哪三段呢?
1.将“新状态”赋给“当前状态”,非阻塞赋值
2.产生下一个“新状态”(可能包含组合逻辑),阻塞赋值,激励条件为当前状态
3.根据“当前状态”产生输出(可能包含组合逻辑),非阻塞赋值
以一个只有两个状态的路口红绿灯为例写一个三段式状态机:
要用到的重要寄存器:
parameter s1 = 1'b0, s2 = 1'b1; //第一个状态red1和blue2亮,第二个状态red2和blue1亮
output reg state_cur; //现在状态
output reg state_next; //下一个状态output reg [3:0] cnt; //计数器到10
reg cnt_flag; //计时器计满指示
三段式因为有当前状态和新状态之分,所以要两个寄存器来分别存储,因为红绿灯要使用计数器控制时间,故设置了计数器
第一段:将“新状态”赋给“当前状态”,非阻塞赋值
always@(posedge clk or negedge rst_n) //第一段为单纯次态寄存器迁移到现态寄存器,改变现在状态
beginif(!rst_n)state_cur <= s1;elsestate_cur <= state_next;
end
第二段:产生下一个“新状态”,阻塞赋值,注意激励条件
always@(state_cur or rst_n or cnt_flag) //第二段为状态转移条件判断,改变下一个状态beginif(!rst_n)state_next = s2;elsebegincase(state_cur)s1:beginif(cnt_flag)state_next = s2;elsestate_next = s1;ends2:beginif(cnt_flag)state_next = s1;elsestate_next = s2;enddefault:state_next = s1;endcaseendend
注意激励条件不再是时钟上升沿,否则会出现一直改变状态的死循环错误
第三段:根据“当前状态”产生输出
always@(posedge clk or negedge rst_n) //第三段为现在状态和输出的关系beginif(!rst_n)beginred1 = 0;blue1 = 0;red2 = 0;blue2 = 0;endelsebegincase(state_cur)s1:beginred1 = 1;blue1 = 0;red2 = 0;blue2 = 1;ends2:beginred1 = 0;blue1 = 1;red2 = 1;blue2 = 0;enddefault:beginred1 = 0;blue1 = 0;red2 = 0;blue2 = 0;endendcaseendend
【重拾FPGA】三段式状态机的路口红绿灯相关推荐
- 重迭式三段式状态机序列检测器-检测10110110
重迭式三段式状态机序列检测器-检测10110110 要求:序列检测器 clk input clock input rst_n input asynchronous reset, low active ...
- fpga时序逻辑(三段式状态机模板、rom实现、边沿检测)
目录 VL21 根据状态转移表实现时序电路 VL22 根据状态转移图实现时序电路 VL23 ROM的简单实现 VL24 边沿检测 VL21 根据状态转移表实现时序电路 题目分析: 1.使用三段式状态机 ...
- 三段式状态机_Verilog实战篇(5)——FIFO amp; 状态机
今天的暑期培训课依旧是由邸志雄老师主讲:FIFO基本原理及状态机的编写和应用. 下面先说一下FIFO: 一.FIFO 常见参数主要有: 1. FIFO的宽度:即 FIFO 一次读写操作的数 ...
- 三段式状态机_FPGA笔试题——序列检测(FSM状态机)
FSM有限状态机,是FPGA和数字IC相关岗位必须要掌握的知识点,在笔试和面试中都非常常见. (1)了解状态机:什么是摩尔型状态机,什么是米利型状态机,两者的区别是什么?一段式.二段式.三段式状态机的 ...
- DSP嵌入式C语言状态机,三段式状态机描述及模版
三段式状态机描述及模版 [复制链接] 本帖最后由 Aguilera 于 2018-11-10 20:23 编辑 时序电路的状态是一个状态变量集合,这些状态变量在任意时刻的值都包含了为确定电路的未来行为 ...
- 三段式状态机-FSM
三段式代码多,但是有时钟同步,延时少,组合逻辑跟时序逻辑分开并行出错少. (1)同步状态转移 (2)当前状态判断接下来的状态 (3)动作输出 如果程序复杂可以不止三个always .always ...
- 一段式、两段式以及三段式状态机(FSM)设计实例
一段式.二段式以及三段式状态机(FSM)设计实例 状态机(FSM)分类 状态转移的三种编码方式 一段式.两段式状态机(FSM)区别 vivado与modelsim联调显示状态机 设计实例 状态转移图 ...
- 基于verilog的三段式状态机
三段式状态机的优势:三段式描述方法与一段式和两段式状态机描述相比,虽然代码结构复杂了一些,但是换来的优势是使FSM(Finite State Machine)做到了同步寄存器输出,消除了组合逻辑输出的 ...
- 小梅哥三段式状态机按键消抖改写
小梅哥三段式状态机按键消抖改写 小梅哥资料中按键消抖部分是用一段式.二段式状态机写的.我用三段式状态机改写了一下,仿真和板载测试通过. 代码记录如下: module key_filter1(input ...
- SJA1000 CAN总线verilog写的SJA1000 CAN总线控制器。 程序使用三段式状态机,对于语句均有箱子的中文注释
SJA1000 CAN总线verilog写的SJA1000 CAN总线控制器. 程序使用三段式状态机,对于语句均有箱子的中文注释,同时还有相关的文档说明. 可直接拿来使用,同时适合新手学习规范写作代码 ...
最新文章
- 【堆叠抓取+深度学习】基于深度学习+PPO深度强化学习的堆叠物体抓取算法的MATLAB仿真
- 判断程序是否运行在虚拟机中的代码
- Scala入门到精通——第八节 包和引入
- 几种简单的素数判定法(转)
- 【转载】interpolation(插值)和 extrapolation(外推)的区别
- 机器人总动员中的小草_机器人总动员读后感
- python time库_python中time库的实例使用方法
- ASP.NET2.0的快速入门站点
- 《编写高质量代码:改善Java程序的151条建议》读书笔记
- pycharm如何上传代码到github
- markdown语法中一些数学符号怎么打
- ad如何计算电路板的pin数量_PCB厂一到八层电路板的叠层设计方式
- 【金融市场基础知识】——中国的金融体系(二)
- stm32h743单片机嵌入式学习笔记8-avi视频解码
- 商业银行vh是哪个银行的简称_各个银行缩写是什么
- Springboot开启APR模式
- 【群晖NAS】真·免费内网穿透方案 及踩坑合集
- 网页上打印PDF文件
- L298N电机驱动的使用
- 安卓模拟器自动抓取某红书晒单数据
热门文章
- houseprice_analysis_广州房子租售比分析(中)
- java中注释如何换行,java注释中空格和换行符的处理
- 中国天气网城市代码爬取
- 【易语言界面开发系列教程之(EX_UI使用系列教程(12)--EX组件(列表框EX))】
- Android开发,MapBox地图详细介绍、使用、部分功能实现(初始化、标记、定位、styleurl)
- 图像的上采样与下采样
- 嵌入式linux UBoot移植篇
- idea格式化代码小技巧
- oracle库sql根据拼音查汉字,根据拼音首字母模糊查询数据库中文字段
- AI为传统零售行业赋能,自助收银推动无人零售发展