序列检测器(三段式状态机)
Verilog HDL 学习笔记三
基于状态机的序列检测器
检测序列11001,其状态转移图如下所示:
三段式:在两个always模块描述方法基础上,使用三个always模块,一个always模块采用同步时序描述状态转移,一个always采用组合逻辑判断状态转移条件,描述状态转移规律,另一个always模块描述状态输出(可以用组合电路输出,也可以时序电路输出)。
设计代码:
module seqdet_11001(dout,din,clk,rst_n);input clk,rst_n;input din;output reg dout;reg [2:0] cst,nst;localparam [2:0] s0=3'b000,s1=3'b001,s2=3'b010,s3=3'b011,s4=3'b100;always @(posedge clk or negedge rst_n )
beginif(!rst_n)cst <= 0;elsecst <= nst;
end always @(din or cst)
begincase(cst)s0:if(din==1)nst <= s1;else nst <= s0;s1:if(din==1)nst <= s2;else nst <= s0;s2:if(din==0) nst <= s3;elsenst <= s2;s3:if(din==0)nst <= s4;else nst <= s1;s4:if(din==1)nst <= s1;elsenst <= s0;default: nst <= s0;endcase
endalways @(posedge clk or negedge rst_n)
beginif(!rst_n)dout <= 0;else if((din==1)&&cst==s4)dout <= 1;elsedout <= 0;
endendmodule
序列信号发生器可以通过三种方法实现:
1.状态转移型
用一个不断循环的状态机,循环产生序列信号1100_1100_1001_1001;
2.移位寄存器型
通过移位寄存器构成序列信号发生器,定义一个16位的寄存器1100_1100_1001_1001,输入信号的最高位移入最低位,其他位依次向左移一位,在每个时钟上升沿到来时,将输入信号的最高位通过dout输出,从而循环产生序列信号。
3.计数器加组合输出网络类型
根据序列的长度M设计模为M的计数器,计数器的状态可以自定,可列出真值表和卡诺图进行化简,得出逻辑表达式,根据逻辑表达式设计代码。比如以下y要产生的序列1100_1100_1001_1001,则需要模为16位的计数器。
本测试代码采用第二种方法——移位寄存器实现序列信号产生器。
测试代码:
module seqdet_11001_tb;reg clk,rst_n;reg din;wire dout;reg [15:0] DIN;seqdet_11001 uint(.clk(clk),.rst_n(rst_n),.din(din),.dout(dout)
);always #10 clk = ~clk;
initial
beginclk=0;rst_n=0;din=0;DIN=16'b0;#10 rst_n=1;DIN=16'b1100_1100_1001_1001;#340 $stop;
endalways @(posedge clk)
begindin <= DIN[15];DIN <={DIN[14:0],DIN[15]};
endendmodule
具体的三种实现序列信号产生器的方法可参考[]https://blog.csdn.net/Reborn_Lee/article/details/80378670
序列检测器(三段式状态机)相关推荐
- 重迭式三段式状态机序列检测器-检测10110110
重迭式三段式状态机序列检测器-检测10110110 要求:序列检测器 clk input clock input rst_n input asynchronous reset, low active ...
- 三段式状态机_FPGA笔试题——序列检测(FSM状态机)
FSM有限状态机,是FPGA和数字IC相关岗位必须要掌握的知识点,在笔试和面试中都非常常见. (1)了解状态机:什么是摩尔型状态机,什么是米利型状态机,两者的区别是什么?一段式.二段式.三段式状态机的 ...
- 【 FPGA 】序列检测器的Mealy状态机实现
上篇博文讲了使用Moore状态机来设计一个序列检测器:序列检测器的Moore状态机实现 原理一致,这里只不过采用了Mealy状态机实现,快速给出: 状态转移图如下:被检测序列为1101,也就是说,如果 ...
- 三段式状态机_Verilog实战篇(5)——FIFO amp; 状态机
今天的暑期培训课依旧是由邸志雄老师主讲:FIFO基本原理及状态机的编写和应用. 下面先说一下FIFO: 一.FIFO 常见参数主要有: 1. FIFO的宽度:即 FIFO 一次读写操作的数 ...
- 小梅哥三段式状态机按键消抖改写
小梅哥三段式状态机按键消抖改写 小梅哥资料中按键消抖部分是用一段式.二段式状态机写的.我用三段式状态机改写了一下,仿真和板载测试通过. 代码记录如下: module key_filter1(input ...
- fpga时序逻辑(三段式状态机模板、rom实现、边沿检测)
目录 VL21 根据状态转移表实现时序电路 VL22 根据状态转移图实现时序电路 VL23 ROM的简单实现 VL24 边沿检测 VL21 根据状态转移表实现时序电路 题目分析: 1.使用三段式状态机 ...
- SJA1000 CAN总线verilog写的SJA1000 CAN总线控制器。 程序使用三段式状态机,对于语句均有箱子的中文注释
SJA1000 CAN总线verilog写的SJA1000 CAN总线控制器. 程序使用三段式状态机,对于语句均有箱子的中文注释,同时还有相关的文档说明. 可直接拿来使用,同时适合新手学习规范写作代码 ...
- system verilog 三段式状态机和interface
1.结构体和C语言类似,system verilog定义的package,也是一个sv文件,需要被工程当作文件一样添加.如果是inclue的文件,要在工程中设置搜索路径,否则在引用时要用相对工程启动文 ...
- DSP嵌入式C语言状态机,三段式状态机描述及模版
三段式状态机描述及模版 [复制链接] 本帖最后由 Aguilera 于 2018-11-10 20:23 编辑 时序电路的状态是一个状态变量集合,这些状态变量在任意时刻的值都包含了为确定电路的未来行为 ...
- 三段式状态机-FSM
三段式代码多,但是有时钟同步,延时少,组合逻辑跟时序逻辑分开并行出错少. (1)同步状态转移 (2)当前状态判断接下来的状态 (3)动作输出 如果程序复杂可以不止三个always .always ...
最新文章
- 实用ListView加载提示工具类
- codeforces B. Eight Point Sets 解题报告
- LeetCode_每日一题今日份_剑指Offer11.旋转数组的最小数字
- Sql server时间转时间long
- 不是每个人都适合linux
- 箭头函数的使用用法(一)
- Orchard架构介绍
- Linq之ToDictionaryTSource, TKey, TElement的写法
- yolov4 开发环境搭建_YOLOv4 的各种新实现、配置、测试、训练资源汇总
- PowerPC家族谱系详解
- data协议,好玩,好用
- 基于CIM的馈线建模和应用(论文学习)
- rfcn 共享_rfcn卷积网络
- Oculus内下游戏报错,OVR40779122解决办法
- 自然语言处理中的迁移学习(下)
- DDNS动态域名解析IPv6地址
- QQ、微信、新浪 利用refresh_token重新登录
- JavaFX 布局——VBox
- excel将常规数字转为日期格式
- 利用RSS进行学术期刊订阅
热门文章
- 数据分析求职之费米估算解析
- (最新)cpu天梯图 (CPU)- Processor Benchmarks
- QUIC浅析,android开发者模式
- SDU软件17级大一下离散期末真题(回忆版)
- 计算机一级操作题题库在线,全国计算机一级考试题库操作题
- 开源一款娱乐的qq机器人-QQRobot
- dropout层加在哪里_常用层 - Keras中文文档
- jdk11新特性,是否有必要从JDK8切换到JDK11
- 软件测试行业好干吗,软件测试可以干到多少岁?
- 孪生网络图像相似度_论文浅尝 | 使用孪生BERT网络生成句子的嵌入表示