VHDL的优化
设计优化
毛刺现象
-
毛刺的出现
信号在芯片内部走线时会产生一定延迟,导致信号间出现竞争-冒险现象,即信号到达某逻辑块输入端口的时间有先有后,产生的输出就会在延迟的这段时间里跳变,这就产生了毛刺
-
如何处理毛刺
D触发器对毛刺不敏感:由于毛刺持续时间短,只要毛刺不正巧出现在D触发器的时钟上升沿,就不会产生错误信号
为了消除时序逻辑电路信号竞争-冒险问题,通过在出现毛刺的信号后接一个D触发器来处理毛刺
具体来说,就是把赋值语句放在不完整条件语句中,使得系统对出现边沿触发的D触发器
资源优化
资源优化的作用
-
本质:用比较少的资源实现功能
可以降低系统的功耗与成本,节约布线资源从而提升电路性能,为之后的功能升级留下可编程资源
资源优化方法
-
资源共享
同样结构的模块被反复调用,而该结构需要占用较大的资源(这类模块一般是算术模块),若是重复构建多套模块就会造成浪费
解决方法是通过选择、复用的方式来共享一个模块
-
逻辑优化
使用优化后的逻辑进行设计、减少资源占用
-
串行化
把原来消耗资源巨大、单时钟周期内完成的并行执行的逻辑块分开,提取出相同的逻辑模块,在时间上复用该模块
本质上就是用时间换空间,代价是工作速度会大幅减低
速度优化
速度优化概述
- 对大多数设计来说,速度比资源优化更重要
流水线设计
-
什么是流水线
流水线能够显著提高电路运行速度上限,是最常用的优化技术之一
流水线是指把一个重复的过程分解为若干个子过程,每个子过程由专门的功能部件来实现,将多个处理过程在时间上错开,依次通过各功能段,这样每个子过程就可以与其他子过程并行进行
-
流水线优化的原理
把组合逻辑进行分割,并在各个部分之间插入寄存器来暂存中间数据,分割可以使一个耗时大的操作分解成若干小操作,让小操作并行执行
在设计中使用流水线并不能减少原设计中的总延时,甚至会因为加入了寄存器导致延时更高,但是可以使总的运行速度提升
-
流水线优化示例
比如某设计存在一个延时较大的组合逻辑块,信号经过它耗时为Ta,其输入和输出用到寄存器来保存数据,故信号经过这个设计总用时为Ta+2Treg
对这个设计进行优化:把这个组合逻辑块拆分为两个较小的逻辑块,分别耗时T1与T2(T1约等于T2),T1+T2=Ta,信号经过用时是T1+T2+3Treg,这时因为两个逻辑块之间还需要多一个寄存器来暂存第一个逻辑块的输出
虽然用时看似更长了,但是这样的每隔T1就能输出一个结果:在经过T1把信号输出至第二个逻辑块后,这时又可以对第一个逻辑块进行输入,待第二个逻辑块处理完时第一个逻辑块也处理完毕,再送入第二个逻辑块……
并没有增加多一套组合逻辑块,只是将原来的组合逻辑块拆开,却能在事实上实现了并行操作,让频率提高了一倍
其他优化方法
这些优化方法基本上都运用了与流水线法类似的原理
-
寄存器配平
根据上面流水线的原理,如果两个组合逻辑块的延时差别太大,实际的工作频率就受限于较慢的那个逻辑块
为了解决这个问题,可以将较大的那个逻辑块部分功能移到较小的那个中去,这就是寄存器配平
虽然总延时不变,但根据流水线原理,设计的速度将得到提高
-
关键路径法
关键路径是指设计中从输入到输出经过的延时最长的逻辑路径
从输入到输出的总延时取决于关键路径,而与其他延时小的路径无关,(依旧用到了流水线的原理)因此优化关键路径的延时是提高速度的有效方法,
-
乒乓操作法
一种数据缓存优化技术,在不同周期,按节拍地把要输入的数据送进不同的数据缓冲模块中,让数据无缝地送到运算处理模块里,这样数据的输入与输出流都是连续不断的,因此常用于流水线中
-
加法树法
类似流水线,比如实现A+B+C,一般都是先算A+B=X,把结果X送入寄存器锁存一个时钟周期后,再算X+C,这称作2输入加法树结构
如果将加法器逐级拓展,可以实现更长的树,比如五个加数的式子需要三级寄存器来缓存
本文来自博客园,作者:无术师,转载请注明原文链接:https://www.cnblogs.com/untit1ed/p/18613658
本文使用知识共享4.0协议许可 CC BY-NC-SA 4.0
请注意: 特别说明版权归属的文章以及不归属于本人的转载内容(如引用的文章与图片)除外