相关阅读
静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm=1001.2014.3001.5482
最小脉冲宽度检查用于确保一个单元的时钟引脚和异步置位/复位引脚的的脉冲宽度满足最小要求,如果违反该要求,则可能出现功能错误。严格意义上说,最小脉冲宽度不是一个约束,它并不像建立时间、保持时间、移除时间、恢复时间那样在综合时被考虑,但在综合完成后可以使用report_min_pulse_width命令查看报告。
就像建立时间、保持时间那样,最小脉冲宽度可以在逻辑库中定义,可以是简单使用引脚属性min_pulse_width_low和min_pulse_width_high,也可以使用查找表的形式,即min_pulse_width类型的timing组。而使用set_min_pulse_width命令可以覆盖逻辑库中的定义,如果想要设置的最小脉冲宽度,使用remove_min_pulse_width命令。
本文针对Design Compiler,但该命令同样存在于PrimeTime、IC Compiler等工具中,它们大致相同,略有差别。set_min_pulse_width命令的BNF范式(有关BNF范式,可以参考以往文章)为:
set_min_pulse_width
value
object_list
[-low] [-high]
指定最小脉冲宽度
指定一个正浮点值作为最小脉冲宽度值,如果指定负值或零将被忽略。
指定对象列表
指定设置最小脉冲宽度的时钟或时钟/异步复位引脚,如果指定了时钟对象,则所有由该时钟连接的所有引脚将会被设置最小脉宽值。
指定低脉冲
-low选项指定设置最小低脉冲宽度,如果-low和-high选项都没有指定,最小脉冲宽度同时作用于低脉冲和高脉冲(相当于它们同时指定)。
指定高脉冲
-low选项指定设置最小高脉冲宽度,如果-low和-high选项都没有指定,最小脉冲宽度同时作用于低脉冲和高脉冲(相当于它们同时指定)。
简单使用
下面以图1举例说明set_min_pulse_width命令的使用(本实验是在Design Compiler 2024.09-SP2上进行的)。
图1 简单的触发器
首先使用create_clock命令以clk端口为源对象创建一个周期为10的时钟。
create_clock -period 10 [get_port clk]
接着使用report_min_pulse_width命令查看当前的最小脉冲检查结果,如图2所示,可以看出时钟脉冲宽度满足了检查要求(MET)。
report_min_pulse_width
图2 最小脉冲检查报告
最后使用set_min_pulse_width命令设置一个较大的值,此时结果如图3所示,可以看出时钟脉冲宽度没有满足检查要求(VIOLATED),也可以使用report_constraint -all_violators命令报告不满足的时钟脉冲宽度。
set_min_pulse_width 6 [get_pin q_reg/CK]
图3 最小脉冲检查报告