setup和hold的檢查也有可能發生在任意兩個數據端口,其中不包括時鐘端口。
我們將其中一個端口(pin)設置為約束端口(constrainted pin),就像觸發器中的數據端口;將另一個一個端口(pin)設置為相關端口(related?pin),就像觸發器中的時鐘端口。
我們來看看setup check有什么區別:
- data to data的setup check會是同一個時鐘沿,即其launch和capture會在同一個時鐘沿。
- 因此,data to data的setup check也叫做zero-cycle 或 same-cycle check
data to data check 使用 set_data_check命令進行約束
set_data_check -from SDA -to SCTRL -setup 2.1set_data_check -from SDA -to SCTRL -hold 1.5
data to data check 可以很方便的用于需要明確兩對應信號之間到達時間的自定義模塊。一個常見的情況就是,數據信號被使能信號控制,那么我們需要確保數據信號到達前使能信號是穩定的。由于data to data的setup check中launch和capture會在同一個時鐘沿,我們以下面電路為例,看一看時序報告:
這里我們設置的是
set_data_check -from SDA -to SCTRL -setup 1.8
set_data_check -from SDA -to SCTRL -hold 1.0
則setup check的時序報告為:
由于data to data check的特殊性,其hold check會有些不同。其時序報告如下:
其中,時鐘周期為10。是由于工具的默認特性造成的。與半周期檢查較相似。
有時候,設計者希望在同一個邊沿進行holdcheck,這個時候,我們使用以下命令完成效果:
set_multicycle_path -1 -hold? -to UAND0/A2
其時序報告為:
另一方面,data to data check也可以用來約束數據不變化的時間:我們通過在上升沿進行setup check和在下降沿進行hold check,可以有效定義一個數據保持(no-change)窗口。
set_data_check -rise_from D2 -to D1 -setup 1.2set_data_check -fall_from D2 -to D1 -hold 0.8
?