[静态时序分析简明教程(十)]组合电路路径set_max/min_delay

一、写在前面

一个数字芯片工程师核心竞争力是什么?不同的工程师可能给出不同的答复,有些人可能提到硬件描述语言,有些人可能会提到对于特定算法和协议的理解,有些人或许会提到对于软硬件的结合划分,作者想说,这些说法,其实对也不对,硬件描述语言,翻来覆去无非是always和assign这几个语句的反复使用,而一些基础的协议算法深究起来其实也并不复杂,于作者而言,在常规的技能以外,有两项额外的技能颇为重要,其中之一便为sdc/STA的分析能力,它的重要之处在于作为桥梁建立了前端和后端的连接,虽然对于DE工程师而言,初版交付的sdc往往不甚准确,也没有办法通过这份sdc生成一份无误的timing report,但sdc的内容体现却是完完整整的将时序约束从行为级的描述映射到了gate level这样一个真实的电路层次上面。
写此专栏,一为学习记录,二为交流分享,以犒粉丝读者。

1.1 快速导航链接·

静态时序分析简明教程(一)绪论
静态时序分析简明教程(二)基础知识:建立保持时间,违例修复,时序分析路径
静态时序分析简明教程(三)备战秋招,如何看懂一个陌生的timing report
静态时序分析简明教程(四)时钟常约束
静态时序分析简明教程(五)生成时钟
静态时序分析简明教程(六)时钟组与其他时钟特性
静态时序分析简明教程(七)端口延迟
静态时序分析简明教程(八)虚假路径
静态时序分析简明教程(九)多周期路径
静态时序分析简明教程(十)组合电路路径
静态时序分析简明教程(十一)模式分析与约束管理
静态时序分析简明教程(十二)浅议tcl语言

二、组合电路路径

通常情况下的设计是reg-in, reg-out的,输入信号会被寄存后使用,同时信号也会在寄存后进行输出,这种做法的优点是有利于时序收敛,增加了时序冗余,但也存在从输入到输出的路径,没有遇到任何的寄存器,这样的路径被称为组合电路路径,我们要讨论的也是这种路径的sdc约束,下面的图片中由I1到O1的路径就是组合电路路径
在这里插入图片描述

2.1 SDC约束

我们通过限制延迟的上限和下线来约束组合逻辑电路路径,即set_max_delay和set_min_delay

set_max_delay  [-rise][-fall]
			   [-from from_list] [-to to_list]
			   [-through through_list]
			   [-rise_from rise_from_list]
			   [-rise_to rise_to_list]
			   [-rise_through rise_through_list]
			   [-fall_from fall_from_list]
			   [-fall_to fall_to_list]
			   [-fall_through fall_through_list] delay_value
			   [-comment comment_string] 
set_min_delay   [-rise] [-fall]
				[-from from_list]
				[-to to_list]
				[-through through_list]
				[-rise_from rise_from_list]
				[-rise_to rise_to_list]
				[-rise_through rise_through_list]
				[-fall_from fall_from_list]
				[-fall_to fall_to_list]
				[-fall_through fall_through_list] delay_value
				[-comment comment_string]

通常情况下,我们只需要约束set_max_delay即可,因此下面我们更多的讨论set_max_delay这个命令

2.2 举例

假如clk的周期是15ns,时钟输入后4ns后到达I1,输出O1经过3ns后才能被下一级寄存器捕获,我们需要如何约束这个电路呢?
在这里插入图片描述
通过计算,我们得出组合逻辑的最大延时是15-4-3=8ns, 同时我们也需要约束input_delay和output_delay,这里我们假如已经约束好clk为CLK,其周期为15ns,那么以下三条sdc约束就显而易见了。

set_max_delay -from [get_ports I1] - to [get_ports O1] 8.0
set_input_delay -max -clock CLK [get_ports I1] 4.0
set_output_delay _max -clock CLK [get_ports O1] 3.0

但是我们发现,起始约束好input_delay和output_delay后,不约束set_max_delay也不影响正确的STA分析,即约束好了7ns的输入输出后,剩余的时间自然的是组合逻辑电路的时间。因为假如存在寄存器的路径,涉及I1和O1,输入输出的delay约束就必不可少,因此,我们从易于维护的角度来看,推荐优先保证set_input_delay和set_output_delay规格

三、总结

组合电路路径可以使用set_input/output_delay或set_max_delay进行约束。如果路径从输入端口贯穿到输出端口,则最好使用set_input_delay和set_output_delay的组合来约束该路径。 通常,由于在大多数情况下,重点在于确保延迟小于期望值,因此,使用set_max_delay比使用 set_min_delay更频繁。

猜你喜欢

转载自blog.csdn.net/weixin_43698385/article/details/132259772