如何保证状态机从任何无效状态返回到已知状态?

状态机在合成后用编码状态寄存器实现。状态机的所有状态将由状态寄存器的值来表示。但是状态寄存器的某些值可以设置为未定义状态,即所谓无效状态。例如,一个热编码状态机的有效状态将状态寄存器设置为1位,另一位设置为0。国家登记册的任何其他值都被视为无效。对于二进制编码状态机,如果状态数不是N的2,则仍然存在无效状态。合成过程通常会忽略状态机优化过程中的无效状态。这意味着状态机一旦进入无效状态,就不能返回已知状态。下面的步骤将阻止这种情况发生。

在SypPrimePro中,SyoLoice属性的安全值可以用来解决这个问题。下面是一个例子:

在Verilog中:

Reg [2:0]状态/ *合成SythOng= =“安全”*/;

总是@(POST RST或POSEDGE CLK)
γIF(RST)
α-α状态=0;
否则
例(状态)
α~(0):α,β,IF(In)
(1);
第1、第二、第2、第二、第二、第二、第二、第二、第二、第二章:
(2):α-α状态=3;
(3):α-α状态=4;
(4):α-α状态=5;
(5):α-α状态=6;
(6):α-α状态=0;
β-内端粒酶

在VHDL:

信号状态:StdLogLogic矢量(2下降到0);

属性同步编码:字符串;
状态的属性同步编码:信号是“安全的”;

开始

进程(RST,CLK)
开始
那么,如果(RST=‘1’)
“状态”=“000”;
然后,ELSIFF RISIGIN EDGE(CLK)
β情况是
当“000”=& gt;如果(din=‘1’)
(001);
如果是:
当“001”=& gt;状态& lt=“010”;
当“010”=& gt;状态& lt=“011”;
当“011”=& gt;状态& lt=“100”;
当“100”=& gt;状态& lt=“101”;
当“101”=& gt;状态& lt=“110”;
当“110”=& gt;状态& lt=“000”;
端部壳体;
若结束;
结束过程;

终端体系结构RTL;

当同步编码是安全的时,状态机可以从无效状态重置到其重置状态。它使状态机更加健壮。

编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-07-27 11:34:48 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它