并行语句和顺序语句的问题

[复制链接]
3671|5
 楼主| sioca 发表于 2009-3-3 11:48 | 显示全部楼层 |阅读模式
这是个10进制计数器的简单例子<br />书上写PROCESS里的语句是顺序执行的,并且下面程序中的CQI是变量而不是信号,关于CQI的值应该是顺序实时的才对,08行中,如果CQI&nbsp;=&nbsp;9,则CQI=&nbsp;0,这时应该产生进位信号,那么为什么程序中第12行产生进位信号的时候判断条件是IF&nbsp;CQI&nbsp;=&nbsp;9&nbsp;而不是&nbsp;CQI&nbsp;=&nbsp;0&nbsp;呢?难道变量也要等下一个时钟周期才能完成赋值?自己想不通,烦请释疑<br /><br />01&nbsp;&nbsp;PROCESS(CLK,RST,EN)<br />02&nbsp;&nbsp;&nbsp;&nbsp;VARIABLE&nbsp;CQI&nbsp;:STD_LOGIC_VECTOR(3&nbsp;DOWNTO&nbsp;0);<br />03&nbsp;&nbsp;BEGIN<br />04&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;RST&nbsp;=&nbsp;'1'&nbsp;THEN&nbsp;CQI&nbsp;:=&nbsp;(OTHERS=&gt'0');<br />05&nbsp;&nbsp;&nbsp;&nbsp;ELSIF&nbsp;CLK'EVENT&nbsp;AND&nbsp;CLK&nbsp;=&nbsp;'1'&nbsp;THEN<br />06&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;EN&nbsp;=&nbsp;'1'&nbsp;THEN<br />07&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;CQI&nbsp;&lt&nbsp;9&nbsp;THEN&nbsp;CQI&nbsp;:=&nbsp;CQI&nbsp;+&nbsp;1;<br />08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ELSE&nbsp;CQI&nbsp;:=&nbsp;(OTHERS=&gt'0');<br />09&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;END&nbsp;IF;<br />10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;END&nbsp;IF;<br />11&nbsp;&nbsp;&nbsp;&nbsp;END&nbsp;IF;<br />12&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;CQI&nbsp;=&nbsp;9&nbsp;THEN&nbsp;COUT&nbsp;&lt=&nbsp;'1';<br />13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ELSE&nbsp;COUT&nbsp;&lt=&nbsp;'0';<br />14&nbsp;&nbsp;&nbsp;&nbsp;END&nbsp;IF;<br />15&nbsp;&nbsp;&nbsp;&nbsp;CQ&nbsp;&lt=&nbsp;CQI;<br />16&nbsp;&nbsp;END&nbsp;PROCESS;
zxypds 发表于 2009-3-3 17:46 | 显示全部楼层

看不懂

  
McuPlayer 发表于 2009-3-4 16:28 | 显示全部楼层

咋就这么舍不得用else呢

  
liuweixing 发表于 2009-3-4 22:22 | 显示全部楼层

这个设计是正确的

这个设计是正确的,如果CQI是信号的,设计应该将一面这句:<br />12&nbsp;&nbsp;&nbsp;IF&nbsp;CQI&nbsp;=&nbsp;9&nbsp;THEN&nbsp;COUT&nbsp;&lt=&nbsp;'1';<br />13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ELSE&nbsp;COUT&nbsp;&lt=&nbsp;'0';<br />14&nbsp;&nbsp;&nbsp;&nbsp;END&nbsp;IF;<br />改为:<br />12&nbsp;&nbsp;&nbsp;IF&nbsp;CQI&nbsp;=&nbsp;8&nbsp;THEN&nbsp;COUT&nbsp;&lt=&nbsp;'1';<br />13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ELSE&nbsp;COUT&nbsp;&lt=&nbsp;'0';<br />14&nbsp;&nbsp;&nbsp;&nbsp;END&nbsp;IF;<br />这样,计数器的值才会是0到9,并当计数器的值为9的同时,输出进位脉冲。
 楼主| sioca 发表于 2009-3-5 11:36 | 显示全部楼层

谢谢

TO3楼:&nbsp;感觉qinxg解释的很有道理<br /><br />TO5楼:&nbsp;计数器为9时输出进位脉冲好像不太合理,因为此时并没有进位
worrior_1 发表于 2009-3-5 14:58 | 显示全部楼层

并行语句和顺序语句的问题

不明白5楼为什么说如果CQI定义成信号,然后IF&nbsp;CQI&nbsp;=&nbsp;8&nbsp;THEN&nbsp;COUT&nbsp;&lt=&nbsp;'1';<br />如果这样改了之后不就成了计数从0-8然后在8不就进位了么?那你CQI要是到9了这个程序要怎么走?上面的判断是CQI&lt9时候+1啊,<br />关于定义成variable我感觉是正确的,正如3楼所说的,那时候他已经相当于singnal类型了,如果一开始就定义成singnal,由于singnal是全局变量,可能对下面的仿真产生影响,我感觉是这样
您需要登录后才可以回帖 登录 | 注册

本版积分规则

122

主题

419

帖子

1

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