关于三段式状态机第三段是组合逻辑还是时序逻辑的问题?
由于本人一直以来,用的三段式状态机,第三段写法都是组合逻辑写法,但是近期有小伙伴面试小公司,写到状态机的第三段时候,按照我一直用到的组合逻辑来写第三段,提供输出,被提出了质疑,曰:我们一直用的都是时序逻辑来写第三段?
由于本人从来没有遇到过这种质疑,所以具体什么情况也不是太清楚,仅仅以此篇博客来作为一种测试,解答第三段如何写的问题。
以序列检测器为例,我们分别提供组合逻辑以及时序逻辑来实现第三段,并通过行为仿真来验证其功能的正确性:
要求无重叠检测序列01010,分别给出状态转移图以及Verilog设计。
组合逻辑写法
首先给出状态转移图,为了方便,使用Moore状态机的画法。
相应的Verilog描述为:
module seq_detect(input clk,input rst_n,input seq_in,output reg out);//detect sequence 01010//first step: define parameter and state
parameter s0 = 6'b0000_01, s1 = 6'b0000_10, s2 = 6'b0001_00, s3 = 6'b0010_00,
s4 = 6'b0100_00, s5 = 6'b1000_00;reg [5:0] cur_state, nxt_state;//三段式状态机
//第一段:时序逻辑
always@(posedge clk or negedge rst_n) beginif(~rst_n) cur_state <= s0;else cur_state <= nxt_state;
end//第二段:组合逻辑
always@(*) beginnxt_state = s0;case(cur_state) s0: if(seq_in == 0) nxt_state = s1;else nxt_state = s0;s1: if(seq_in == 1) nxt_state = s2;else nxt_state = s1;s2: if(seq_in == 0) nxt_state = s3;else nxt_state = s0;s3: if(seq_in == 1) nxt_state = s4;else nxt_state = s1;s4: if(seq_in == 0) nxt_state = s5;else nxt_state = s0;s5: if(seq_in == 1) nxt_state = s0;else nxt_state = s1;default: nxt_state = s0;endcaseend//第三段:组合逻辑
always@(*) beginif(cur_state == s5) out = 1;else out = 0;
end//第三段:时序逻辑
/*
always@(posedge clk or negedge rst_n) beginif(~rst_n) out <= 0;else if(nxt_state == s5) out <= 1;else out <= 0; end
*/
endmodule
给出testbench文件:
`timescale 1ns/1ps
module seq_detect_tb();//输入输出分别转化为reg,wire
reg clk;
reg rst_n;
reg seq_in;
wire out;parameter PERIOD = 4;
//设计时钟
initial beginclk = 0;# PERIOD/2clk = ~clk;end//设计复位以及输入
initial begin
rst_n = 0;
seq_in = 1;
#5
rst_n = 1; forever begin@(posedge clk)seq_in = 0;@(posedge clk)seq_in = 1; endend//例化设计模块得到输出
seq_detect inst_seq_detect(
.clk(clk),
.rst_n(rst_n),
.seq_in(seq_in),
.out(out)
);endmodule
行为仿真图:
如何最后一段换成时序逻辑,则仿真结果为:
可以发现,二者仿真结果一致,所以无论第三段是组合逻辑还是时序逻辑都可以,但是本人却觉得组合逻辑更让人容易理解,输入只需要根据当前状态进行判断即可。
千万不要在存有质疑了。
关于三段式状态机第三段是组合逻辑还是时序逻辑的问题?相关推荐
- 三段式状态机_FPGA笔试题——序列检测(FSM状态机)
FSM有限状态机,是FPGA和数字IC相关岗位必须要掌握的知识点,在笔试和面试中都非常常见. (1)了解状态机:什么是摩尔型状态机,什么是米利型状态机,两者的区别是什么?一段式.二段式.三段式状态机的 ...
- 三段式状态机-FSM
三段式代码多,但是有时钟同步,延时少,组合逻辑跟时序逻辑分开并行出错少. (1)同步状态转移 (2)当前状态判断接下来的状态 (3)动作输出 如果程序复杂可以不止三个always .always ...
- 小梅哥三段式状态机按键消抖改写
小梅哥三段式状态机按键消抖改写 小梅哥资料中按键消抖部分是用一段式.二段式状态机写的.我用三段式状态机改写了一下,仿真和板载测试通过. 代码记录如下: module key_filter1(input ...
- fpga时序逻辑(三段式状态机模板、rom实现、边沿检测)
目录 VL21 根据状态转移表实现时序电路 VL22 根据状态转移图实现时序电路 VL23 ROM的简单实现 VL24 边沿检测 VL21 根据状态转移表实现时序电路 题目分析: 1.使用三段式状态机 ...
- DSP嵌入式C语言状态机,三段式状态机描述及模版
三段式状态机描述及模版 [复制链接] 本帖最后由 Aguilera 于 2018-11-10 20:23 编辑 时序电路的状态是一个状态变量集合,这些状态变量在任意时刻的值都包含了为确定电路的未来行为 ...
- 一段式、两段式以及三段式状态机(FSM)设计实例
一段式.二段式以及三段式状态机(FSM)设计实例 状态机(FSM)分类 状态转移的三种编码方式 一段式.两段式状态机(FSM)区别 vivado与modelsim联调显示状态机 设计实例 状态转移图 ...
- 基于verilog的三段式状态机
三段式状态机的优势:三段式描述方法与一段式和两段式状态机描述相比,虽然代码结构复杂了一些,但是换来的优势是使FSM(Finite State Machine)做到了同步寄存器输出,消除了组合逻辑输出的 ...
- 三段式状态机_Verilog实战篇(5)——FIFO amp; 状态机
今天的暑期培训课依旧是由邸志雄老师主讲:FIFO基本原理及状态机的编写和应用. 下面先说一下FIFO: 一.FIFO 常见参数主要有: 1. FIFO的宽度:即 FIFO 一次读写操作的数 ...
- 重迭式三段式状态机序列检测器-检测10110110
重迭式三段式状态机序列检测器-检测10110110 要求:序列检测器 clk input clock input rst_n input asynchronous reset, low active ...
- SJA1000 CAN总线verilog写的SJA1000 CAN总线控制器。 程序使用三段式状态机,对于语句均有箱子的中文注释
SJA1000 CAN总线verilog写的SJA1000 CAN总线控制器. 程序使用三段式状态机,对于语句均有箱子的中文注释,同时还有相关的文档说明. 可直接拿来使用,同时适合新手学习规范写作代码 ...
最新文章
- 如何将CSDN文档输出PDF文件?
- 数学之美系列十七 -- 谈谈搜索引擎作弊问题(Search Engine Anti-SPAM)
- web开发中常见的安全漏洞及避免方法
- Redis常用命令之操作String类型
- Spring-Cloud 学习笔记-(4)负载均衡器Ribbon
- 即日起,正式进入编程世界!
- JAVA入门级教学之(封装)
- golang uint 减法问题
- 阿里:车联网将成新网络入口
- libusb的使用教程和例子
- 锐捷自动定时启动,开机自动认证校园网 教程
- 1,	定义一个基类BaseClass,从它派生出类DerivedClass。BaseClass里有成员函数fn1(),fn2(),DerivedClass也有成员函数fn1(),fn2()。在主函数中
- 从团队协作的五大障碍看团队管理该怎么做
- python大作业题目_Python大作业
- 切入点表达式的写法详解
- 内卷老员工之三级缓存和伪共享
- 小学6年级下册计算机课教案,小学六年级下册音乐教案大全
- | Element 详情
- 阿里云王文彬:希望云计算支撑百亿设备
- ubuntu18.04安装coturn(编译安装还是apt安装)
热门文章
- 微软更新补丁手动下载地址
- K3CLOUD业务系统编码规则设置
- 细胞自动机 通用计算机,科学网—《走近混沌》-27-初级细胞自动机 - 张天蓉的博文...
- puttygen 可以将key文件转为pem文件for xshell 20211213
- 热传导方程的差分格式原理与matlab实现
- 系统辨识与自适应控制matlab仿真下载,系统辨识与自适应控制MATLAB仿真 全部程序...
- matlab的otdr仿真,otdr软件下载
- 2016考研数学四轮进阶复习规划
- 飞思卡尔mc9s08烧录方法_飞思卡尔单片机烧写程序方法(量产).pdf
- 飞思卡尔单片机是用c语言写吗,飞思卡尔单片机需要注意的引脚说明