
本题链接:
https://hdlbits.01xz.net/wiki/Fsm_onehot
给定以下具有 1 个输入和 2 个输出的状态机:

假设此状态机使用独热编码,其中 state[0] 到 state[9] 分别对应于状态 S0 到 S9。 除非另有说明,否则输出为零。
实现状态机的状态转换逻辑和输出逻辑部分(但不是状态触发器)。 您在 state[9:0] 中获得当前状态,并且必须生成 next_state[9:0] 和两个输出。 根据独热编码推导逻辑方程。 (测试台将不使用独热编码输入进行测试,以确保您不会尝试做更复杂的事情)。

module top_module(
input in,
input [9:0] state,
output [9:0] next_state,
output out1,
output out2); 提示:
独热编码转换逻辑的逻辑方程可以通过查看状态转换图的边缘来得到。

module top_module(
input in,
input [9:0] state,
output [9:0] next_state,
output out1,
output out2);
assign next_state[0] = ~in & (state[0] | state[1] | state[2] | state[3] | state[4] | state[7] | state[8] | state[9]);
assign next_state[1] = in & (state[0] | state[8] | state[9]);
assign next_state[2] = in & state[1];
assign next_state[3] = in & state[2];
assign next_state[4] = in & state[3];
assign next_state[5] = in & state[4];
assign next_state[6] = in & state[5];
assign next_state[7] = in & (state[6] | state[7]);
assign next_state[8] = ~in & state[5];
assign next_state[9] = ~in & state[6];
assign out1 = state[8] | state[9];
assign out2 = state[7] | state[9];
endmodule



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