FPGA的状态死锁问题
任何一个状态机都需要有初始化的动作,否则就会出现死锁现象,当芯片上电或者复位后,状态机应该能够自动将所有的
判断条件复位,并进入初始化状态,一般采用异步复位电路来实现状态机的初始化。在状态初始化时,需要防止出现伪初
始化或者说不完全初始的情况特别是针对一些总线或者有位宽要求的输出信号和变量。
未完全初始化的状态机(锁存器)
always@( posedge Clk or negedge Rst_N ) begin
if(!Rst_N ) state <= IDLE;
else case( state )
IDLE : begin
s[0] <= 1'b1;
state <= ACT1;
end
ACT1 : begin
s[1] <= 1'b1;
state <=ACT2;
end
... ...
default : state <= IDLE;
状态死锁的原因:没有对s[3 : 0] 初始化。改进:从根本来说,所有的初始化
动作都需要对状态机中的每个输出信号和变量进行初始化。对于状态机来说,特别注意
要有default的分支语句,避免进入死锁。