标题: 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 |