标准延迟格式或SDF包括设计中所有单元的时序信息,它为仿真门级网表提供时序信息。
1 SDF文件
SDF文件包括设计中每个单元的时序信息,基本的时序数据由以下几部分组成:
——IOPATH延迟
——INTERCONNECT延迟
——SETUP时序检查
——HOLD时序检查
IOPATH延迟指定单元延迟,其计算依据输出连线负载和输入信号的转换时间。
INTERCONNECT延迟是基于路径的点到点的延迟,包括驱动们和被驱动门间的RC延迟。它指定了从驱动单元的输出引脚到被驱动单元的输入引脚的连线延迟。
SETUP和HOLD时序检查包括决定每个单元所需的建立和保持时间的数值,这些值是基于工艺库中的特征值。
2 SDF文件生成
可为布图前或布图后仿真生成SDF文件。在将提取的RC延迟值和寄生电容反标注到DC或PT之后,由DC或PT生成布图后SDF。布图后的值代表了同设计相关的实际延迟。可用如下命令生成SDF文件:
2.1 生成布图前SDF文件
布图前的数值包括基于线载模型的延迟值,布图前网表也不包括时钟树。因此在生产布图前SDF时,有必要近似布图后时钟树的延迟。
为了生产布图前SDF,下列命令通过定义时钟延迟、扭曲和转换时间来模拟布线后时钟树的值:
如上所示,通过设置(确定)这些值,设计人员假设所得的SDF文件也包括这些值,也就是说,从时钟源到终点(触发器的时钟输入端口)的时钟延迟固定在2.0,然而情况并非如此。DC只用上述命令进行静态时序分析,并不将这一信息输出到SDF文件。
2.2 生成布图后SDF文件
布图后设计包括时钟树信息,因此,布图后SDF文件生成不再需要在布图前阶段修正时钟树延迟、扭曲和时钟转换时间所需的所有步骤,而是在时钟网络中传播时钟以提供真实的延迟和转换时间。
对于最终的SDF生成,只应向DC或PT反标注提取的寄生电容和RC延迟。当为仿真生成布图后SDF文件时,可用如下命令向设计反标注提取的数据并指定时钟信息。
2.3 时序检查相关问题
有时在仿真过程中,产生的未知值(X)会导致仿真失败。产生这些未知值是由于建立保持时间违例造成的。大多数时候,这些违例是真实的,然而也有设计者可能希望忽略同设计的某些部分相关的一些违例,但仍验证其余的情况。通常这是办不到的,因为仿真器无法在选择的基础上关闭X的生产。
通常对整个设计几乎所有仿真器都提供忽略时序违例的能力,它们不具有忽略设计中一个单元的单独实例的时序违例的能力。为避免这种问题并成功仿真,可能需要有选择地对构建在SDF文件中的建立和保持时间的值设定为假。SDF文件是基于实例的(而不是基于单元的),因此容易获得时序检查的选择定位。不用手动从SDF文件中删除建立和保持时间结构,更好的方法是仅对违例的触发器在SDF文件中把建立和保持时间置零,也就是说,用零来取代现有的建立和保持时间。向仿真器反向标注为零值的建立和保持时间,可防止它生成未知值(如果建立和保持时间都是零,就不会有任何违例),从而使得仿真能顺利地运行。可用如下的命令执行这一步:
dc_shell > set_annotated_check 0 -setup -hold -from REG1/CLK -to REG1/D
2.4 虚假延迟计算问题
单元的延迟计算是基于单元的输入转换时间和输出负载电容,单元的输入转换时间是基于驱动单元(前一单元)的转换延迟求得的。如果驱动单元不止包含一个时序弧,那么将用最坏的转换时间作为被驱动单元的输入。当为了仿真生成SDF文件时,这将会引起一个大的问题。
考虑如图所示的逻辑:
信号reset和signal_a是实例U1的输入。假定信号reset不是关键的,而signal_a是我们真正感兴趣的。信号reset是一个慢信号,因而这个信号的转换时间要比具有较快转换时间的signal_a更长。这将为单元U1计算出两个转换延迟值(从A到Z额2ns和从B到Z的0.3ns)。当生成SDF时,这两个值将作为单元U1单元延迟的部分单独写出。然而现在问题出现了,DC使用这两个值的哪一个为单元U2计算转换时间?DC使用前一个门(U1)的最坏(最大)转换值作为被驱动门(U2)的输入转换时间。这将为单元U2计算一个大的延迟值。
为避免这一问题,需要指示DC不要为单元U1的引脚A到引脚Z的时序弧进行延迟计算:
dc_shell > set_disable_timing U1 -from A -to Z
在《高级ASIC芯片综合》一书的第11章11.2.5节提供了相应的布图前后SDF生成的DC脚本。可在微信公众号【数字IC与应用系统】内回复“高级ASIC芯片综合”获得该书的电子版。
参考文献