时序约束之I/O环境建模约束
上一节介绍的I/O延时约束只能对I/O的输入、输出延时信息进行约束,但是对于输入、输出外部的实际负载情况并没有做精确的设置,如下图所示。
如果缺少比较真实的外部输入、输出信息,时序分析工具对与外界逻辑有连接关系的内部逻辑的输入,输出延时的计算结果就会和实际情况之间有比较大的误差。可以通过设置I/O环境建模约束来设置与实际情况相符合的外部输入驱动力信息和输出负载信息,这样可以指导时序分析工具计算出处在内部与外部交界上的单元的更符合实际情况的延时信息。
I/O环境建模约束的内容主要包括以下几个方面。
1.输入驱动建模
在没有外部输入驱动力信息的设置时,时序分析工具默认设置外部输入驱动力为无限大。输入驱动建模的实现方法可以通过以下3各命令来实现。
(1)使用SDC命令set_drive来设置外部输入驱动力信息,通过该命令定义驱动该引脚的输入驱动电阻值,再通过该驱动电阻值算出驱动端的转换时间,并计入时序路径的延时信息里。设置的电阻值越大,其驱动力越小,当定义为0时,代表输入端驱动力无限大,如下图所示。
设置命令如下所示。
set_drive -rise 0.4 [all_inputs]
set_drive -fall 0.3 [all_inputs]
以上命令定义设计所有输入的驱动值,上拉驱动电阻为0.4,下来驱动电阻为0.3.
(2)使用SDC命令set_driving_cell来设置外部输入驱动力信息,该命令定义驱动该引脚的输入驱动力等价为一个指定单元的驱动能力,通过该等价单元的驱动力算出驱动端的转换时间,并计入时序路径的延时信息里。设置的等价单元驱动能力大则其输入端驱动能力大,如下图所示。
命令如下所示。
set_driving_cell -lib_cell buff2 [all_inputs]
以上命令定义设计所有输入的驱动力等价于单元库里buff2单元的驱动力。
(3)使用SDC命令set_input_transition来设置外部输入驱动力信息,通过该命令直接定义驱动该引脚的输入驱动端转换时间。设置的转换时间越大,其驱动力越小,当定义为0时,代表输入端驱动力为无限大,如下图所示。
命令如下所示。
set_input_transition 0.6 [all_inputs]
以上命令定义设计所有输入的驱动力的转换时间为0.6ns。
2.输出负载建模
(1)如果没有外部输出负载信息的设置,时序分析工具默认设置外部输出负载为0。输出负载建模的实现方法可以通过使用SDC命令set_load实现,通过该命令定义外部负载为一个等效的电容,其电容值即为负载值,如下图所示。
命令如下所示。
set_load 5 [all_inputs]
以上命令定义设计所有输出负载等效为5pF的电容负载。
(2)输出负载建模也可以通过该命令定义输出负载等效为某指定单元引脚的电容值,如下图所示。
命令如下所示。
set_load [get_attribute [get_lib_pins tech_lib/NAND2/A] pin_capacitance] [all_outputs]
以上命令定义设计所有输出负载等效为与非门NAND2的引脚A的电容负载。