相關閱讀
SDC輸出命令https://blog.csdn.net/weixin_45791458/category_12993272.html?spm=1001.2014.3001.5482
????????write_script命令用于將設計中的屬性設置命令輸出為腳本文件(其實它并不是一個SDC命令,歸為此類只是為了方便管理),這包括所有的SDC命令(實際上所有的SDC命令都會設置相應屬性,例如set_ideal_network命令設置了ideal_network_source屬性),但不包括用戶自定義屬性。對于那些不能直接用特定命令設置的屬性,將統一使用set_attribute命令設置。
????????本文針對Design Compiler,但該命令同樣存在于PrimeTime、IC Compiler等工具中,它們大致相同,略有差別。write_script命令的BNF范式(有關BNF范式,可以參考以往文章)為:
write_script [-hierarchy] [-no_annotated_check] [-no_annotated_delay] [-no_cg] [-full_path_lib_names] [-nosplit] [-include loop_breaking] [-output file_name]
指定所有設計
? ? ? ??-hierarchy選項指定為所有設計生成屬性設置命令,如果不使用該選項,只會為當前設計生成屬性設置命令。
指定不包含反標延遲檢查命令
????????-no_annotated_check選項指定腳本文件中不包含set_annotated_check命令。對于含有大量反標信息的設計,使用此選項可以避免生成過大的腳本文件。
指定不包含反標延遲命令
? ? ? ? -set_annotated_delay選項指定腳本文件中不包含set_annotated_delay命令。對于含有大量反標信息的設計,使用此選項可以避免生成過大的腳本文件。
指定不包含時鐘門控信息
? ? ? ? -no_cg選項指定腳本文件中不包含Power Compiler中有關時鐘門控的屬性設置(通過set_attribute命令設置),這些屬性有助于門控時鐘單元的識別。
指定完整庫名
????????-full_path_lib_names選項指定庫名以包含路徑的方式寫出。
指定不換行
????????-nosplit選項指定當字段長度超出列寬時不進行換行(適合用diff比較或后處理)。
指定包含被斷開的組合環
????????-include loop_breaking選項指定為那些被斷開的組合環輸出set_disable_timing命令。
指定文件名
????????-output選項指定腳本文件的名稱,如果不使用該選項,則默認只輸出至標準輸出。
注意事項
????????1、某些屬性不支持輸出,某些命令由于未設置屬性也不支持輸出,例如set_clock_gating_style、set_min_library等。
? ? ? ? 2、對于Design Compiler而言,輸出的設置命令可能與執行時不完全一樣,這是因為綜合過程中Design Compiler可能對設計進行解組、唯一化、重命名等優化操作(嚴格意義說,此時的設置命令對應的是綜合后設計的屬性,而不是綜合前的),并且設置命令應該是參數展開的形式。?
簡單使用
????????假設執行了以下腳本文件,但不進行綜合。
create_clock -period 10 [get_ports clk]
set_clock_latency -source 0.5 [get_clocks clk]
set_dont_touch [get_nets clk]
set_attribute [get_nets in1] dont_touch true
set_load [expr 0.5+0.5] out // 輸出時是以展開的形式
set_input_delay 0.5 -clock [get_clocks clk] [get_ports in*] // 輸出時是以展開的形式
????????使用write_script?命令后,輸出的內容如下所示。
dc_shell> write_script
Warning: Design 'top_module' has '1' unresolved references. For more detailed information, use the "link" command. (UID-341)
#################################################################### Created by write_script -format dctcl on Wed Jul 30 18:50:23 2025#################################################################### Set the current_design #
current_design top_moduleremove_wire_load_model
set_dont_touch [get_nets in1] // 盡管使用set_attribute命令設置,但輸出set_dont_touch命令
set_dont_touch [get_nets clk]
set_load -pin_load 1 [get_ports out]
create_clock [get_ports clk] -period 10 -waveform {0 5}
set_clock_latency -source 0.5 [get_clocks clk]
set_input_delay -clock clk 0.5 [get_ports in1]
set_input_delay -clock clk 0.5 [get_ports in2]
set_input_delay -clock clk 0.5 [get_ports in3]