欢迎光临散文网 会员登陆 & 注册

HDLBits (156) — 有限状态机:完整的有限状态机

2022-06-06 18:38 作者:僚机Wingplane  | 我要投稿

本题链接:

https://hdlbits.01xz.net/wiki/Exams/review2015_fsm

这是一系列五个练习中的第四部分,这些练习由几个较小的电路构建一个复杂的计数器。 相关的整体设计,请参阅 the final exercise

你可能希望先执行 FSM: Enable shift registerFSM: Sequence recognizer

我们想创建一个计时器:

  1.  当检测到特定模式 (1101) 时开始,

  2.  再移 4 位以确定延迟的持续时间,

  3.  等待计数器完成计数,并且

  4.  通知用户并等待用户确认计时器。

在这个问题中,只实现了控制定时器的有限状态机。 此处不包括数据路径(计数器和一些比较器)。

串行数据在数据输入引脚上可用。 当接收到 1101 模式时,状态机必须恰好在第 4 个时钟周期断言输出 shift_ena 。

之后状态机断言其计数输出,以指示它正在等待计数器,并一直等到输入 done_counting 为高。

此时,状态机必须断言已经完成并通知用户定时器已超时,并等待直到输入 ack 为 1,然后才被复位以寻找下一次出现的启动序列 (1101)。

状态机应复位为开始搜索输入序列 1101 的状态。

这是预期的输入和输出的示例。  'x' 状态看起来可能有点混乱。 它们表明有限状态机不用关注该周期中的特定输入信号。 例如,一旦检测到 1101 模式,有限状态机将不再查看数据输入,直到完成其他所有操作后再恢复搜索。

题目

提示:

答案

阻塞赋值属于顺序执行,即下一条语句执行前,当前语句一定会执行完毕。阻塞赋值语句使用等号 = 作为赋值符。

非阻塞赋值属于并行执行语句,即下一条语句的执行和当前语句的执行是同时进行的,它不会阻塞位于同一个语句块中后面语句的执行。非阻塞赋值语句使用小于等于号 <= 作为赋值符。

条件(if)语句用于控制执行语句要根据条件判断来确定是否执行。条件语句用关键字 if 和 else 来声明,条件表达式必须在圆括号中。如果 if 条件每次执行的语句只有一条,那么可以不使用 begin 与 end 关键字。但如果是 if-if-else 的形式,即便执行语句只有一条,不使用 begin 与 end 关键字也会引起歧义。当然,编译器一般按照就近原则,使 else 与最近的一个 if(例子中第二个 if)相对应。但显然这样的写法是不规范且不安全的。所以条件语句中加入 begin 与 and 关键字就是一个很好的习惯。

case 语句是一种多路条件分支的形式,可以解决 if 语句中有多个条件选项时使用不方便的问题。case 语句支持嵌套使用。case 语句中的条件选项表单式不必都是常量,也可以是 x 值或 z 值。当多个条件选项下需要执行相同的语句时,多个条件选项可以用逗号分开,放在同一个语句块的候选项中。但是 case 语句中的 x 或 z 的比较逻辑是不可综合的,所以一般不建议在 case 语句中使用 x 或 z 作为比较值。

同步复位是指复位信号在时钟有效边沿到来时有效。如果没有时钟,无论复位信号怎样变化,电路也不执行复位操作。

该描述代码常常会被综合成如下电路:

同步复位的优点:信号间是同步的,能滤除复位信号中的毛刺,有利于时序分析。

同步复位的缺点:大多数触发器单元是没有同步复位端的,采用同步复位会多消耗部分逻辑资源。且复位信号的宽度必须大于一个时钟周期,否则可能会漏掉复位信号。

有限状态机(Finite-State Machine,FSM),简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。状态机不仅是一种电路的描述工具,而且也是一种思想方法,在电路设计的系统级和 RTL 级有着广泛的应用。

Verilog 中状态机主要用于同步时序逻辑的设计,能够在有限个状态之间按一定要求和规律切换时序电路的状态。状态的切换方向不但取决于各个输入值,还取决于当前所在状态。状态机可分为 2 类:Moore 状态机和 Mealy 状态机。

参考内容:

4.2 Verilog 过程赋值 | 菜鸟教程:

https://www.runoob.com/w3cnote/verilog-process-assign.html

4.5 Verilog 条件语句 | 菜鸟教程:

https://www.runoob.com/w3cnote/verilog-condition-statement.html

4.6 Verilog 多路分支语句 | 菜鸟教程:

https://www.runoob.com/w3cnote/verilog-case.html

5.1 Verilog 复位简介 | 菜鸟教程:

https://www.runoob.com/w3cnote/verilog2-reset.html

6.3 Verilog 状态机 | 菜鸟教程:

https://www.runoob.com/w3cnote/verilog-fsm.html


HDLBits (156) — 有限状态机:完整的有限状态机的评论 (共 条)

分享到微博请遵守国家法律