关于复位赋初值的问题
0赞
发表于 2014/9/15 13:12:08
阅读(1364)
今天和师哥争论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赋值初始化。所以不建议使用定义赋值初始化的写法。