热度 28
2013-10-18 09:56
4363 次阅读|
2 个评论
Verilog-FPGA 硬件电路设计之三——关于迟滞信号 在条件选择语句中,由于信号的处理存在时间上的差异,从前级传递到下级的数据就存在到达时间先后的问题,因此为了提高电路的速度,对迟滞信号要安排在当前单元最后处理,也就是放在本级靠近输出的位置。 1 、 if 语句条件分支中的判断信号迟滞 在之前的文章中介绍了 if 语句的优先级和生成硬件电路的关系,自然对于迟滞信号的处理,当然是放在优先级比较高的 if 分支中,下面两个例子可以对此作说明。 1.1 迟滞信号放在最低优先级的 if 分支中 RTL 图 : Tec 图:红线是迟滞信号 从 RTL 图和 Tec 图都可以看出迟滞信号在本级的前部分就被处理了。这样很容易因为信号的迟滞而处理的并非有效信号。 1.2 利益 if 语句的优先级对迟滞信号进行处理 RTL 图: Tec 图,红线是迟滞信号 可以看出如果输入有迟滞信号输出,应该将其放在第一个 if 语句中,让其靠近输出端,减小延时。 2 、 if-case 嵌套语句中, case 内部有迟滞信号 在文章“ Verilog-FPGA 硬件电路设计之二—— if 语句和 case 语句的区别”中的 case 内部存在着迟滞信号。 对于 case 分支的输入 DATA_is_late_arriving 迟滞信号,怎么将其从 case 分支中提出来呢?就是说,如果将 case 分支中的语句从 case 中提取处理,并且将其向后移。 可以先来看看优化后的代码: 说明: 1 、 always 块中有两个 if 分支结构,按照“ Verilog-FPGA 硬件电路设计之一—— if 语句优先级”所说,第二个 if 的优先级高于第一个 if( 因为 always 块中是顺序执行的 ) 。所以我们将 DATA_is_late_arriving 单独放在一个 if 的分支结构中,并将其放在最高优先级中,靠近电路的输出。 2 、最后的 else Z1 = Z1; 此句可以注释掉,但不能将其改成 Z1 = 0; 或者 Z1 = 1; 因为,改了之后, else 就实际包括了第 1 个 if 的所有判断情况,那么自然,第一个 if 就被阻塞掉了。 关于组合逻辑电路中, 一个 always 块中包含两个以上的 if 分支结构,并且都对同一个信号操作,且都包含有 else 分支时,要注意被阻塞的情况。 RTL 图: 3 、 if 语句的条件表达中包含有操作符 优化