yidehui 发表于 2013-1-18 13:14:43

流水灯和闪耀灯实验出现的奇怪现象

本帖最后由 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

zzj0329 发表于 2013-1-18 16:59:16

难道是溢出?别用这么大的计数器,你可以用两个计数器级联的方式来延长时间

hejc06 发表于 2013-1-18 17:35:22

{:sweat:}你自己看parameter的位宽和代码中变量的位宽

yidehui 发表于 2013-1-18 18:38:23

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;
    但现象仍然存在

yidehui 发表于 2013-1-18 18:43:04

我知道了
页: [1]
查看完整版本: 流水灯和闪耀灯实验出现的奇怪现象