DC將綜合分成三個步驟:translation + mapping + optimization。
Translation是指把設計的HDL描述轉化為GTECH庫元件組成的邏輯電路;
Mapping是指將GTECH庫元件映射到某一特定的半導體工藝庫上,此時的電路網表包含了相關的工藝參數。
Optimization是根據設計者設定的時延、面積、線負載模型等綜合約束條件對電路網表進一步優化的過程。
1.read_design的幾種方式
- read_file:對指定filelist進行分析(analysis)並且執行translate到GTECH的過程
- -autoread 自動分析filelist的文件的先后順序關系,根據 -top指定的name設置綜合頂層,不選用的話默認第一個file是頂層
- -param 指定top的頂層參數 eg,-param “p_xx=>1,p_xxx=>2”
- -format/-f 指定filelist的文件類型,一般有verilog、vhdl、sverilog、ddc、db等選項
- -define 指定宏
- analyze + elaborate
- analyze對file進行預編譯,尋找代碼錯誤等信息,這個過程中可以加入-format -define -autoread等
- alaborate執行translate過程,可以加入-param等
2.link
mapping的過程,將GTECH庫文件映射到具體的工藝庫。
搜索library的順序為:local_link library --> link library --> search_path,先找到哪個用哪個,沒找到報warning,重復報warning
tips:DC中有好幾個library的設置,一個是set_synthetic_library/set_target_library,這兩個主要用於compile階段的library的指定,也就是
指定在compile_ultra,不涉及具體的mapping過程,真正對應到工藝庫信息的是set_link_library,set_link_library可以
指定多個工藝庫信息,位於前面的優先被找到,所以一般類似於PAD,PHY,USB等library放在前面,再放置具體工藝庫信息。
1、目標庫(targe_library):一般就是std cell db;放的是標准單元工藝庫; 是你的綜合目的庫,存放的是你索要映射的邏輯單元。一般為standard cell library & io cell library 的type;是DC在mapping時將設計映射到特定工藝所使用的庫,就是使用目標庫中的元件綜合成設計的門級網表。 2、連接庫(link_library):指定壓焊塊工藝庫名稱和所有其他的宏單元(RAM、ROM等);除了std cell,還有IO ,MACRO ,MEMORY db;一般為宏單元等其他庫;一般可以放算法庫和設計庫等,比如DW;是提供門級網表實例化的基本單元,也就是門級網表實例化的元件或單元都來自該庫。連接庫定義為標准單元的db格式的庫文件加上pad db格式的庫文件,加上ROM,RAM等宏單元庫文件。 3、符號庫(symblo_library):包含工藝庫中的單元圖形表示的庫名稱。使用DV時,用於表示門電路原理圖。如果忽略這一設置,DV會使用一個名為“generic.sdb”的通用符號庫來生成原理圖。如果你設置了symbol_library,但是假如你的單元的工藝庫和符號庫不匹配,DV會拒絕你的符號庫,而調用通用庫中的單元符號。 4、簡單地講,所有用到的庫都要放到link_library,因為DC自動到那里去找。只有作綜合用的庫放在target_library,象ROM,PAD等不用synthesis的就不要放進去了。 5、link_library列表中應包含目標庫名,這在DC中讀取門級網表是很重要的。如果連接庫列表中不包含目標庫名,DC就不能連接網表中已經映射的單元,在這種情況下,DC會生成表示其不能解析網表中單元的警告。 6、link_library可以包含舊的工藝庫名稱,而target_library可以包含新的工藝庫名稱。 7、簡單來說link library就是解決實例化引用的,如果實例化的就是一個與非門,DC就從target library中找到,如果例化的是一個fifo,DC就從fifo的庫中找到,如果例化的是一個模塊,DC就從內存中找到,因為這個模塊的代碼在編譯過程中已經讀進內存中去了。 8、pt和fm工具只有link_library,DC使用變量link_library,而PT使用link_path,除了名稱和格式不一樣之外,這兩個變量的應用時相同的。PT是一個門級靜態時序分析器,它只是用於結構化門級網表,因而,PT不使用變量target_library。
3.compile_ultra/compile
執行具體的綜合過程,compile_ultra相對於compile對timing分析更加嚴格,performance會更好,compile更加均衡。一般都用compile_ultra在IP的使用。
具體選項man一下就能看到,比較實用的有-no_boundary_optimization
4.uniquify
有的時候一個reference被實例化成多份,使用這個讓工具顯式將這多個實例化成不同的名字