SDC | set_data_check

應@Fly 天 同窗的要求,碼一遍set_data_check, 關於SDC 有好幾個兄弟號都寫了不少,能夠到『IC 技術圈』中找對應文章去看。

set_data_check 是個啥?


set_data_check 是一條SDC 的命令,用於約束『數據-對-數據』的『創建保持』時間檢查,一般被稱爲非時序約束 ( non-sequential constraints ), 理論上set_data_check 能夠設在任意的兩個data pin 上,其中一個pin 稱爲 constrained pin 相似於寄存器的data pin, 另外一個pin 稱爲related pin 相似於寄存器的clock pin. 


用set_data_check 約束時,-from 指定的pin 爲related pin, -to 指定的pin 爲constrained pin.

用set_data_check 約束的『創建保持』時間檢查跟普通寄存器的『創建保持』時間檢查最大的區別是:set_data_check 約束的『創建保持』時間是zero-cycle check, 即constrained signal 跟related signal 兩個數據信號在同一個時鐘沿被採樣釋放,以下圖右側所示;而傳統的DFF setup check 默認是跨一個時鐘週期的。


set_data_check 也分setup 跟hold:
  • set_data_check setup: 相似於寄存器的setup, 即related signal 翻轉前,constrained signal 必須保持穩定的時間。git

  • set_data_check hold: 相似於寄存器的hold, 即related signal 翻轉後,constrained signal 必須保持穩定的時間。微信

set_data_check hold check 時,capture clock 一樣會往前推一個cycle, 因此若是設了hold data check一般須要設一個multi_cycle 將其拉回來。

除了用set_data_check 約束『數據-對-數據』的檢查以外,有的lib 裏也會定義『數據-對-數據』的檢查,lib 中的關鍵詞是:
  • non_seq_setup_risingapp

  • non_seq_setup_fallingasync

  • non_seq_hold_rising工具

  • non_seq_hold_fallingui

用set_data_check 約束的數據-對-數據』檢查跟lib 裏定義的數據-對-數據』有如下區別:
  • set_data_check 只能指定一個值,而 lib 裏定義的non_seq timing check 則是一張index 爲input transition 跟output load 的表格,因此更精確。url

  • 可是lib 裏定義的non_seq timing check 只能在該lib cell 的leaf pin 上,而set_data_check 能夠對design 中任意兩個pin 進行約束。spa

  • 對於C 家工具,若是既讀了定義有non_seq timing check 的lib, 也設了set_data_check, 則set_data_check 優先級更高。
    .net


set_data_check 用在哪?


set_data_check 一般用於信號間的skew 約束,好比一些高速接口相關信號間的約束。摘一段:

Data checks are normally applied where there is a specific requirement of skew (either minimum of maximum) or race condition (where the order of arrival of two signals can affect output and the intention is to get one of the probable outputs by constraining one signal to come before the other) between two or more signals. These may be required where:3d

  • At the digital-analog interface within a chip where analog signals at the analog block boundary are required in a specific order.

  • At the chip boundary, some asynchronous interface signals may have skew requirements.


set_data_check 在EDA 中的使用


在Innovus 或Tempus 中數據-對-數據』檢查默認是開啓的,能夠用以下變量控制。
  • 對於用命令set_data_check 設置的約束,能夠經過以下變量控制:


  •  對於lib 裏定義的non_seq timing check, 能夠經過以下變量控制:

若是在Innovus 或Tempus 中設了以下約束,在report_timing 的時候須要加-check_type data_setup/ data_hold 來report 相應的data check:
set_data_check -from u0/D1 -to u0/D2 0.5

不像set_max_delay 會將原始的timing path 打斷,set_data_check 是不會將原始timing path 打斷的。

如上示例,即便在pin u0/D1 到u0/D2 上設了set_data_check 的約束,可是在timing 分析時u0/D1 不會被當作一個endpoint, 對於如上的path, timing 分析會同時作:
  • u0/D2 相對於 u0/D1 的data check.

  • 到寄存器u1 的setup/hold check.

Innovus 或Tempus 中默認其餘的false path 之類的timing exception 不影響data check, 能夠用以下變量控制:
timing_apply_exceptions_to_data_check_related_pin

report_analysis_coverage 會將data-to-data check 歸類於:DataCheckSetup 和DataCheckHold. 


驢說IC

本文分享自微信公衆號 - 陌上風騎驢看IC(MoShangFengQiLv)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索