FPGA建立时间检测机理及影响因素分析

FPGA建立时间检测机理及影响因素分析

FPGA时序工具的时序引擎是如何检测FPGA建立时间的?影响建立时间裕量的因素又有哪些?下面将总结如下。

FPGA建立时间检测步骤

第一步:确定建立时间要求

建立时间要求=建立时间的捕获沿-建立时间的发起沿。
时序引擎会找到发起时钟和捕获时钟的最小公共周期,然后再最小公共周期内找到所有发起时钟沿和捕获时钟沿的所有可能的情况,并在所有可能的情况中挑选最小的建立时间要求(大于0),从而确定发起沿(Launch edge)和捕获沿(Capture edge)。
如下图,找到最小的建立时间要求选择了setup2,为2ns。
在这里插入图片描述

第二步:计算数据的需求时间

数据需要的建立时间=捕获沿时间+目的寄存器时钟路径延时-时钟不稳定度-建立时间固有延时。
注意:关于上述概念请参见之前的博文。

第三步:计算数据的达到时间

数据实际达到的时间=发起沿时间+源寄存器时钟路径延时+Tco+数据路径延时。
注意:关于上述概念请参见之前的博文。

第四步:计算建立时间的裕量(slack)

建立时间裕量=数据需要的建立时间-数据实际到达的时间。

建立时间实例分析

建立时间裕量=数据需要的建立时间-数据实际到达的时间=T+Tclkb-Tsu-Tclka-Tco-Tdata。
在这里插入图片描述

FPGA建立时间裕量影响因素

建立时间裕量=(捕获沿-发起沿)+(目的时钟路径延时-源时钟路径延时)-建立时间固有延时-时钟不稳定度-数据路径延时。
即:
setup slack=setup requirement(一定大于0)+clk skew(时钟偏斜)-Tsu-Tclkuncertainty-数据路径延时。其中数据路径延时=数据路径中的组合电路延时(Tdata)+布线延时(Tnet)+Tco。
根据上述公式,哪些因素会导致建立时间裕量为负呢?下面总结如下:

因素一: setup requirement 与实际情况不符

建立时间需求过小,这种情况通常会在同步跨时钟域路径中出现,在同步跨时钟域路径中的源时钟频率与目的时钟频率的相位关系虽然是已知的,但是时序引擎默认选择的捕获通常都是错误的,需要用户通过多周期路径约束的方式手动修改建立时间需求。
例如下图,两个同频不同相的同步时钟,时序引擎默认选择的捕获沿是目的时钟的第二个上升沿,导致建立时间需求非常小,最终肯定会导致时序违例。
在这里插入图片描述

因素二: clk skew为负值,且很大

通常情况下,同一个时钟的时钟偏斜不应该超过300ps,同步跨时钟域路径的时钟偏斜不应该超过500ps,异步跨时钟域路径的时钟偏斜一般比较大,因为它们的时钟源不同。
当出现时钟偏斜大的情况时:
1、检查源时钟路径和目的时钟路径上是否干净,时钟路径上是否引入了组合逻辑电路;
2、检查时钟路径上是否使用了过多的BUFGCE,是否级联了多个BUFGCE导致时钟延时变大;
3、检查源时钟路径和目的时钟路径所经过的模块是否相同,比如源时钟路径上经过全局缓冲,PMMCM,但是目的时钟路径上只经过了全局缓冲。
例如下图,
第一条路径上的源时钟路径上有BUFGCE/MMCM/BUFGCE,而目的时钟路径上只有BUFGCE,所以源时钟路径和目的时钟路径的延时不同,导致时钟偏斜较大,应该尽量避免此类路径。
第二条路径的源时钟和目的时钟都是源于MMCM的不同的时钟,所以时钟偏斜较小。
在这里插入图片描述

因素三: Tsu/Tco较大

当设计中使用Block(DSP/block ram等)时,应该要注意以下问题:
1、使用这些block作为起点或终点的时序路径,这些block的Tsu/Th/Tco都比普通的寄存器大,而且这些block的布线延时和时钟偏斜都比较大。
2、当使用block作为时序路径终点时,它的起点一定是触发器,比如一个block ram的写数据信号,输入进block前最好打一拍。
3、当使用block作为时序路径起点时,应该使用block内部的输出寄存器,比如使用由block ram组成的FIFO时,尽量不要使用shou首字置出,而使用reg打一拍后输出,使用后者可以降低Tco。
4、当时序路径为从一个block到另一个block时,中间需要打拍操作。
5、当使用这些block的控制端口时,应该保证这些控制信号的低扇出。

因素四: Tdata较大

一般情况下,数据路径中组合逻辑延时与时序路径的逻辑层级级数息息相关,逻辑层级是指时序路径的起点和终点之间组合逻辑单元(LUT)的个数,而逻辑层级多一级意味着多1个LUT的延时和加1跟网线的总延时为0.5ns,如果某条路径的逻辑级数大于时钟周期/0.5ns,那么这条路径被称为长路径。
常用的处理长路径的方案有两种:
1、修改RTL代码,在长路径的逻辑中插入流水线,将长路径打破分为多个短路径;
2、使用综合工具的retiming优化方式,retiming实际上是寄存器重定向,原理是当某条长路径的相邻路径的建立时间裕量较大,那么它可以调整中间寄存器的位置,来调整布线延迟,通过适当增加相邻路径的布线延迟二减少长路径的布线延迟,使得哪些时序违例较小的长路径通过这种微调实现时序收敛。需要注意的是,这种方式优化的力度非常有限,它只适合时序违例较小的长路径,对于一些延时特别大的长路径而言,是不起作用的。

因素五: Tnet较大

一般情况下,布线延迟与整体设计,以及局部模块的资源利用率以及拥塞程度息息相关,在正常情况下,一条网线的延时小于1ns,在发生拥塞的区域,网线的延时可能达到若干ns,导致布线延时显著增加,为解决布线延迟大,需要从降低资源利用率和降低拥塞程度下手。
1、例如某个模块使用了大量的寄存器堆,占用了大量的资源,此时应该考虑使用block ram代替这些寄存器堆;
2、某个模块使用了大量的数据选择器,此时应该考虑如何优化这些数据选择器;
3、某个模块的控制信号扇出比较大,与其他模块的互联很重,此时应该考虑如何降低这些信号的扇出;
4、一定要额外注意高扇出的网线也会对布线延时产生影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值