|
我是个FPGA方面的新手,遇到一些逻辑上讲不通的问题,还请高手指教。
我使用的是Verilog语言:
在我某段程序里设计了一个状态机,有13个状态
首先:我给状态机使用one-hot码
即parameter FSM0 = 13'b0000000000001,
FSM1 = 13'b0000000000010,
FSM2 = 13'b0000000000100,
......
FSM12 =13'b1000000000000;
我给该状态机设置了default跳转到FSM0,并且每个状态都严格指定了下一个跳转方向。综合之后,状态机经常跳到一个未知状态,即不属于我设置的13个状态中的任何一个,并且跳不回来,停留在该位置状态(用Sigtap观察的),也就是说default里设置的跳转根本没有生效。
然后:我给状态机使用4位二进制编码,并且扩充全4位二进制所能表达的状态,即增加FSM13、FSM14、 FSM15三个状态,新增加的3个状态什么都不干,就是往FSM0跳,其余丝毫不改。
即parameter FSM0 = 4'b0000,
FSM1 = 4'b0001,
FSM2 = 4'b0010,
......
FSM12 = 4'b1100,
FSM13 = 4'b1101,
FSM14 = 4'b1110,
FSM15 = 4'b1111;
由于状态罗列全了,所以不再使用default了,此时状态机就正常运转,丝毫不错了。
请问为什么我使用one-hot码就不行呢,是不是状态太多了,不宜使用one-hot码了?
为什么明明使用了default跳转,但是状态机偏偏会停留在一个未知状态?
由于one-hot码使用了13位寄存器,未知状态比较多,Quartus是怎么综合该one-hot码的default的? |
|