yvhksovo 发表于 2011-9-5 16:08:07

[求助]状态机的状态被综合掉的问题。

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)

yvhksovo 发表于 2011-9-5 16:08:40

这个状态怎么会被综合掉呢?

oceanx 发表于 2011-9-6 09:45:41

最后一个always,信号敏感应该用posedge clk
三段状态机标准写法。

honeybear 发表于 2011-9-6 17:56:11

楼上讲的是正确的,但我不是这个WARNING的原因,楼主可以在仿真时加上next_state,看看情况怎么样,我觉得应该和综合的设置参数有关系,问一下楼主用的是什么那个版本的软件!

yvhksovo 发表于 2011-9-6 19:40:40

回复【1楼】yvhksovo
-----------------------------------------------------------------------

嗯,标准三段式写法的确该是赢时序输出,但是时序输出会延迟一个周期,我这里没有选择时序输出,问题不大。那个warning也不是这个引起的,我改成时序逻辑也会出现那个错误。

yvhksovo 发表于 2011-9-6 19:42:13

回复【2楼】oceanx
-----------------------------------------------------------------------

用的是quartusii9.0在功能仿真的时候没有出问题,而且后仿真逻辑上也没出问题,就是这个状态机的显示这一块有问题,还是不爽。综合设置的参数我用的默认的。

honeybear 发表于 2011-9-7 15:31:17

QUARTUS9.0去年用了一年没有发现这个问题,可能是软件的BUG吧,你试试看QUARTUS10.1.
页: [1]
查看完整版本: [求助]状态机的状态被综合掉的问题。