关于复位赋初值的问题
今天和师哥争论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赋值初始化。所以不建议使用定义赋值初始化的写法。