清霜一梦

关于复位赋初值的问题

0
阅读(1502)

今天和师哥争论reset赋值和定义时赋值的问题,僵持不下想到真OO无双大神的一句:无code无真相。用code最能说明问题

    测试代码随便弄了个加法器:

复制代码

 1 //date: 2014/09/15 2 //version : Quartus II 14.0 3 //designer : pengxiaoen 
 4 //function : check reset  5  6 module reset_test  (clock , 7                     reset , 8                     in_a , 9                     in_b,10                     in_c,11                     ou_d12                     );13   input clock ,reset ; 
14   input [3:0] in_a ,in_b ,in_c; 
15   output reg [5:0] ou_d ; 
16   17   reg [4:0] temp ;//=5'd2 ;18   19   always @ (posedge clock)20     if(!reset)21         ;//temp <= 5'd0 ; 22     else 23         temp <= in_a + in_b ;24         25         26     always @ (posedge clock)27         if(!reset)28             ou_d <= 6'd0  ;29         else 30             ou_d <= temp + in_c ; 
31             32  endmodule

复制代码

 

此代码中有两处对temp进行赋值,下面来看rtl图示,首先看到的是reset中 temp<= 5‘d2的操作

 

下面再看定义时初始化为1的图示

看到了吧,QuartusII 14.0 不支持定义初始化

这不禁让我想到曾经用modelsim做个一个M序列的工程,M序列数就是用一个reg存起来的,就是在初始化的时候赋值的。

查到度娘上有人提问,遇到和我一样的问题,最后有人提出: 定义赋值要综合器支持—— 说明Q14.0不支持定义时进行赋值初始化,但是modelsim-altera是支持的。  同时,他们都支持reset赋值初始化。所以不建议使用定义赋值初始化的写法。