一、概述
????????ICC數據設置的文件關系框圖如圖:
?????????后端工具在數據設置階段需要對兩大類數據進行設置,包括從前端設計繼承的綜合數據 以及后端設計需要的物理數據。
- 綜合數據主要包括前端邏輯綜合已經設置過的邏輯與時序庫文件、設計約束文件sdc以 及綜合網表文件。
- 物理數據主要包括標準單元、內存RAM等IPJO管腳三類物理庫文件,工藝和設計規則 檢查相關的技術文件tf以及建模信號互連線延遲的RC模型的TLU+文件。
????????如下圖所示為ICC數字芯片后端設計主要步驟流程圖。圖中第一層準備的三部分數據,分別是綜合映射的門級設計(網表)、約束文件sdc、邏輯與物理庫文件。本文講述的就是第一 層數據設置階段。
?二、邏輯庫設置
????????邏輯庫提供:標準單元(與非門、或非門、異或門、寄存器等)的時序和功能信息;提供宏塊 (RAM、ROM、IP如處理器核心等)的時序信息;定義驅動和負載的設計規則(design rule),如最大/最小扇出Max/Min fanout、最大/最小電容負載Max/Min capacitance、最大/最小信號轉換時延Max/Min transitiono。通常,邏輯庫與前端綜合工具Design Compiler(DC)中的設置相同,通過目標庫target library與鏈接庫link library變量指定。
1、讀入門級網表????????
????????ICC可以打開Milkyway數據庫,讀入由DC創建的門級設計文件,讀入文件類型包括:?ddc、Verilog、VHDL等,其中ddc文件可包含設計屬性信息。ICC可一次讀入多個設計文件, 讀入設計文件(門級網表)的命令具體如下:
read_ddc #讀入ddc
read_verilog #讀入.v文件
read_vhdl #讀入.vhd文件
read_verilog filel.v file2.v … #讀入多個文件
2、多次實例化設計調整
????????IC Compiler不支持有多個實例(non-uniquified)的設計。如下圖中的頂層設計中實例化3個PARSER模塊是不允許的。
????????對于包含多個實例的設計,ICC腳本命令需要使用current_ design命令,該命令指定了當前的頂層設計名稱,并執行uniquify命令,實現實例唯一化,即對參考設計實例化模塊的 唯一拷貝。
current_design MY_TOP_DESIGN
uniquify
????????對比uniquify操作之前、之后,會發現被多次調用的模塊的模塊名自動添加后綴名,實現 各個模塊的唯一實例化。例如被3次實例化的PARSER的模塊名通過uniquify命令自動改為PARSER_1、PARSER_2、PARSER_3。uniquify命令對于前端以及后端設計的意義在于允許ICC對相同的實例根據各自情況(輸入驅動、輸出負載、輸入和輸出信號的時序要求)獨立優化邏輯,改進設計結果。
3、邏輯庫設置
? ? ? ? 這里可以參考DC的設置,
Design Compiler指南——預綜合過程_滄海一升的博客-CSDN博客主要說明Design Compiler的啟動、設置各種庫文件、創建啟動腳本文件、讀入設計文件、DC中的設計對象、各種模塊的劃分等。https://blog.csdn.net/qq_21842097/article/details/120368910????????大致腳本如下:
lappend search_path ./design_data ./scripts MYMMW_libs #搜索路徑
lappend search_path [glob MYMMW_libs/* /LM]set link_library H* gates_max.db io_max.db rams_max.db" #鏈接庫
set target_library "gates_max.db" #目標庫
set symbol_library gates.sdb io.sdb rams.sdbn #符號庫
三、物理庫設置
1、物理參考庫
????????物理參考庫(physical reference libraries)用于物理設計的數據庫設置。
????????物理參考庫包含標準單元、宏塊、管腳的布局布線的必要信息。icc的物理參考庫采用的是Milkyway參考庫格式,庫文件夾以mw為后綴名。物理參考庫提供的信息包括:
- 定義布局的單元塊(tile);
- 標準單元布局行的行高;
- 標準單元最小寬度單位(即單元塊的寬度);
- 布線方向;
- 布線軌道(track)的間距。
????????物理參考庫設置命令采用創建設計庫命令create_mw_lib,并選項 -mw_reference_library指定設計的物理參考庫。
create_mw_lib -mw_reference_library ...
????????如下圖所示,物理庫包含了芯片加工和底層設計需要的標準單元、宏塊IP以及IO管腳的物理信息。具體包括單元的尺寸、引腳位置、參考點、方向等。
? ? ? ?上圖中符號F作為對稱標識,指示單元是否旋轉或水平/垂直鏡像。布局的標準單元與單元塊(tile)的關系如上圖圖右所示。所有標準單元cell都是tile的面積整數倍,任意一個單元都可以由一個或多個tile 橫向拼接而成。tile與標準單元保持相同高度,即標準單元行高。但標準單元的寬度為tile寬度的整數倍。基于單元tile的標準單元版圖設計圖設計簡化了布局排列規則,便于EDA工具建模和電路實現。
????????物理參考庫的信息被保存在Milkyway數據庫中,主要包括以下三種視圖:
- CEL:完全的版圖視圖;
- FRAM:布局布線中使用的抽象視圖,在布局布線中使用。FRAM包含的信息是CEL 的一部分,占用更少存儲空間;
- LM帶時序和功耗信息的邏輯模型(LM庫為可選設置)。
????????如下圖所示為saed 32nm物理參考庫文件層次結構,包含三個子文件夾內容。該參考庫文件層次結構顯示的是后端參考庫的標準單元子庫。復雜的后端工藝庫針對不同的工藝角(corner)和不同工作模式(mode)獨立建立后端參考庫的LM db庫文件,以反映不同工作條件下的時序等信息。
2、技術文件的格式與功能
????????技術文件簡稱tf文件(后綴名為.tf)o對于每一種工藝(如IBMO .13um、TSMC 90nm)都 需要單獨定義tf文件。tf文件包含金屬層的參數,具體包括:
- 每一金屬層/過孔層的編號和名稱定義;
- 每一金屬層/過孔層的設計規則(包括最小線寬、線與線間距等);
- 層/過孔的物理和電氣特性;
- 電阻的介電常數;
- 電氣參數的單位與精度;
- 每一層/過孔顯示的顏色與圖案;
- 可能包含參數提取的電容模型等。
? ? ? ? tf文件示例如下:
3、指定tlu+文件
????????tlu+(tlu plus)文件為寄生RC模型文件。從布局到布線的各個環節都需要參考tlu+文件提供的RC數據,計算信號線的時間延遲。
????????Cell單元延時由輸入信號電平轉換時間(transition)和門的輸出負載(負載電容之和,包括線網電容Cnet和與線網連接的驅動單元的管腳電容Cpin)決定。
????????線網時延由線網的寄生阻抗Rnet和線網連接負載電容Cnet決定。
????????線網和單元的時延分開計算,ICC需要知道線網 的寄生阻抗和電容值。
????????tlu+模型通過線網的幾何信息和文件存儲的查找表計算線網的C和R值。
4、創建設計庫
????????create_mw_lib命令創建設計庫,設計庫是設計的容器,后綴名為mw。物理參考庫與技術文件是在創建Milkyway設計庫時指定。創建設計庫舉例如下:創建設計庫,指定技術文件 和物理參考庫,創建完成后打開庫。打開設計庫的過程類似于其他設計軟件打開一個新建的 工程。
create_mw_lib design_lib_orca -open \ #創建設計庫design_lib_orca并打開
-technology abc_6m.tf \ #指定技術文件
-mw_reference_library "sc ram32 io" #指定mw參考庫,即物理庫# sc:標準單元庫,io管腳庫,ram32存儲器庫set_check_library_options -all #設置檢查庫設置為全部檢查
check_library #檢查庫
? ? ? ? 這里需要說明的是設計庫、設計單元、參考庫和輸入文件關系,如下圖:
????????Milkyway設計庫的UNIX /Linux文件結構如下圖。圖中的lib、lib_1、lib_bak等文件中存儲了內容列表(T.O.C)、導入的技術文件、指向參考庫的指針等。
?????????新創建的設計庫中不包含設計單元,因此在執行create_mw_lib命令后, 只能看到在當前工作路徑下創建了與設計庫同名的文件夾,其中包含lib、lib_1、lib_bak等文 件,但不包含CEL文件夾。執行輸入v格式或者ddc格式的設計后,將自動創建CEL文件 夾,并在CEL中保存與設計頂層模塊同名的設計單元,如orca_init:1。
????????save_mw_cel命令保存CEL視圖。單元名稱中的冒號(:)和數字后綴表示單元保存的文件編號。設計單元在設計庫中保存后,在CEL文件夾中可能存儲多個單元名稱相同,但冒號后數字編號不同的設計文件,這些數字編號不同的文件共同構成了設計單元。
?5、保存和導入設計
????????在導入ddc或者v文件格式的設計后,當設置完成后,保存Milkyway設計的命令為save_mw_cel,舉例如下:
save_mw_cel -as xxx
????????選項-as設置保存單元名稱。關鍵設計階段后建議保存設計單元,以便后期設計工作有問題時打開前期設計結果,重復前面階段的設計工作。注意保存單元后,當前ICC 打開的設計還是保存前的設計單元。
????????默認鏈接庫link_library、搜索路徑search_path、目標路徑target_library和TLU +設置 保存在設計CEL中。如果庫文件更新或者保存位置發生變化,這些設置需要重新加載。如果重新打開CEL,默認保存的設置不會重新加載,除非先進行以下設置(自動重置cel 的lib設置):
set auto_restore_mw_cel_lib_setup true
open_mw_cel xxx
四、檢查及其他操作
1、檢查庫正確加載
????????完成邏輯庫和物理庫設置后,使用check_library命令檢查庫的不一致性,例如在邏輯庫和物理庫之間的cell單元和管腳差異、物理庫內缺少CEL和FRAM視圖以及多個參考庫中有重復單元等。?
set_check_library_options -all # 設置檢查庫選項打開
check_library #檢查庫命令
check_tlu_plus——files # tlu+ 文件檢查單獨完成
????????使用list_libs命令,列出所有邏輯庫文件的名稱、文件、路徑,便于核對。在讀入網表和完成鏈接后,才能使用list_libs命令。list_libs顯示信息的示例如下:
2、定義邏輯電源與地信號連接
????????采用derive_pg_connection命令,定義電源和地網絡P/G名稱,定義單元的電源管腳和地管腳名稱,并將各個單元的電源引腳和地引腳連接到P/G網絡。采用derive_pg_connection 命令,把單元的固定連接高、低電平的管腳用-tie選項控制連接到電源網絡VDD、VSS。采 用check_mv_design命令和-power_nets,檢查設計的電源網絡。
derive_pg_connection -power_net VDD -power_pin VDD -ground_net VSS -ground_pin VSS
derive_pg_connection -power_net VDD -ground_net VSS -tie
check_mv_design -power_nets
3、應用時序約束并檢查
????????ICC的時序約束要與DC綜合階段相同,最好采用兼容的sdc格式。時序約束應用并檢查腳本見表:
????????sdc文件確保包含對時鐘約束偏移、延時、電平轉換時間。采用report_clock? -skew查看設計的時鐘信息。
????????在數據設置階段要確保時鐘沒有定義為傳播時鐘(CTS步驟后時鐘網絡建立后傳播時鐘才有意義),采用report_clock命令查看。
? ? ? ? 此外,在進行設計布圖規劃和布局之前,有必要確保設計沒有被過度時序約束。約束需要和設計指標對應。下面面腳本里顯示了 ZIC (零互連延遲檢查)檢查步驟。首先設置打開互連線零時延模式,忽略線網傳輸時延;再檢查時序,看是否有明顯時序違例;檢查后關閉互連線零時延模式。
set_zero_interconnect_delay_mode true
report_constraint -all
report_timing
set_zero_interconnect_delay_mode false
4、去除不需要的理想線網和網絡
????????在數據設置階段去除不需要的理想網絡,這些網絡一般是高扇出網絡,如復位Reset、置位Set、使能Enable、選通Select等系統控制信號。如下圖所示,當Enable使能信號去掉后,ICC才能根據時序約束和布局走線的幾何信息,合理插入緩沖電路。
?????????理想網絡屬性通過remove_ideal_network命令去除,例子如下:
remove_ideal_network [get_ports Enable Select Reset]
5、數據設置腳本示例
????????包括創建設計庫、設置物理參考庫、設置技術文件、 設置tlu +文件、設置并邏輯連接電源和地網絡信號,以及對完成的各項設置檢查。
createjnw_lib design_lib_orca -open - technology techfile.tf \ -mw_reference_library “sc io ram32" set_check_library_options -all
check_library set_tlu_plus_files - max_tluplus cbl3_6m_max.tluplus \ -min_tluplus cbl3_6m_min.tluplus \ -tech2itf_map cbl3_6m.mapcheck_tlu_plus_files import_designs design. v -format verilog - top ORCA list_libs derive_pg_connection - power_net VDD - power_pin VDD \-ground_net VSS - ground_pin VSS
derive_pg_connection -power_net VDD -ground_net VSS - tie check_jnv_design -power_netsread_sdc constraints.sdc #如果讀入包含約束信息的ddc,可忽略該步驟 check_timing report_timing_requirements
report_disable_timing
report_case_analysis r
eport_clock
report_clock -skewsource tim_opt_ctrl.tcl #調用時序優化控制腳本 set_zero_interconnect_delay_mode true
report_constraint -all
report_timing set_zero_interconnect_delay_mode false remove_ideal_network Eget_ports "Enable Select Reset"] save_mw_cel - as xxx_setup
? ? ? ? 其中,時序和優化控制腳本中設定的變量和命令影響ICC后續步驟,因此需要在設計規劃(布圖)之前設定。示例如下:
#tim_opt_ctrl.tclset_app_var timing_enablejnultiple_clocks_per_reg true
set_app_var case_analysis_with_logic_constants true
set_fix_multiple_port_nets -all -buffer_constants
set_auto_disable_drc_nets -constant false
set_dont_use < off_limit_cells>
set_prefer - min < hold_fixing_cells>
set_app_var physopt_delete_unloaded_cells false
set_ideal_network [all_fanout -flat -clock_tree]
set_cost_priority {max_transition max_delay}
set_app_var enable_recovery_removal_arcs true
set-max_area 0
set_app_var physopt_power_critical_range < t>
set_app_var physopt_area_critical_range < t>
? ? ? ? 更多的變量和命令設置,可以查看ICC軟件幫助或用戶手冊。