Board logo

标题: Verilog的一个疑问 [打印本页]

作者: anotherchen    时间: 2006-6-3 16:29     标题: Verilog的一个疑问

reg[21:0] buffer;


always@(posedge clk)


begin


buffer=buffer+1;


if(buffer==22'b1111_11111111_11111111)


begin


ledout=~ledout;


end


end


想请问,,buffer=22'b1111_11111111_11111111后还继续+1么?


它会自动复位么?


 


作者: stone133    时间: 2006-6-3 20:30

会继续加
作者: anotherchen    时间: 2006-6-5 14:27

那么加到什么时候呢?
加到22位么?
之后会溢出吗?还是会自动变回0
作者: stone133    时间: 2006-6-5 18:27

不停的加,你要说溢出也可以这么说,溢出后不就是0吗?
你要是不放心,在begin里面加上一句:
buffer==22'b0000_00000000_00000000;
这个和你不加的效果一样;

[此贴子已经被stone133于2006-6-5 18:27:45编辑过]


作者: anotherchen    时间: 2006-6-6 11:26

还有一个疑问:
外部晶振是11.0592M
ledout是0.5s被取反一次,,
想请问这个0.5s是怎样算出来的呢?

 

20'b1111_11111111_11111111=1048575

22'b111111_11111111_11111111=4194303

[此贴子已经被作者于2006-6-6 11:26:27编辑过]


作者: anotherchen    时间: 2006-6-6 15:31

原来如此,就是说,verilog可以自动清零的

 

其实我就是不清楚,是不是VHDL和verilog一样都会溢出就清零,不用人为来干预了

[此贴子已经被作者于2006-6-6 15:31:53编辑过]


作者: stone133    时间: 2006-6-6 18:08

4194303个11.0592M的时钟周期=0.379秒;
ledout是0.5s被取反一次?应该是0.379秒吧?
作者: anotherchen    时间: 2006-6-7 12:22

我就觉得奇怪,程序说是0.5s取反的
把ledout接上发光二级管,测得也是0.5s
应该没错把,
所以就不明白怎样算出来的?

选一个合适的计数器是什么意思?
作者: stone133    时间: 2006-6-7 14:58

1。20'b1111_11111111_11111111=1048575是做什么的,怎么在你的程序里面没见到?
2。选一个合适的计数器的意思就是得到一个合适的计数值,这个值保证你得到一个合适的时间;



作者: anotherchen    时间: 2006-6-8 12:16

if(buffer==22'b1111_11111111_11111111)

这里就是20个1,而22个1是它的最大值

[此贴子已经被作者于2006-6-8 12:16:21编辑过]


作者: anotherchen    时间: 2006-6-8 17:57

不明白怎么算出来的
作者: anotherchen    时间: 2006-6-9 17:55

原来算法是没错的,,,,,
算出的结果也没错

是它说0.5s错了
我当时用示波器看时,0.5s太闪了,看得不是很清楚,以为也是0.5s
应该是算出的结果才对

因为我试过看10ms和20ms时,
结果与算出来的一样

作者: 5460wjh    时间: 2006-6-22 21:05

027-12345678
作者: 5460wjh    时间: 2006-6-22 21:05

你这段程序的延时实际上是0.35S,因为当你判断到buffer"b'11111111111111111111
的时候没有对buffer清0,所以到下一次再符合buffer"b'11111111111111111111的时候,就相当于进行了4194304次计数(22位宽的二进制计数器),4194304×0.083uS=0.35S
作者: anotherchen    时间: 2006-6-23 09:31

多谢指点~~~~




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0