由于本人一直以来,用的三段式状态机,第三段写法都是组合逻辑写法,但是近期有小伙伴面试小公司,写到状态机的第三段时候,按照我一直用到的组合逻辑来写第三段,提供输出,被提出了质疑,曰:我们一直用的都是时序逻辑来写第三段?

由于本人从来没有遇到过这种质疑,所以具体什么情况也不是太清楚,仅仅以此篇博客来作为一种测试,解答第三段如何写的问题。

以序列检测器为例,我们分别提供组合逻辑以及时序逻辑来实现第三段,并通过行为仿真来验证其功能的正确性:

要求无重叠检测序列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

行为仿真图:

如何最后一段换成时序逻辑,则仿真结果为:

可以发现,二者仿真结果一致,所以无论第三段是组合逻辑还是时序逻辑都可以,但是本人却觉得组合逻辑更让人容易理解,输入只需要根据当前状态进行判断即可。

千万不要在存有质疑了。

关于三段式状态机第三段是组合逻辑还是时序逻辑的问题?相关推荐

  1. 三段式状态机_FPGA笔试题——序列检测(FSM状态机)

    FSM有限状态机,是FPGA和数字IC相关岗位必须要掌握的知识点,在笔试和面试中都非常常见. (1)了解状态机:什么是摩尔型状态机,什么是米利型状态机,两者的区别是什么?一段式.二段式.三段式状态机的 ...

  2. 三段式状态机-FSM

    三段式代码多,但是有时钟同步,延时少,组合逻辑跟时序逻辑分开并行出错少. (1)同步状态转移 (2)当前状态判断接下来的状态 (3)动作输出 如果程序复杂可以不止三个always   .always ...

  3. 小梅哥三段式状态机按键消抖改写

    小梅哥三段式状态机按键消抖改写 小梅哥资料中按键消抖部分是用一段式.二段式状态机写的.我用三段式状态机改写了一下,仿真和板载测试通过. 代码记录如下: module key_filter1(input ...

  4. fpga时序逻辑(三段式状态机模板、rom实现、边沿检测)

    目录 VL21 根据状态转移表实现时序电路 VL22 根据状态转移图实现时序电路 VL23 ROM的简单实现 VL24 边沿检测 VL21 根据状态转移表实现时序电路 题目分析: 1.使用三段式状态机 ...

  5. DSP嵌入式C语言状态机,三段式状态机描述及模版

    三段式状态机描述及模版 [复制链接] 本帖最后由 Aguilera 于 2018-11-10 20:23 编辑 时序电路的状态是一个状态变量集合,这些状态变量在任意时刻的值都包含了为确定电路的未来行为 ...

  6. 一段式、两段式以及三段式状态机(FSM)设计实例

    一段式.二段式以及三段式状态机(FSM)设计实例 状态机(FSM)分类 状态转移的三种编码方式 一段式.两段式状态机(FSM)区别 vivado与modelsim联调显示状态机 设计实例 状态转移图 ...

  7. 基于verilog的三段式状态机

    三段式状态机的优势:三段式描述方法与一段式和两段式状态机描述相比,虽然代码结构复杂了一些,但是换来的优势是使FSM(Finite State Machine)做到了同步寄存器输出,消除了组合逻辑输出的 ...

  8. 三段式状态机_Verilog实战篇(5)——FIFO amp; 状态机

    今天的暑期培训课依旧是由邸志雄老师主讲:FIFO基本原理及状态机的编写和应用. 下面先说一下FIFO:     一.FIFO 常见参数主要有:   1. FIFO的宽度:即 FIFO 一次读写操作的数 ...

  9. 重迭式三段式状态机序列检测器-检测10110110

    重迭式三段式状态机序列检测器-检测10110110 要求:序列检测器 clk input clock input rst_n input asynchronous reset, low active ...

  10. SJA1000 CAN总线verilog写的SJA1000 CAN总线控制器。 程序使用三段式状态机,对于语句均有箱子的中文注释

    SJA1000 CAN总线verilog写的SJA1000 CAN总线控制器. 程序使用三段式状态机,对于语句均有箱子的中文注释,同时还有相关的文档说明. 可直接拿来使用,同时适合新手学习规范写作代码 ...

最新文章

  1. 如何将CSDN文档输出PDF文件?
  2. 数学之美系列十七 -- 谈谈搜索引擎作弊问题(Search Engine Anti-SPAM)
  3. web开发中常见的安全漏洞及避免方法
  4. Redis常用命令之操作String类型
  5. Spring-Cloud 学习笔记-(4)负载均衡器Ribbon
  6. 即日起,正式进入编程世界!
  7. JAVA入门级教学之(封装)
  8. golang uint 减法问题
  9. 阿里:车联网将成新网络入口
  10. libusb的使用教程和例子
  11. 锐捷自动定时启动,开机自动认证校园网 教程
  12. 1, 定义一个基类BaseClass,从它派生出类DerivedClass。BaseClass里有成员函数fn1(),fn2(),DerivedClass也有成员函数fn1(),fn2()。在主函数中
  13. 从团队协作的五大障碍看团队管理该怎么做
  14. python大作业题目_Python大作业
  15. 切入点表达式的写法详解
  16. 内卷老员工之三级缓存和伪共享
  17. 小学6年级下册计算机课教案,小学六年级下册音乐教案大全
  18. | Element 详情
  19. 阿里云王文彬:希望云计算支撑百亿设备
  20. ubuntu18.04安装coturn(编译安装还是apt安装)

热门文章

  1. 微软更新补丁手动下载地址
  2. K3CLOUD业务系统编码规则设置
  3. 细胞自动机 通用计算机,科学网—《走近混沌》-27-初级细胞自动机 - 张天蓉的博文...
  4. puttygen 可以将key文件转为pem文件for xshell 20211213
  5. 热传导方程的差分格式原理与matlab实现
  6. 系统辨识与自适应控制matlab仿真下载,系统辨识与自适应控制MATLAB仿真 全部程序...
  7. matlab的otdr仿真,otdr软件下载
  8. 2016考研数学四轮进阶复习规划
  9. 飞思卡尔mc9s08烧录方法_飞思卡尔单片机烧写程序方法(量产).pdf
  10. 飞思卡尔单片机是用c语言写吗,飞思卡尔单片机需要注意的引脚说明