关于复位赋初值的问题

    今天和师哥争论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_d
12                     );
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赋值初始化。所以不建议使用定义赋值初始化的写法。

原文地址:https://www.cnblogs.com/sepeng/p/3973163.html