[吾题有解] HDLBits : Fsm onehot

张开发
2026/4/4 19:45:28 15 分钟阅读
[吾题有解] HDLBits : Fsm onehot
相比于之前设计的状态机题目给出输入、要求我们自己写出状态变化、状态逻辑判断与输出本题直接将现态本身作为输入要求我们给出次态和输出。搞清楚输入输出之后鉴于独热码的特征我们可以对输入/输出的每一位进行单独判断其实如果从功能实现上出发也不是必须如此只是题目中对输入有特殊说明。The testbench will test with non-one hot inputs to make sure you’re not trying to do something more complicated.也就是说Testbench会给出非独热码的输入比如10’b10_0001_0010此时如果我们对输入作判断后直接将移位后的state赋值给next_state如S1的state在“正常的”独热码情况下可以在输入为1时通过S0的state左移1位得到由于条件不满足直接跳转到default状态S0均会导致错误的次态出现。所以应当对next_state的每一位单独判断在输入in指定的情况下根据输入现态的每一位确定是否会跳转到这个状态也就是次态的这个位是否置1。这样对于次态的每一位都是由现态正确跳转而来即使由于现态以非独热码的形式输入导致次态输出整体上并非独热码形式但是对于单独的1位次态来说结果都是正确的每一位次态都认为其余次态的位均应为0相当于把多个独热码叠加起来了给出Verilog HDL供大家参考moduletop_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]instate[1];assign next_state[3]instate[2];assign next_state[4]instate[3];assign next_state[5]instate[4];assign next_state[6]instate[5];assign next_state[7]in(state[6]|state[7]);assign next_state[8]~instate[5];assign next_state[9]~instate[6];assign out1(state[8]1b1) || (state[9] 1b1);assign out2(state[7]1b1) || (state[9] 1b1);endmodule

更多文章