-
7、Design Compiler 13講,還有一個基本上很類似的專欄:https://www.cnblogs.com/xh13dream/tag/DC/,也可以參考。
Design Compiler 13講中的部分內容:
Tcl與Design Compiler (二)——DC綜合與Tcl語法結構概述
1、邏輯綜合的概述
- DC工作流程分為三步
2、DC的三種啟動方式
-
GUI
-
dc_shell
-
Batch mode
3、DC-Tcl語言的基本結構
Tcl與Design Compiler (三)——DC綜合的流程
1、高層次設計的流程圖
2、DC在設計流程中的位置
3、使用DC進行基本的邏輯綜合的流程圖與相應的命令
①准備設計文件
②指定庫文件
③讀入設計
④定義設計環境
⑤設置設計約束
⑥選擇編譯策略
⑦編譯
⑧分析及解決設計中存在的問題
⑨存儲設計數據
Tcl與Design Compiler (四)——DC啟動環境的設置
(1)啟動環境配置簡述
(2).synopsys_dc.setup配置文件的書寫
(3).synopsys_dc.setup的講解
Tcl與Design Compiler (五)——綜合庫(時序庫)和DC的設計對象
(1)標准單元庫
-
①概述
一個ASIC綜合庫包括如下信息:
·一系列單元(包括單元的引腳)。
·每個單元的面積(在深亞微米中,一般用平方微米表示,在亞微米工藝下,一般用門來稱呼,至於具體的單位,可以咨詢半導體制造商)。
·每個輸出引腳的邏輯功能。
·每個輸入到輸出的傳遞延時,輸出到輸出的傳遞延時;inout到輸出的傳遞延時。
-
②內容與結構
Synopsys的工藝庫是一個.lib文件,經過LC編譯后,產生.db文件。工藝庫文件主要包括如下信息:
·單元(cell)(的信息):(主要有)功能、時間(包括時序器件的約束,如建立和保持)、面積(面積的單位不在里面定義,可按照規律理解,一般詢問半導體廠商)、功耗、測試等。
·連線負載模型(wire load models):電阻、電容、面積。
·工作環境/條件(Operating conditions):制程(process)(電壓和溫度的比例因數k,表示不同的環境之間,各參數縮放的比例)
·設計規則約束(Design ):最大最小電容、最大最小轉換時間、最大最小扇出。
工藝庫的結構如下所示:
(2)DC的設計對象
-
在了解了綜合庫之后,下面介紹一下DC的設計對象,雖然這個設計對象相對於綜合庫沒有那么重要,但是還是要了解一下的。
對於一個verilog代碼模塊,我們知道這是一個模塊的名字是什么,這個模塊的功能是什么,這個模塊有哪些端口等等信息。但是對於DC來說,它不想我們那么理解,給它一個verilog模塊,它把這個模塊的內容當做設計對象(簡稱對象)來看。DC支持的對象和解釋如下所示:
DC支持8中設計對象:
Design :具有某種或多種邏輯功能的電路描述;
Cell :設計的 instance;
Reference :cell 或 instance 在庫中定義的名字;
Port :design 的輸入、輸出;
Pin :design 中 cell 的輸入、輸出;
Net :ports 和 pins 之間或 pins 之間的信號名;
Clock :被定義為時鍾源的 pin 或 port;
Library :cell 的集合,如: starget_library,link_library;
(3)Design Ware 庫
- DesignWare是Synopsys提供的知識產權(Intellectual Property,簡稱IP)庫。IP庫分成可綜合IP庫(synthesizable IP,SIP) ,驗證IP庫(Verification IP,VIP)和生產廠家庫(foundry 1ibraries)。IP庫中包含了各種不同類型的器件。這些器件可以用來設計和驗證ASIC, SoC和FPGA。
Tcl與Design Compiler (六)——基本的時序路徑約束
1、時序路徑與關鍵路徑
2、常見的時序路徑約束
- 建立時間、保存時間和亞穩態
- 時鍾的約束(寄存器-寄存器之間的路徑約束)
- 輸入延時的約束
- 輸出延時的約束
- 組合邏輯的約束
Tcl與Design Compiler (七)——環境、設計規則和面積約束
1、工作環境屬性約束
- 設置環境條件(set_operating_conditions)
- 設置線負載模型(set_wire_load_model)
- 設置驅動強度(set_drive與set_driving_cell)
- 設置電容負載(set_load與set_load load of)
2、設置設計規則約束
-
最大電容(max_capacitance)
-
最大轉換時間(max_transition)
-
最大扇出(max_fanout)
3、面積約束
Tcl與Design Compiler (八)——DC的邏輯綜合與優化
1、DC的邏輯綜合及優化過程
主要包括:
- 第一階段的結構級的優化(Architectural-Level Optimization)
- 第二階段的邏輯級優化(Logic-Level Optimization)
- 最后階段的門級優化(Gate-Level Optimization)
2、時序優化及方法
-
(1)當違規得比較嚴重時,也就是時序的違規(timing violation)在時鍾周期的25%以上時,就需要重新修改RTL代碼了。
-
(2)時序違規在25%以下,有下面的時序優化方法:
①使用compile_ultra命令(在拓撲模式下運行)
compile_ultra命令包含了以時間為中心的優化算法,在編譯過程中使用的算法有:
- A 以時間為驅動的高級優化(Timing driven high-level optimization);
- B 為算術運算選擇適當的宏單元結構;
-
- C 從DesignWare庫中選擇最好的數據通路實現電路;
- D 映射寬扇入(Wide-fanin)門以減少邏輯級數;
- E 積極地使用邏輯復制進行負載隔離;
- F 在關鍵路徑自動取消層次划分(Auto-ungrouping of hierarchies)。
- set_dont_retime
- set_optimize_registers -design Pipeline
②使用compile -scan -inc 命令
③使用自定義路徑組合、關鍵范圍
Design Compiler中,常用report_timing命令來報告設計的時序是否滿足目標。執行report_timing命令時,DC做4個步驟:
- 把設計分解成單獨的時間組;
- 每條路徑計算兩次延遲,一次起點為上升沿,另一次起點為下降沿;
- 在每個路徑組里找出關鍵路徑(critical path),即延遲最大的路徑;
- 顯示每個時間組的時間報告。
DC的默認行為是對關鍵路徑作優化。當它不能為關鍵路徑找到一個更好的優化解決方案時,綜合過程就停止。DC不會對**次關鍵路徑(Sub-critical paths)**作進一步的優化。因此,如果關鍵路徑不能滿足時序的要求,違反時間的約束,次關鍵路徑也不會被優化,它們僅僅被映射到工藝庫。
使用自定義路徑組合后,綜合時,工具只對一個路徑組的最差(延時最長)的路徑作獨立的優化,但並不阻礙另外自定義路徑組的路徑優化。產生自定義路徑組也可以幫助綜合器在做時序分析時采用各自擊破(divide-and-conquer)的策略,因為report_timing命令分別報告每個時序路徑組的時序路徑。
自定義路徑組: 用戶自定義路徑組后,如果設計的總性能有改善,DC允許以犧牲一個路徑組的路徑時序(時序變差)為代價,而使另一個路徑組的路徑時序有改善。在設計中加入一個路徑組可能會使時序最差的路徑時序變得更差。
關鍵范圍: 關鍵范圍不允許因為改進次關鍵路徑的時序而使同一個路徑組的關鍵路徑時序變得更差。如果設計中有多個路徑組,我們只對其中的一個路徑組設置了關鍵范圍,而不是對整個設計中的所有路徑組都設置了關鍵范圍,DC只會並行地對幾條路徑優化,運行時間不會增加很多。
④重新划分模塊(Repartition Block)
Tcl與Design Compiler (九)——綜合后的形式驗證
1、准備好RTL文件、綜合優化后的文件以及帶有優化映射信息的SVF文件:
2、書寫相應地流程文件:
3、執行我們寫的腳本
得到結果如下,說明驗證通過了:
Tcl與Design Compiler (十二)——綜合后處理
1、概述
-
.sdc文件:標准延時約束文件
-
Scan_def.def文件:DFT、形式驗證可能用到
-
.sdf、.v文件:標准延時格式和網表格式文件,用於后仿真
2、綜合網表處理與生成
-
(1)綜合網表的處理:
-
(2)相關文件的生成
3、時序檢查與報告的生成
-
(1)時序報告的查看:
第一部分是路徑信息部分
第二部分是路徑延遲部分
第三部分是路徑要求部分
第四部分是時間總結部分
-
(2)timing_report的選項與debug
-
(3)設計違規檢查
-
(4)查看分組優化結果
2、綜合網表處理與生成
-
(1)綜合網表的處理:
-
(2)相關文件的生成
3、時序檢查與報告的生成
-
(1)時序報告的查看:
第一部分是路徑信息部分
第二部分是路徑延遲部分
第三部分是路徑要求部分
第四部分是時間總結部分
-
(2)timing_report的選項與debug
-
(3)設計違規檢查
-
(4)查看分組優化結果