文章目录
- 前言
- 一、什么是 min pulse width?
- 二、为什么检查 min pulse width?
- 三、如何设置 min pulse width约束?
- 1. 在sdc里面定义
- 2. library里面定义
- 四、如何检查 min pulse width?
- 五、如何修复 min pulse width?
- 总结
前言
min pulse width 是对信号高电平或低电平脉冲最小宽度的衡量,通常都只针对clock path 做min pulse width 检查。
一、什么是 min pulse width?
min pulse width ,全称为最小脉冲宽度检查。min pulse width用于检查时钟信号的波形是否处在一个合理的状态。时序单元对时钟的高电平和低电平的脉冲宽度有一定的要求,经过min pulse width检查可以获悉时钟信号的最小脉冲宽度是否满足了时序单元的要求。
二、为什么检查 min pulse width?
一般情况下,由于cell本身的差异,rise和fall delay不相同,这样可能会造成时钟信号脉冲宽度减小。
如下图一个周期为1ns,duty cycle 为50%的clock信号:
在经过一个buffer(rise delay: 0.05, fall delay:0.03):
clock信号波形变成如下图所示:
假设一个占空比为50%的时钟穿过一个buffer,该buffer的rise delay大于fall delay,则经过buffer后的脉冲宽度要比输入时钟小。如果时钟信号经过一系列相同类型的单元,则时钟信号的脉冲宽度将会持续减小。如果小于某个最小宽度,可能会导致器件不能正常的捕获数据。
因此,在做timing分析时,我们是必须对cell的pin做min pulse width检查。
三、如何设置 min pulse width约束?
min pulse width检查设置通常有两类方法:在sdc里面重新设置min pulse width约束或者直接使用library里面的设置。
1. 在sdc里面定义
指令如下(示例):
set_min_pulse_width 1.25 [get_clocks *]
或者指令如下(示例):
set_timing_derate -min_pulse_width 1.25
2. library里面定义
EDA工具也可以通过查找单元库来获取 min pulse width的阈值,在单元库中,一般是以input transition 为index 的一张一维表。
一般情况下,如果要设置比lib里面更为严格的min pulse width检查,需要在sdc里面重新设置min pulse width约束。
四、如何检查 min pulse width?
因为library 中相应clock pin 上定义了min pulse width 属性,或用命令set_min_path_width 设了约束,因此在做了CTS之后,则可以使用命令report_min_pulse_width 可以报出相应min pulse width check。
如上电路图,我们想要计算ff2的clock pin的min pulse width check,采用report_min_pulse_width -path_type full_clock_expanded [get_pin ff2/CP],得到下面path路径slack。
如果想要报出所有的min pulse width violation可以使用report_min_pulse_width -all_violators命令。
五、如何修复 min pulse width?
1.由于普通buffer上升和下降的delay不一样,如果经过一连串的buffer的话,有时候会发生min pulse width的violation。因此,更加推荐采用clock inverter来取代buffer,相比buffer来说,inverter的上升和下降时间会相互补偿,这样就更容易避免min pulse width violation的产生;
2. 检查是否有比较大的transition, 因为min pulse width的阈值在单元库中一般是以input transition 为index 的一张一维表;
3. 检查时钟路径是否用了相同阈值电压(Vt)的的单元,是否用了时钟单元(一般以CK或DCCK开头),另外,对于先进工艺电路,一般时钟路径会使用低阈值电压单元(ULVT);
4. 检查是否有串扰,消除或者减少串扰引起的delta delay。
总结
最小脉冲宽度对数字电子设备的功能和性能至关重要,它直接影响设备的稳定度和精度,因此设计数字电子设备时,必须仔细考虑最小脉冲宽度,并确保信号始终保持在可接受范围内。