逻辑设计中速度的定义:设计吞吐量、设计延时、设计时序。
*****对于速度优化来说,吞吐量的优化就是尽量提高吞吐量,设计延时的优化就是尽可能地降低设计延时。
设计的吞吐量指的是每个时钟周期能被处理的数据量,常见的数据吞吐量的单位是b/s
逻辑设计延时指的是输入数据和数据被处理后输出之间的时间间隔,单位是s,ms,us等,或者是系统的时钟周期数。
有一种时序优化的方法就是插入寄存器,通过增加流水来提升设计时序的目的,但是有时为了尽可能最小化设计延时,需要采用并行处理,还要移除一些流水操作。
*******本文说的速度的优化主要是针对时序优化。
***通过调整工具软件的设置达到设计要求的优化只是低级的优化,尽管最后可能会达到设计要求,但是非常缺乏可移植性。
***设计时序一般是指该设计时序的时钟速度,一个设计中任何两个时序单元之间的最大延时将最终决定这个设计的最大时钟速度。时序优化的目的就是要使得设计满足设计时序的要求,从而达到设计时序收敛。
Fmax = 1/(Tclk_q + Tlogic + Trouting + Tsetup - Tskew)
Fmax是时钟的最大频率
Tclk_q是时钟到达寄存器后直到数据到达寄存器Q端的时间
Tlogic是触发器之间逻辑的传播延时
Trouting是触发器之间的延时布线
Tsetup是下一个时钟沿到来前数据必须到达寄存器D端的最小时间(建立时间)
Tskew是时钟到启动触发器和锁存触发器之间的传播延时
编写代码规则:(1)在进行代码设计之前一定要进行良好的计划和规划
(2)在代码编写过程中,要记得所编写的diamante具体实现到电路到底是什么,不要停留在行为级,要深入到数据路径、寄存器等。
(3)设计出来的代码需要和目标器件相匹配,当然是首先需要根据设计需求选择合适的器件,其次是分析逆的设计将会需要哪些资源,并且各需要多少个,最后选定器件型号,根据器件的资源情况规划调整设计的层次结构。
(4)尽量使用并行原则,同步原则(尽量使设计百分百地同步于时钟),不使用门控时钟和行波时钟,转而使用时钟使能,时钟控制模块函数或者寄存器等。
时序优化方法:
(1)通过减少关键路径上的组合逻辑单元数来优化时序。
只需要关注寄存器之间的逻辑路径
critical是关键路径,通过优化将其只经过一级逻辑单元
(2)适当进行逻辑赋值以优化设计速度
逻辑复制是指当某个信号的扇出比较大,会造成该信号到各个目的逻辑结点的路径变得过长,从而成为设计中的关键路基,为了解决这个问题可以通过在书写代码的时候对该信号进行复制,以达到“分担”信号扇出过多的目的。
逻辑复制分为组合逻辑复制和寄存器复制。
通过逻辑复制会导致付出更多的面积。进行逻辑复制之前,设计的关键路径相对较长,通过逻辑复制之后降低了信号扇出,同时缩短了关键路径的布线长度。
在大部分逻辑设计中,高扇出喜好多为同步信号,也即寄存器信号,所以进行逻辑复制时是对寄存器进行复制。由于高扇出信号会增加布局难度,减缓布线速度,可以通过寄存器复制解决这两个问题:减少扇出,缩短布线延时;复制后每个寄存器可以驱动芯片的不同区域,有利于布局布线。
(3)在组合逻辑中插入寄存器优化时序
寄存器与寄存器之间的逻辑路径过长,就会成为拖累设计的关键路径,这时就可以考虑在该路径上插入额外的寄存器,这种方法被称为插入流水线。
(4)通过寄存器平衡优化时序
操作符平衡,是通过合理使用括号来对逻辑进行分组,通过这种技术可以增加设计性能,平衡所有输入到输出的延时,而整个设计的功能并不会改变,代价是可能增加部分面积。
寄存器平衡是通过移动关键路径和相邻路径上的组合逻辑来提升设计的时序性能。
在Altera的编译工具中被称为寄存器重定时。
(5)使用并行结构优化时序
(6)通过消除代码中的优先级优化速度
Altera器件,一般if-else嵌套长度不超过7级,消除优先级,设计功能可以通过无优先级方式来实现。
也称为结构平坦化技术