input-to-reg 约束
设置 input-to-reg 时序路径的约束时,不仅需要创建时钟模型,还需要设置输入延时 (input delay)。 设置 input delay 时,需要假设输入 port 信号是与时钟相关联的,且 port 信号是在时钟上升沿到来之后延迟了一小段时间到达的 port 端。 这一小段延迟时间称为 input delay。
假设上图中 port a 信号是在时钟到来之后的 0.6ns 达到,时钟周期为 2ns,clock uncertainty 为 0.3ns,建立时间为 0.2ns,则约束语句为:
create_clock -period 2 [get_ports clk]set_clock_uncertainty -setup 0.3 [get_clocks clk]set_input_delay -max 0.6 -clock clk [get_ports a]则 port a 到寄存器 ff2 的 d 端的 n 路径延时为:
tmax = 2-0.3-0.6-0.2 = 0.9ns只要 port a 到寄存器 ff2 的 d 端的延时小于 0.9ns,时序就能满足要求。
当所有输入端口延迟相同时,可利用以下语句进行时序约束:
set_input_delay -max 0.6 -clock clk \\ [remove_from_collection [all_inputs] [get_ports clk]]当仅有一两个信号的输入延迟不同时,可以使用分别设置的方法,也可以使用覆盖设置的方法:
# 首先设置所有 input delay 为 0.6nsset_input_delay -max 0.6 -clock clk [all_inputs] # port a 的输入延时设为 0.7ns,则上一句 a 的输入延时属性会被覆盖set_input_delay -max 0.7 -clock clk [get_ports a]# 去除掉 clock 端的输入延时设置remove_input_delay [get_ports clk]reg-to-output 约束
设置 reg-to-output 时序路径的约束时,也需要设置输出延时 (output delay)。
设置 output delay 时,也需要假设输出 port 信号是与时钟相关联的,且 port 端信号在延迟了一小段时间后可以到达可能存在的 ”下一级寄存器的 d 端“,并被时钟捕获。 这一小段延迟时间称为 output delay。
假设上图中 port b 信号输出后到达下一级的 output delay (tt + tsetup) 为 0.8ns,时钟周期为 2ns,clock uncertainty 为 0.3ns,则约束语句描述为:
create_clock -period 2 [get_ports clk]set_clock_uncertainty -setup 0.3 [get_clocks clk]set_output_delay -max 0.8 -clock clk [get_ports b]寄存器 ff3 的 clock 端到 port b 的最大延时为:
tmax = 2-0.3-0.8 = 0.9ns只要寄存器 ff3 的 clock 端到 port b 的延时小于 0.9ns,时序就能满足要求。
当所有输出端口延迟相同时,也可以同时对所有输出端进行 output delay 的设置。 当仅有一两个信号的输出延时不同时,可以使用分别设置的方法,也可以使用覆盖设置的方法。
input-to-output 约束
当输入端和输出端之间只存在组合逻辑时,就需要在 dc 中创建虚拟时钟来约束时序。 虚拟时钟没有连接到设计中的任何端口,只为方便分析 input delay 与 output delay。
例如某个设计示意图如下所示,估算虚拟时钟的频率为 2ns, uncertainty 为 0.3ns,则 input-to-output 的约束语句描述如下:
# 创建虚拟时钟时无需指定 clock 源,且不可省略 -name 选项create_clock -name vclk -period 2set_clock_uncertainty -setup 0.3 [get_clocks vclk]set_input_delay -max 0.4 -clock vclk [get_ports a]set_output_delay -max 0.3 -clock vclk [get_ports b]此时 port a 与 port b 之间的组合逻辑最大延时要求为:
tcomb = 2-0.3-0.4-0.3 = 1ns
latency/uncertainty 对 input/output delay 的影响
上一个寄存器的时钟端到下一个寄存器的数据端的路径,可以称为数据路径 (data path)。 而时钟周期的传输可以称为时钟路径 (clock path)。
clock 建模时,如果设置了 uncertainty/latency,则会对 data path 和 clock path 产生影响,从而对 input/output delay 的相关时序可能也会产生影响。
某一设计示意图及时序约束语句描述如下,图中也简单计算了数据到来时刻、数据捕获时刻、时钟到来时刻等信息。
首先分析 input-to-reg path:
考虑 clock latency,时钟延时为 source latency 与 network latency 的总和:
clock latency = 0.3+0.12 = 0.42 nsff2 时钟端的 clock launch 包含了 clock latency 和 uncertainty,到达时刻为:
clk launch = 2+0.42-2 = 2.22ns数据到达 port 端口的时间为 clock latency 与 input delay 的总和:
input arrival = 0.42+0.6 = 1.02ns所以,内部路径 n 的最大延时为:
npath_tmax = clk launch - input arrival = 2.22-1.02 = 1.2ns不考虑 clock latency,则内部路径 n 的最大延时为:
npath_tmax = 2 - 0.2 - 0.6 = 1.2ns可见,clock latency 对 input-to-reg 路径时序没有影响,clock uncertainty 有影响。
分析 reg-to-output 路径:
考虑 clock latency,则 clock launch 时间不变,仍然为 2.22ns。
clock latency 与内部路径 s 的延时时间和为:
clock latency + spath_tmax= clock launch - output_delay=2.22 - 0.8 = 1.42ns内部路径 s 的最大延时为:
spath_tmax = 1.42 -0.42 = 1ns不考虑 clock latency,则内部路径 s 的最大延时为:
spath_tmax = 2 - 0.2 - 0.8 = 1ns可见,clock latency 对 reg-to-output 路径时序没有影响,clock uncertainty 有影响。
小结
clock latency 同时作用于 data_path 与 clock path,所以对 input-to-reg 与 reg-to-output path 的时序分析不会产生影响。
clock uncertainty 只作用于clock path,所以对 input-to-reg 与 reg-to-output path 的时序分析会产生影响。
时序预算 (timing budget)
因为应用场景的差异,更多时候 input/output delay 的具体值是无法精确得到的,这就需要对相关的延时值进行估计,并应用到约束设置中,即为时间预算 (timing budget)。
timing budget 的方式主要有两种:按时钟百分比估算和按寄存器输出估算。
按时钟百分比估算
一般建议使用时钟周期的 40% 时长来约束 port 端到寄存器 d 的延时 (上图中 my_block 的 n path) ,即 input delay 可以设置为时钟周期的 60% 时长。 output delay 同理。
假如上一级 q 端到输出端的延时 (上图中 x_block 的 s path) 也取 40%,那么 input-to-reg path 将有 20% 的裕量,裕量中包括 ff1 的 cq 延时 (ff1 时钟端到输出端) 和 ff2 的建立时间。 所以,实际设置 60% 的 input delay 是有些偏大的。
假设上述设计中,时钟周期为 10ns,则 timing bugdet 方案可以描述如下:
create_clock -period 10 [get_ports clk]set_input_delay -max 6 -clock clk \\ [remove_from_collection [all_inputs] [get_ports clk]]set_output_delay -max 6 -clock clk [all_outputs]按寄存器输出估算
假设所有的输出 port 都是由寄存器驱动的 (见上图中的 x_block 和 y_block 设计),那么 input delay 可以由上一级寄存器的延时特性估算,output delay 可以由下一级寄存器的延时特性估算。
例如通过查找 library 得到触发器的 cq 延时 (时钟端到输出端) 最大为 1.5ns,最小为 0.2ns,那么 input/output delay 的约束语句可以描述如下:
set c2q_max 1.5set c2q_min 0.2set period 10create_clock -period $period [get_ports clk]set_input_delay -max $c2q_max -clock clk \\ [remove_from_collection [all_inputs] [get_ports clk]]set_output_delay -max [expr 10-$c2q_min] -clock clk [all_outputs]
逆变器对齿轮电机有那些用处,陡的冲击电压
人工智能为刷脸支付带来哪一些可能性
指纹泄露的风险高 生物信息安全建设需加强
NVIDIA Clara AGX开发套件加速AI医疗设备开发
芯片为什么难造?
时序约束的相关知识(二)
什么是阻燃端子线?
英特尔四大层面,提升DeepRec训练和推理能力
在传输过程的信号要如何描述?
利用电池传感器降低汽车电子装置引发故障的风险
高速电路信号完整性分析与设计目录
BOE(京东方)重磅亮相国际显示周 五大创新领域展现显示技术硬实力
芯片IP机遇大爆发,安谋科技或将成为“领跑者”
电动车设计方案电路原理图分析
常见的电能质量问题①--谐波及其治理效益
利用实时测试虚拟进行动态测试提升网络监控软件
【实操】刚买的示波器就被我拆了!感觉很爽
STM32单片机如何利用SPI接口外扩SRAM芯片
详解转差分电路提升系统动态范围
微软希望对限制人工智能包容性的数据沙漠有所作为