流水灯和闪耀灯实验出现的奇怪现象
本帖最后由 yidehui 于 2013-1-18 13:16 编辑各位,我这几天使用黑金开发板学习fpga,在学到流水灯和闪耀灯实验时,很好奇改了flash_module中的parameter T50MS = 20'd999_999; 也就是把他放大些T200MS=24'd2_999_999,发现闪烁flash_module等部分的led灯一直亮着,而没有出现闪烁!我觉得很奇怪?!本工程包含了两个子module,主要问题是
以下是代码
module mix_module //这个是顶层module
(
CLK, RSTn, Flash_LED, Run_LED
);
input CLK;
input RSTn;
output Flash_LED;
output Run_LED;
/**********************************/
wire Flash_LED;
flash_module U1
(
.CLK( CLK ),
.RSTn( RSTn ),
.LED_Out( Flash_LED )
);
/**********************************/
wire Run_LED;
run_module U2
(
.CLK( CLK ),
.RSTn( RSTn ),
.LED_Out( Run_LED )
);
/***********************************/
assign Flash_LED = Flash_LED;
assign Run_LED = Run_LED;
/**********************************/
endmodule
以下这个是子module
module flash_module
(
CLK, RSTn, LED_Out
);
input CLK;
input RSTn;
output LED_Out;
/*********************************/
parameter T50MS = 20'd999_999; //我就是延长了这个时间,发现对应的led一直亮着!!!!!!!!!!!!不知道为甚么!!!!!!!!!!
/********************************/
reg Count1;
always @ ( posedge CLK or negedge RSTn )
if( !RSTn )
Count1 <= 20'd0;
else if( Count1 == T50MS )
Count1 <= 20'd0;
else
Count1 <= Count1 + 1'b1;
/*********************************/
reg rLED_Out;
always @ ( posedge CLK or negedge RSTn )
if( !RSTn )
rLED_Out <= 1'b0;
else if( Count1 == T50MS )//100???????
rLED_Out <= ~rLED_Out;
/*********************************/
assign LED_Out = rLED_Out;
endmodule
难道是溢出?别用这么大的计数器,你可以用两个计数器级联的方式来延长时间 {:sweat:}你自己看parameter的位宽和代码中变量的位宽 hejc06 发表于 2013-1-18 17:35 static/image/common/back.gif
你自己看parameter的位宽和代码中变量的位宽
我已经将位宽扩大到32位了,修改成这样:parameter T50MS=32'd39_999;
还有程序部分的位宽也做了相应修改:
Count1 <= 32'd0;
else if( Count1 == T50MS )
Count1 <=32'd0;
但现象仍然存在 我知道了
页:
[1]