[FPGA] 请教一个关于VERILOG中分频记数的例子

[复制链接]
3237|9
 楼主| miantan 发表于 2007-1-15 11:02 | 显示全部楼层 |阅读模式
module&nbsp;leddot(clock,ldoa,ldob);<br />&nbsp;&nbsp;input&nbsp;clock;<br />&nbsp;&nbsp;output[7:0]&nbsp;ldoa;<br />&nbsp;&nbsp;output&nbsp;[7:0]&nbsp;ldob;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;reg[7:0]&nbsp;ldoa;<br />&nbsp;&nbsp;reg[7:0]&nbsp;ldob;<br />&nbsp;&nbsp;reg[32:0]count;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;always@(posedge&nbsp;clock)&nbsp;<br />&nbsp;&nbsp;begin&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count=count+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldob=0;<br />&nbsp;&nbsp;&nbsp;end&nbsp;<br />&nbsp;&nbsp;&nbsp;always@(count[25:23])<br />&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case(count[25:23])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4'h0:ldoa=8'hfe;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4'h1:ldoa=8'hfd;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4'h2:ldoa=8'hfb;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4'h3:ldoa=8'hf7;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4'h4:ldoa=8'hef;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4'h5:ldoa=8'hdf;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4'h6:ldoa=8'hbf;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4'h7:ldoa=8'h7f;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4'h8:ldoa=8'hff;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4'h9:ldoa=8'hff;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4'ha:ldoa=8'h00;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4'hb:ldoa=8'h00;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:ldoa=8'hff;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endcase&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endmodule<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />此例中count[32:0]什么意思,COUNT[25:23]中25,23&nbsp;个代表什么意思!
ttl_cmos 发表于 2007-1-15 11:56 | 显示全部楼层

re

一共有0-32个寄存器,其中25:23表示代号为25,24,23的寄存器
 楼主| miantan 发表于 2007-1-15 13:59 | 显示全部楼层

再论!

那么照你所言,COUNT[25:23]与COUNT[12:10]意思一样了,只是提供译码之用啊&nbsp;!
ttl_cmos 发表于 2007-1-15 16:49 | 显示全部楼层

re

不一样啊,count25&nbsp;24,23怎么可能和12&nbsp;11&nbsp;10一样的。count生成的硬件都是触发器,但是代号是区别你用哪个触发器啊。不过要生成触发器你最好用非组塞性符号,因为时序电路都是用非组塞的符号。<br />count=count+1;<br />最好改成<br />count&lt=count+1;
 楼主| miantan 发表于 2007-1-15 17:56 | 显示全部楼层

哦?

照你言,count25,24,23与12,11,10只是生成触发器代号不一样啊!<br />但是实际我下载程序到板字上时,用count[12:10]的扫描频率比count[25:23]快很多啊!我知道是有个时序的问题没弄懂了,请赐教!
ttl_cmos 发表于 2007-1-15 18:15 | 显示全部楼层

re

这是肯定的拉。always@()里面的触发条件都不同拉。<br />你每来一次clock,count才+1<br />加多少才改变25,24,23中其中一个值,<br />如果是12,11,10差不多比它少了一半的记数啊.<br />
 楼主| miantan 发表于 2007-1-15 21:02 | 显示全部楼层

这样啊!

多谢,有点眉目了,如果时钟周期是11MHz,那count[12:10]的记数频率是11000000/2^11了大于25HZ,人眼分辨不出了,所以动态扫描出一副静态的画,是这样&nbsp;吗!<br />
ttl_cmos 发表于 2007-1-15 21:51 | 显示全部楼层

re

always@()里面的参数只要发生变化,例如12:10=000<br />来了一次clock后,变成是了001或101之类的,就执行它里面的语句。<br />因为12:10后面还有9:0个的触发器。也就相当于一个10位的计数器.<br />也就是当9:0等于10'b1111111111是来一个clock,然后进位给代号为10的触发器,假设一开始12:10是000,现在10变了1,就是001,那么就执行你哪个解码的语句。<br />如果是25:23.后面还有22:0个记数器。假设25:23一开始也是000,<br />只有当22:0=23'b11111.........全1,来一个clock,23由0变1。<br />就执行你哪个解码语句.<br />这就是为什么12:10比25:22快的理由。
 楼主| miantan 发表于 2007-1-16 09:03 | 显示全部楼层

恩!

是这个道理!多谢了!
whyand100 发表于 2007-1-23 16:12 | 显示全部楼层

提个问?

顺便提个问题:在case括号内的表达是3位二进制数,而在下面的分支里是有4位二进制数?盼高手解答!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

20

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部