[求助]状态机的状态被综合掉的问题。
module xulie(clk,
rst_n,
in,
out
);
input clk,rst_n,in;
output reg out;
//01101
reg state,next_state;
parameter idle=3'd0;//
parameter s1=3'd1;//0
parameter s2=3'd2;//01
parameter s3=3'd3;//011
parameter s4=3'd4;//0110
parameter s5=3'd5;//01101
always @ (posedge clk or negedge rst_n)
if(!rst_n)
state<=idle;
else
state<=next_state;
always @ (state or in)
begin
next_state=3'bxxx;
case(state)
idle:if(in==0)
next_state=s1;
else
next_state=idle;
s1:if(in==1) //0
next_state=s2;
else
next_state=s1;
s2:if(in==1) //01
next_state=s3;
else
next_state=s1;
s3:if(in==1) //011
next_state=idle;
else
next_state=s4;
s4:if(in==1) //0110
next_state=s5;
else
next_state=s1;
s5:if(in==1) //01101
next_state=s3;
else
next_state=s1;
default:next_state=idle;
endcase
end
always @ (state)
case(state)
idle,s1,s2,s3,s4:out<=1'b0;
s5:out<=1'b1;
default:out<=1'b0;
endcase
endmodule
这是一个简单的检测01101序列的程序,进行后仿真的时候,发现idle之后的状态全部是undefined,但是程序依然能正确输出。
这是怎么一回事?
有一个警告:Warning: Can't display state machine states -- register holding state machine bit "|xulie|state.idle" was synthesized away
我F1了一下,大概意思就是状态被综合掉 。
请大家看看是怎么回事,
如果用功能仿真的话就没这种问题
http://cache.amobbs.com/bbs_upload782111/files_45/ourdev_674374E3QXKX.jpg
(原文件名:FM(VWSLHF{5E4N0ICMB%J]X.jpg) 这个状态怎么会被综合掉呢? 最后一个always,信号敏感应该用posedge clk
三段状态机标准写法。 楼上讲的是正确的,但我不是这个WARNING的原因,楼主可以在仿真时加上next_state,看看情况怎么样,我觉得应该和综合的设置参数有关系,问一下楼主用的是什么那个版本的软件! 回复【1楼】yvhksovo
-----------------------------------------------------------------------
嗯,标准三段式写法的确该是赢时序输出,但是时序输出会延迟一个周期,我这里没有选择时序输出,问题不大。那个warning也不是这个引起的,我改成时序逻辑也会出现那个错误。 回复【2楼】oceanx
-----------------------------------------------------------------------
用的是quartusii9.0在功能仿真的时候没有出问题,而且后仿真逻辑上也没出问题,就是这个状态机的显示这一块有问题,还是不爽。综合设置的参数我用的默认的。 QUARTUS9.0去年用了一年没有发现这个问题,可能是软件的BUG吧,你试试看QUARTUS10.1.
页:
[1]