谁帮我看看二分频程序,解释一下,谢了

[复制链接]
2804|2
 楼主| ygsh16 发表于 2007-4-11 21:04 | 显示全部楼层 |阅读模式
clk_uart:process(clk,rst)<br />constant&nbsp;CntOne&nbsp;:&nbsp;std_logic_vector(CNTR_SIZE-1&nbsp;downto&nbsp;0)&nbsp;:=&nbsp;CONV_STD_LOGIC_VECTOR(1,CNTR_SIZE);<br />variable&nbsp;&nbsp;&nbsp;&nbsp;Cntr&nbsp;&nbsp;&nbsp;:&nbsp;std_logic_vector(CNTR_SIZE-1&nbsp;downto&nbsp;0);<br />&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Rising_Edge(clk)&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;rst&nbsp;=&nbsp;'1'&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cntr&nbsp;:=&nbsp;(others&nbsp;=&gt&nbsp;'0');<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s_uart_clk&nbsp;&lt=&nbsp;'0';<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cntr&nbsp;:=&nbsp;Cntr&nbsp;+&nbsp;CntOne;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Cntr&nbsp;=&nbsp;CONV_STD_LOGIC_VECTOR(BAUD_DIVIDER,CNTR_SIZE)&nbsp;then&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s_uart_clk&nbsp;&lt=&nbsp;not&nbsp;s_uart_clk;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cntr&nbsp;:=&nbsp;(others&nbsp;=&gt&nbsp;'0');<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s_uart_clk&nbsp;&lt=&nbsp;s_uart_clk;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;if;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;if;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;if;<br />&nbsp;&nbsp;end&nbsp;process;<br />CONV_STD_LOGIC_VECTOR(1,CNTR_SIZE)是啥意思?是0000000........1还是32个1?<br />其中BAUD_DIVIDER=1,<br />这是别人的程序,我的理解是这样:Cntr为<br />0000.......................1<br />0000......................10<br />..........................11<br />.<br />.<br />.<br />这样好像不是二分频了<br />
hideid 发表于 2007-4-14 06:18 | 显示全部楼层

答:

(1)CONV_STD_LOGIC_VECTOR(1,CNTR_SIZE)就是把integer型的数值1转换成用CNTR_SIZE位表示的std_logic_vector类型的数值,如果CNTR_SIZE是4的话,那么就是0001。<br /><br />(2)这个程序里面,用来产生clk&nbsp;的2分频的是s_uart_clk信号,并不是Cntr,因为BAUD_DIVIDER=1,所以2个&nbsp;Rising_Edge(clk)才会产生一次s_uart_clk&nbsp;&lt=&nbsp;not&nbsp;s_uart_clk;而Cntr只是个计数信号。<br /><br />这个程序如果用来2分频,效果还可以,但是这个结构如果用来做Cntr的计数器,那就太糟糕了。<br />
 楼主| ygsh16 发表于 2007-4-14 23:46 | 显示全部楼层

怎样计数

我就是不知道:Cntr怎样计数的,<br />如果刚开始Cntr全0,加一后变为0000.....1,会产生一次s_uart_clk&nbsp;&lt=&nbsp;not&nbsp;s_uart_clk,如果再加一会变成00000....10,再加一会变成000000.....11,这样好多次后才有可能使Cntr重新变成0000.....1,我这样理解错在哪里?<br /><br />CTR只可能取全0或0000.....1,这是怎样的加法做到的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

0

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