三段式状态机进入错误状态
找遍所有代码,没有出错的地方,而且进入的那个状态,应该无条件进入下一个状态,但就是停在那不走了
如果EDA仿真没有问题,而FPGA出现的话,可能是时钟的问题.
尝试将状态机编码变化一下试试
没有看你的具体代码,不好判断引起问题的原因,不过以前我的一个设计中也出现了类似的问题,从代码中找不到原因,最后将状态机编码变化了一下,问题就解决了,也可能是电路确实有问题,但我们发现而已。
parameter [`ONE_HOT_CODE_LEN-1:0]//one-hot code
Idle= `ONE_HOT_CODE_LEN'h000001,
ToClick= `ONE_HOT_CODE_LEN'h000002,
ClickWait= `ONE_HOT_CODE_LEN'h000004,
ClickDelay = `ONE_HOT_CODE_LEN'h000008,
ClickTest= `ONE_HOT_CODE_LEN'h000010,
ClickSure= `ONE_HOT_CODE_LEN'h000020,
EnableADC = `ONE_HOT_CODE_LEN'h000040,
SampleX= `ONE_HOT_CODE_LEN'h000080,
WaitXADC = `ONE_HOT_CODE_LEN'h000100,
XADC_CSRD = `ONE_HOT_CODE_LEN'h000200,
SaveX= `ONE_HOT_CODE_LEN'h000400,
SampleY= `ONE_HOT_CODE_LEN'h000800,
WaitYADC = `ONE_HOT_CODE_LEN'h001000,
YADC_CSRD = `ONE_HOT_CODE_LEN'h002000,
SaveY= `ONE_HOT_CODE_LEN'h004000,
ToClickUp = `ONE_HOT_CODE_LEN'h008000,
ClickUpDelay = `ONE_HOT_CODE_LEN'h010000,
ClickUpWait = `ONE_HOT_CODE_LEN'h020000,
ClickUpSure = `ONE_HOT_CODE_LEN'h040000,
Sample1_6 = `ONE_HOT_CODE_LEN'h080000,
WaitADC1_6 = `ONE_HOT_CODE_LEN'h100000,
Save1_6= `ONE_HOT_CODE_LEN'h200000,
SetInt= `ONE_HOT_CODE_LEN'h400000,
Debugtest = `ONE_HOT_CODE_LEN'h800000,
Debugwait = `ONE_HOT_CODE_LEN'h1000000,
Debug_CSRD = `ONE_HOT_CODE_LEN'h2000000,
Debugdata = `ONE_HOT_CODE_LEN'h4000000;
我用的是独热码,自我感觉应该没问题,我换一下顺序试试