set_output_delay与set_min_delay的区别
我一直不明白set_input/output_delay与set_min/max_delay的差别。同事说set_input/output_delay仅对setup有约束,set_min/max_delay分别对setup,hold约束,所以建议我用后者。我看手册上只说了set_min/max_delay优先级别高。其中的max/min真的分别指的是setup,hold吗?
我的觀點剛好相反。我建議用set_input_delay與set_output_delay,而不是用set_max_delay與set_min_delay。而你朋友說前者僅constrain max delay time這是不正確的,它們也有constrain min delay time。
你可以man set_input_delay,會發現它有-max與-min的選項,並請看它的解釋。
為何不建議用後者?
因為後者相對於前者的一個很大的差異是:後者沒有參照任何clock,而前者有-clock的選項。
所以若有對clock加上如latency、uncertainty、...,就應該使用前者並加上-clock,然後STA才會考量這些constraints。
舉個例子:
若有一設計想限制input到flip-flop (FF)的path的最大delay為10ns。
又input是接到另一設計的FF輸出。且這兩個FF都接到同一clock。且此clock有設1ns的latency。
如果用set_max_delay,我們很直覺的會設10ns的delay。
但STA的結果是:data從起點input出發,沒考量到1ns的clock latency,而終點的FF卻有1ns 的clock latency,
所以STA會認為這條path有(約)11ns可以給path上的comb logic作運算,
就可能合成出一條11ns的path,導致最終這設計只能操作在11ns,而不是10ns。
但若用set_input_delay,它就會考慮起點的1ns clock latency。
然而,若要synthesize combinational circuit,也可使用set_input_delay/set_output_delay再加上virtual clock。
要建立一virtual clock,就是使用create_clock然後不指定pin/port。
所以說一般只要用set_input_delay/set_output_delay就可以取代set_max_delay/set_min_delay。
至於set_max_delay/set_min_delay的用途我就不太清楚了。
還有一個要注意的差異是,
若要constrain input to FF為10ns。
set_max_delay要指定10ns。
但set_input_delay要指定"前一級的combinational logic接到這input的delay"。
若"前一級的combinational logic接到這input的delay"為0ns,
就代表input to FF的path可以算10ns。
所以這以下這兩種是"差不多"的(若不考量clock latency, uncertainty, ...):
1.set_max_delay 10 [get_port foo]
2.
create_clock -p 10 [get_port clk]
set_input_delay 0 -clock clk [get_port foo]
补充一点,set_input/output_delay只是针对PORT的设置,
set_max/min_delay可以针对任意两点(有很多OPTION),很灵活。
同意2楼的, set_max/min_delay 属于 exception constrain,他不仅仅约束data path, 连clock period一并改变, 你可以试验一下让PT报一条path看看, 如果你仅仅想约束某段data path, 而clock不变的话, 这条约束显然不合适。
这么厉害?如果我加的约束全在输入输出端口,也就不会对时钟产生影响,这样两种约束的差别也就不大了吧?
"clock period一並改變"這句話怪怪的。set_max_delay/set_min_delay應該不會改變create_clock的period。
只是遇到需要考量clock delay(latency, uncertainty, skew, ...)的STA起點或終點,它們就不太適合使用。
因為使用者在使用set_max_delay/set_min_delay很容易忘記考量clock delay,而做出timing不正確的電路。
再问一个问题,而偶们怎么确定哪个时钟是和端口相关的呢?
看input與output分別與誰相接。假如個有三個design A, B, C。A輸出接B輸入,B輸出接C輸入。
要設定B的input delay所相對的clock,就是找出這條path: A flip-flop>A output port>B input port>B flip-flop,
而B input delay所相對的clock就是path起點的A flip-flop所接的clock。
B的output delay與C的flip-flop依此類推。
也就是说,每个端口的相关联时钟就是端口前一级FF的时钟?那A input的关联时钟怎么算呢?
就要看A input接到的東西是什麼,可能是另外一個設計、也可能是個訊號產生器。
若是接到訊號產生器,訊號產生器可以產生clock與data,這clock就視為launch此data的clock。
這clock通常也是接到電路的clock來源。
如果是以上情形,又假設input data與clock同時到達A設計,
那input data可以計算的時間仍(約)為一週期,
所以input delay可設為0ns。
而set_input_delay的-clock則可設為在A設計中所create_clock,
因為input data與A設計皆是同步於同一clock。
明白了。多谢!
很精彩,谢谢解答
min delay violations怎么破
且此clock有設1ns的latency。是不是就是说到两个FF的时钟有1ns的延迟
data從起點input出發,沒考量到1ns的clock latency,而終點的FF卻有1ns 的clock latency,
所以STA會認為這條path有(約)11ns可以給path上的comb logic作運算。
这个1ns和10ns不是同时计算的吗,也就是1ns包含在了10ns中?
但若用set_input_delay,它就會考慮起點的1ns clock latency。
没明白这句话,再解释下吧
多谢啦
又input是接到另一設計的FF輸出。且這兩個FF都接到同一clock。且此clock有設1ns的latency。
这句是什么意思,即便是没接到FF的输出,在计算in2reg的的timing时也要考虑clock的latency
没完全看明白,但是很有收获!