大家都知道,在verilog的声明中,对于reg类型的声明一般的格式为
reg [with-1:0] <name>;
今天在看了fpga4fun网页上的一个小程序的时候,产生了困惑,因为在仿真的时候发现没有输出。其原因就在于reg的声明。
代码如下所示:
module LEDglow(clk, LED);
input clk;
output LED;
reg [23:0] cnt = 24'b0;
always @(posedge clk) cnt<=cnt+1;
wire [3:0] PWM_input = cnt[23] ? cnt[22:19] : ~cnt[22:19];
reg [4:0] PWM = 4'b0;
always @(posedge clk) PWM <= PWM[3:0]+PWM_input;
assign LED = PWM[4];
endmodule
可以看到这段代码中的reg类型的变量都没有初值,所以就算添加了激励,也是看不到结果的。
经过翻书和查看,其实对于reg类型的声明其实还有一种写法,并且个人认为这种写法比较好,具体如下:
reg [15:0] <name> = 16'h0000;
好处,可以在进行变量声明的时候就将reg类型的变量进行初始化。建议以后多多使用这种声明方式。