问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

FPGA的时序优化(一)

创作时间:
作者:
@小白创作中心

FPGA的时序优化(一)

引用
CSDN
1.
https://blog.csdn.net/ChengduLemid/article/details/143889866

FPGA(现场可编程门阵列)的时序优化是确保芯片设计性能的关键环节。本文将从时序约束、时序收敛、时序优化方法以及复位对时序的影响等多个方面,深入探讨FPGA时序优化的核心技术和实践方法。

1. 时序约束对芯片设计的影响

EDA工具不会自动寻找到相对合适的 Place & Route 结果,你对设计性能的期望是通过设计时序约束传递给EDA工具的,施加时序约束后,implementation工具才会尝试满足性能期望(调整布线的相对延时,让相关逻辑尽量靠近以减小布线延迟,区分key path,忽略异步path,多周期path等)。

2. 时序收敛的概念

在集成电路设计中,通过调整、修改设计,最终使设计电路满足时序要求,即在要求的频率下正常工作。(以下图的同步电路为例)

图1 同步电路

假设下图为图1同步电路中的关键路径,对同步电路的优化,首先就需要对关键路径进行优化:

图2 关键路径的电路框图

该电路工作时钟的最高频率:fmax = 1 / (Tco + Tlogic + Trouting + Tsu - Tskew)(Tco:寄存器输出延时,Tlogic:组合逻辑延时,Trouting:布线延迟,Tsu:建立时间,Tskew:时钟偏移)

Tco和Tsu由器件属性决定,越好的器件Tco和Tsu可以达到更低,对于我们逻辑工程师来说,逻辑控制首先需要做的就是减小Tlogic、Trouting、Tskew,需要注意的是在这个公式表达中Tshew越大,fmax越高,但在实际运用中,还需要考虑Thold,同时Tshew越大,让电路的时序分析变得复杂,不利于同步电路的稳定性。因此绝大多数情况,Tshew同样追求达到最小。

3. 时序优化的方法

减少CLOCK skew、采用pipeline或retiming减少组合逻辑延时、减少Fanout或者距离来降低布线延时、操作符平衡、尽量用硬核、消除代码优先级和关键路径重组等。

3.1 控制Tskew

控制Tskew最常用的方式就是将逻辑时钟接到FPGA的全局时钟网络,对于全局时钟网络,FPGA有自己的专用路径来保证时钟到各逻辑单元的时间差不会过大。但需注意的是全局时钟网络为FPGA非常宝贵的资源,多时钟的设计一方面会占用更多的时钟网络资源,另一方面是多时钟的设计会让时序分析变得复杂,因此在逻辑设计中,能使用同一时钟源就尽量使用同一时钟源。

3.2 控制Tlogic

减小逻辑延时最常用方法为Pipeline和Retiming。

3.2.1 Pipeline

Pipeline即流水线。FPGA中的流水线设计,用通俗的语言解释就是,在组合逻辑中插入寄存器。


图3 pipeline

对如下代码,进行时序优化。该代码的组合逻辑,包含了乘法器和加法器两个部分,如果直接进行乘加,会有较大的Tlogic。

图4 未使用pipeline的代码

图5 代码对应的电路框图

对上述代码经进行优化,可以先分析源代码映射的实际电路框图,最容易想到的就是在乘法器和加法器之间加一组寄存器,将较为复杂的逻辑运算拆解开,以达到减小Tlogic的效果。

图6 优化后的电路框图
图7 优化后的代码

值得注意的是,这是典型的资源换取速度的思想,即用更多的资源(消耗更多的寄存器)以换取更快的运行速度,同样体现这种思想的是采用硬核,结合该例子,就是让相乘的逻辑在乘法器IP中实现,乘法器IP是采用固定的、定制的电路结构来实现乘法逻辑,而逻辑控制采用可编程的电路结构来实现,因此从底层电路结构而言,乘法器IP的性能明显更优,但同样的,乘法器是FPGA较为稀缺的资源,需根据具体设计场景,来对资源和速度进行取舍。

3.2.2 Retiming

Retiming,顾名思义,就是重新调整时序,作为逻辑综合时序优化的一种典型技术,常用于流水线设计中。这种方式,优点是可以做到不使用格外的寄存器资源,缺点是适用的难度较高,需要对时序做更为精准的把控,且适用场景有限。如下案例,Retiming前一级的逻辑延迟,时钟最快可以跑到133Mhz(1/7.5Mhz),而后一级的逻辑延迟,时钟最快只能跑到91Mhz(1/11Mhz),假如此时时钟刚好是100Mhz,则后一级的逻辑延迟不满足时序要求,此时需要对时序进行一定调整,如果采用retiming的方式就可以让前一级的逻辑延迟做出一定让步,以此来优化后一级的逻辑延迟来满足时序要求,如下图:

图8 retiming实例

3.3 控制Trouting

导致Trouting较大的一个常见原因是信号的高扇出。扇出(Fanout),指某信号直接驱动下级模块数量。改善高扇出带来的问题主要有两种方式,一是通过复制寄存器减小扇出,二是让高扇出的信号接入BUFG。

图9 A、B、C信号不同扇出的示意图
图10 高扇出路径延时示意图

3.3.1 复制寄存器

这种策略一般适用于解决普通信号的扇出,对比图10而言,因为将同个信号复制了多个寄存器,减少了信号扇出,路径延时明显地缩短。

图11 复制寄存器减少扇出

3.3.2 BUFG优化

当遇到复位信号高扇出,建议采用BUFG优化。BUFG具有专用的路径到达各逻辑资源,不会受逻辑布线的影响,因此对于全局信号,推荐采用BUFG进行优化。

图12 BUFG

4. 复位对时序的影响

虽然复位脉冲可以用比时钟周期更长的持续时间,并保证所有触发器都可以被成功复位,但是复位信号的释放应该被认为是一个时间关键事件。


图13 复位信号的释放(能在同一时钟改变释放)

而复位信号可能存在风险,即无法保证所有触发器都能在同一个时钟边缘释放,如下图

图14 复位信号的释放(不能再同一时钟边缘释放)

比较利好的消息是,在99.99%的情况下,全局复位的异步释放对系统没什么影响,所以大多数电路都能正常工作。

在下图中复位释放的时间,并不影响电路的正常工作。下例中信号的输出因为只与信号的输入有关,而与信号当前的状态无关,因此不管复位先后顺序,在所有的寄存器都复位完成后,输出信号都等于滞后四拍的输入信号。

图15 RESET FOR PIPELINE

而在独热码状态机场景中,复位释放的时间非常重要。此时信号的输出因为不仅与信号的输入有关,还与信号当前的状态有关,举一个具体实例,假设此状态机State_1 = 4’b1000, State_2 = 4’b0100, State_3 = 4’b0010, State_4 = 4’b0001,如果此时状态机在State_3状态下进行复位,而由于复位的释放时机没有做到良好的把控,register3还处于未复位状态,即register3此时输出仍为为1,而register1已经被复位,即register1输出已经从0变为1,则此时状态机的输出为State = 4‘b1010,这就导致了状态机的没有回到正确的初始状态,以及后续就会出现无效或错误的逻辑状态转换。


图16 RESET FOR A ONE-HOT STATE MACHINE

FPGA的配置:当配置或重配置Xilinx FPGA时,内部所有单元都被初始化。


图17 FPGA内部单元初始化示意图

出现0.01%意外事件时的复位策略:控制局部复位网络的一种可能有用的机制,即异步复位同步释放,可以较大限度地保证各信号在同一时钟周期内进行复位,以及可以有效地避免释放带来的亚稳态。


图18 异步复位的同步释放与异步释放

但复位会占用更多的布线以及逻辑资源,无法使用高效率的特性(如SRL16E)。

总结:

①没有反馈的电路实际上不需要复位,需要仔细考虑复位的是包含反馈路径的电路。

②在Xilinx FPGA中实现的设计不需要插入全局复位网络。

③设计每个模块时,都要仔细考虑是否需要复位。

④必须确定系统中真正需要复位的关键部件。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号