上一節介紹的I/O延時約束只能對I/O的輸入、輸出延時信息進行約束,但是對於輸入、輸出外部的實際負載情況並沒有做精確的設置,如下圖所示。
如果缺少比較真實的外部輸入、輸出信息,時序分析工具對與外界邏輯有連接關係的內部邏輯的輸入,輸出延時的計算結果就會和實際情況之間有比較大的誤差。可以通過設置I/O環境建模約束來設置與實際情況相符合的外部輸入驅動力信息和輸出負載信息,這樣可以指導時序分析工具計算出處在內部與外部交界上的單元的更符合實際情況的延時信息。
I/O環境建模約束的內容主要包括以下幾個方面。
1.輸入驅動建模
在沒有外部輸入驅動力信息的設置時,時序分析工具默認設置外部輸入驅動力爲無限大。輸入驅動建模的實現方法可以通過以下3各命令來實現。
(1)使用SDC命令set_drive來設置外部輸入驅動力信息,通過該命令定義驅動該引腳的輸入驅動電阻值,再通過該驅動電阻值算出驅動端的轉換時間,並計入時序路徑的延時信息裏。設置的電阻值越大,其驅動力越小,當定義爲0時,代表輸入端驅動力無限大,如下圖所示。
設置命令如下所示。
set_drive -rise 0.4 [all_inputs]
set_drive -fall 0.3 [all_inputs]
以上命令定義設計所有輸入的驅動值,上拉驅動電阻爲0.4,下來驅動電阻爲0.3.
(2)使用SDC命令set_driving_cell來設置外部輸入驅動力信息,該命令定義驅動該引腳的輸入驅動力等價爲一個指定單元的驅動能力,通過該等價單元的驅動力算出驅動端的轉換時間,並計入時序路徑的延時信息裏。設置的等價單元驅動能力大則其輸入端驅動能力大,如下圖所示。
命令如下所示。
set_driving_cell -lib_cell buff2 [all_inputs]
以上命令定義設計所有輸入的驅動力等價於單元庫裏buff2單元的驅動力。
(3)使用SDC命令set_input_transition來設置外部輸入驅動力信息,通過該命令直接定義驅動該引腳的輸入驅動端轉換時間。設置的轉換時間越大,其驅動力越小,當定義爲0時,代表輸入端驅動力爲無限大,如下圖所示。
命令如下所示。
set_input_transition 0.6 [all_inputs]
以上命令定義設計所有輸入的驅動力的轉換時間爲0.6ns。
2.輸出負載建模
(1)如果沒有外部輸出負載信息的設置,時序分析工具默認設置外部輸出負載爲0。輸出負載建模的實現方法可以通過使用SDC命令set_load實現,通過該命令定義外部負載爲一個等效的電容,其電容值即爲負載值,如下圖所示。
命令如下所示。
set_load 5 [all_inputs]
以上命令定義設計所有輸出負載等效爲5pF的電容負載。
(2)輸出負載建模也可以通過該命令定義輸出負載等效爲某指定單元引腳的電容值,如下圖所示。
命令如下所示。
set_load [get_attribute [get_lib_pins tech_lib/NAND2/A] pin_capacitance] [all_outputs]
以上命令定義設計所有輸出負載等效爲與非門NAND2的引腳A的電容負載。