今天解决了一下之前自己抄写书上的流水灯实验,不得不说一个流水灯真的也存在很多问题,之前按照书上抄写的编译之后发现效果完全不对,结果也不知道问题出在哪里,今天仔细看了一下程序,发现对程序中的延时不是很理解,经过研究弄明白了。书上的晶振和我板子上的是不一样的。
晶振为50MHz,一个周期为1/50MHz,需要延时时间为X,需要的周期为m*1/50MHz=x,所以需要的周期数就是50MHz*X,单位为秒。
延时函数为:
parameter T100MS = 23'd5_000_000; //定义一个常量,就是上面算出的需要100MS所需要的周期数,其长度为222<5_000_000<223
reg [22:0]Count1; //定义一个寄存器,用来计数,长度为23
always @ ( posedge CLK or negedge RSTn )
if( !RSTn ) //复位键如果为0,置0
Count1 <= 23'd0;
else if( Count1 == T100MS ) //初始化,当计数计满时,重新置数
Count1 <= 23'd0;
else
Count1 <= Count1 + 1'b1; //若没计满,每次加一个周期
不知道为什么改过了时间后还是不好使然后使用例程是可以的,然后将例程复制粘贴到我的工程中还是那个现象。。。怎么回事?。。。有毒。。。