变量用之前最好初始化

写了testbench验证模块的正确性,功能仿真正确,可是综合后的仿真就出错了。原因是输入变量start没有初始化为0,而是不定值x。

verilog模块中的部分代码如下:

always@(posedge clk) 
 if(!rst_n) 
  curr_state<=IDLE;
 else 
  curr_state<=next_state;
  


always@(*) begin
case(curr_state)
  IDLE:        if(start) next_state=a;
       else next_state = IDLE;
  a:  next_state = b;
  b:  next_state = c;
  c:  next_state = d;
  d:  next_state = e;
 

只要rst_n为高电平后,状态就由IDLE进入a。面由代码看,只有start为1时,才进入a。start为不定值x,综合后也就直接进入a,好像不定值x综合后就变成1了,具体原因不知道。

testbench的修改前内容如下:

initial begin
 rst_n=0;
 #100;
 rst_n=1;
 #100;
 start=1;

testbench的修改前内容如下:

initial begin
 start=0;
 rst_n=0;     //先初始化了一下为0,否则为不定值x
 #100;
 rst_n=1;
 #100;
 start=1;

这样综合后的仿真就不出错了。

 

你可能感兴趣的:(变量,初始化)