目录
一、概念
1.1 时序模型定义
时序模型(Timing Model) 是用于描述数字电路中信号传播延迟、时序关系和功耗特性的数学模型,是Vivado进行时序分析、优化和验证的基础。时序模型由芯片厂商提供,并以特定的文件格式(如LIB、LEF、SPEF、SDF等)存储。
1.2 时序模型组成
时序模型的构成主要由单元延迟,互连线延迟,时序弧,时钟特性
单元延迟(Cell Delay):描述信号通过逻辑单元(如LUT、触发器、门电路等)的延迟,也包括上升延迟(rise delay)和下降延迟(fall delay)。
互连线延迟(Interconnect Delay):描述信号通过互连线(如布线资源)的延迟。
包括电阻、电容和电感等寄生参数。
时序弧(Timing Arc):描述信号在输入引脚和输出引脚之间的传播路径。包括建立时间(setup time)、保持时间(hold time)和恢复时间(recovery time)等。
时钟特性(Clock Characteristics):描述时钟网络的延迟、抖动和偏斜(skew)。
1.3 应用阶段
使用EDA工具如Vivado进行设计时,在综合以及实现阶段都会使用到时序模型进行时序分析,
综合(Synthesis):使用时序模型优化逻辑综合,以满足性能和面积目标,主要使用LIB和DB文件。
布局布线(Place and Route):使用时序模型指导布局布线工具优化信号延迟和时钟网络,主要使用LEF、SPEF、LIB和DB文件
仿真:主要使用SDF和LIB文件,实现基于时序的仿真
二、时序模型文件
2.1 时序模型文件格式
时序模型文件lib通常由库声明,单元定义,引脚定义,时序弧四个主要部分组成。
//库声明部分定义了库的名称、版本、单位和其他全局属性。
library (example_library) {
technology (cmos);
delay_model : table_lookup;
time_unit : "1ns";
voltage_unit : "1V";
current_unit : "1mA";
pulling_resistance_unit : "1kohm";
capacitive_load_unit (1, pf);
//单元定义部分描述每个逻辑单元的特性,以cell开头
cell (AND2) {
area : 5;
//引脚定义部分描述了每个引脚的输入/输出方向、电容和时序特性
pin (A) {
direction : input;
capacitance : 0.1;
}
pin (B) {
direction : input;
capacitance : 0.1;
}
pin (Y) {
direction : output;
function : "(A & B)";
//时序弧部分描述了信号在输入引脚和输出引脚之间的传播路径及其延迟值。
timing () {
related_pin : "A B";
timing_type : combinational;
cell_rise (delay_template_3x3) {
index_1 ("0.1, 0.3, 0.5");
index_2 ("0.1, 0.3, 0.5");
values ("0.2, 0.3, 0.4", \
"0.3, 0.4, 0.5", \
"0.4, 0.5, 0.6");
}
rise_transition (delay_template_3x3) {
index_1 ("0.1, 0.3, 0.5");
index_2 ("0.1, 0.3, 0.5");
values ("0.1, 0.2, 0.3", \
"0.2, 0.3, 0.4", \
"0.3, 0.4, 0.5");
}
2.2 Vivado时序模型
Vivado的时序模型文件在安装路径下,路径示例如D:\Vivado2024.2\Vivado\2024.2\data\parts\xilinx,按不同的family,如kintex7,spartan7,virtex7等进行了划分
以kintex7为例,在liberty目录下可以看到kintex7.lib和kintex7_pt.lib文件
kintex7_pt.lib文件中,库声明内容如下
单元定义以cell开头,后面为对应的单元名称,里面pin为单元的引脚,包含了引脚的方向说明
时序弧部分Cell(FDPE)为例,包含了各引脚间的关系,时序类型
其中,timing_type中有minimum_period,combinational,min_pulse_width,setup_rising,setup_falling,hold_rising,setup_falling,rising_edge,falling_edge
minimum_period:时钟引脚支持的最小周期
combinational:输入引脚到输出引脚的时序arc
min_pulse_width:对于时钟引脚所支持的信号最小脉冲宽度
hold_rising:描述数据信号在时钟上升沿之后的保持时间(Hold Time)。
setup_rising:描述数据信号在时钟上升沿之后的建立时间(Setup Time)
hold_falling:描述数据信号在时钟下降沿之后的保持时间(Hold Time)
setup_falling:描述数据信号在时钟下降沿之后的建立时间(Setup Time)
recovery_rising:描述复位信号在时钟上升沿之前的恢复时间(Recovery Time)
removal_rising:描述复位信号在时钟上升沿之后的移除时间(Removal Time)