HDLBits (158) — 有限状态机:独热编码逻辑方程
本题链接:
https://hdlbits.01xz.net/wiki/Exams/review2015_fsmonehot
给定以下具有 3 个输入、3 个输出和 10 个状态的状态机:

假设使用以下独热编码,通过检查导出下一状态逻辑方程和输出逻辑方程: (S, S1, S11, S110, B0, B1, B2, B3, Count, Wait) = (10'b0000000001, 10 'b0000000010, 10'b0000000100, ... , 10'b1000000000)
通过检查导出状态转换和输出逻辑方程假设独热编码。 这里仅需实现此状态机的状态转换逻辑和输出逻辑(组合逻辑部分)。 (测试台将使用非独热编码输入进行测试,以确保你不会尝试做更复杂的事情)。
编写生成满足以下等式的代码:
B3_next -- 状态 B1 的下一个状态逻辑
S_next
S1_next
Count_next
Wait_next
done -- 输出逻辑
counting
shift_ena

题目
提示:
独热编码状态转换逻辑的逻辑方程可以通过查看状态转换图的边缘来得到

答案

非阻塞赋值属于并行执行语句,即下一条语句的执行和当前语句的执行是同时进行的,它不会阻塞位于同一个语句块中后面语句的执行。非阻塞赋值语句使用小于等于号 <= 作为赋值符。
独热编码即 One-Hot 编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候,其中只有一位有效。
有限状态机(Finite-State Machine,FSM),简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。状态机不仅是一种电路的描述工具,而且也是一种思想方法,在电路设计的系统级和 RTL 级有着广泛的应用。
Verilog 中状态机主要用于同步时序逻辑的设计,能够在有限个状态之间按一定要求和规律切换时序电路的状态。状态的切换方向不但取决于各个输入值,还取决于当前所在状态。状态机可分为 2 类:Moore 状态机和 Mealy 状态机。
参考内容:
4.2 Verilog 过程赋值 | 菜鸟教程:
https://www.runoob.com/w3cnote/verilog-process-assign.html
6.3 Verilog 状态机 | 菜鸟教程:
https://www.runoob.com/w3cnote/verilog-fsm.html