HDLBits (150) — 问题2a 有限状态机
本题链接:
https://hdlbits.01xz.net/wiki/Exams/2013_q2afsm
思考如下图所示状态图描述的 FSM:

该有限状态机充当仲裁电路,控制三个请求设备对某种类型资源的访问。 每个设备通过设置信号 r[i] = 1 来请求资源,其中 r[i] 是 r[1]、r[2] 或 r[3]。 r[i] 对应的是有限状态机的输入信号,分别代表三个设备之一。 只要没有请求,有限状态机就会始终保持在状态 A。 当一个或多个请求发出时,有限状态机会决定哪个设备接收到使用资源的授权,并将该设备的 g[i] 信号更改为设置为 1 的状态。 g[i] 对应的是有限状态机的输出。 这里有一个优先级系统,设备 1 的优先级高于设备 2,而设备 3 的优先级最低。 因此例如当有限状态机处于状态 A 时,如果设备 3 是唯一发出请求的设备,则设备 3 将仅接收授权。一旦设备 i 被有限状态机授权,该设备将继续接收授权 只要它的请求,即 r[i] = 1。
编写表示此有限状态机的完整 Verilog 代码。 如上图所示,对状态表和状态触发器使用单独的 always 块。 使用连续赋值语句或 always 块(由你自行决定)描述有限状态机输出 g[i]。 分配你希望使用的任何代码块。

题目

答案

输出波形


有限状态机(Finite-State Machine,FSM),简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。状态机不仅是一种电路的描述工具,而且也是一种思想方法,在电路设计的系统级和 RTL 级有着广泛的应用。
Verilog 中状态机主要用于同步时序逻辑的设计,能够在有限个状态之间按一定要求和规律切换时序电路的状态。状态的切换方向不但取决于各个输入值,还取决于当前所在状态。状态机可分为 2 类:Moore 状态机和 Mealy 状态机。
参考内容:
6.3 Verilog 状态机 | 菜鸟教程:
https://www.runoob.com/w3cnote/verilog-fsm.html