本文如果有錯,歡迎留言更正;此外,轉載請標明出處 http://www.cnblogs.com/IClearner/ ,作者:IC_learner
1、基本流程概述
首先給三個圖,一個圖是高層次設計的流程圖:
下面是我對這張圖的理解:
① 設計之前,准備好庫、HDL代碼的思想、約束生成;然后根據設計思想用 RTL 源碼詳細地、完整地為設計建立模型、定義設計中寄存器結構和數目、定義設計中的組合電路功能、定義設計中寄存器時鍾等等的設計規格和實現。
② 完成 RTL 源碼設計之后,應讓設計開發與功能仿真並行進行:
·在設計開發階段,我們使用 DC 來實現特定的設計目標(設計規則和優化約束),以及執行默認選項的初步綜合.
·如果設計開發結果未能在 10%的偏差范圍內滿足時序目標,則需要修正 HDL 代碼,然后重復設計開發和功能驗證的過程.
·在功能仿真中,通過特定的工具來確定設計是否能按如所需的功能工作.
·如果設計未能滿足功能要求, 我們必須修改設計代碼以及重復設計開發和功能仿真. 繼續設計開發和功能仿真直至設計功能正確及滿足小於 10%偏差的時序目標.
③ 使用 DC 完成設計的綜合並滿足設計目標.這個過程包括三個步驟,即綜合=轉化+邏輯優化+映射,首先將 RTL 源代碼轉化為通用的布爾等式,然后設計的約束對電路進行邏輯綜合和優化,使電路能滿足設計的目標或者約束,最后使用目標工藝庫的邏輯單元映射成門
級網表,在將設計綜合成門級網表之后,要驗證此時的設計是否滿足設計目標.如果不能滿足設計目標,此時需要產生及分析報告確定問題及解決問題
④當設計滿足功能、時序以及其他的設計目標的時候,需要執行物理層設計最后分析物理層設計的性能,也就是使用DC的拓撲模式,加入floorplan的物理信息后進行綜合分析設計的性能。如果結果未能滿足設計目標,應返回第三步.如果滿足設計目標,則本部分設計周期完成.
一個圖是DC在設計流程中的位置:
這個圖將上面的流程圖細化,着重與DC的部分,描述了使用DC進行邏輯綜合時要做的事,同時,也是對前面的流程圖解說的圖形概述。在綜合的時候,首先DC的HDL compiler把HDL代碼轉化成DC自帶的GTECH格式,然后DC的library compiler 根據標准設計約束(SDC)文件、IP-DW庫、工藝庫、圖形庫、(使用拓撲模式時,還要加入ICC生成的DEF模式,加載物理布局信息)進行時序優化、數據通路優化、功耗優化(DC的power compiler進行)、測試的綜合優化(DC的DFT compiler),最后得到優化后的網表。
最后一個圖是,使用DC進行基本的邏輯綜合的流程圖與相應的命令:
這個圖給出了使用DC進行邏輯綜合時的基本步驟,我們根據這個圖運行DC,下面是這個圖的具體解說:
①准備設計文件,DC 的設計輸入文件一般為 HDL 文件。
②指定庫文件,需要指定的庫文件包括:
鏈接庫(link library) 、目標庫(target library) 、符號庫(symbol library)、綜合庫(synthetic library)
下面是庫的解釋,具體的解釋在后面有說,這里先進行簡單地概述一下:
Link library & target library
Link library 和 target library 統稱為 technology library(即工藝庫,習慣稱之為綜合庫),technology library 由半導體制造商提供,包含相關 cell 的信息及設計約束標准,其中:
Target library: 在門級優化及映射的時候提供生成網表的 cell,即DC 用於創建實際電路的庫。
Link library: 提供設計網表中的 cell,可以跟target_library使用同一個庫,但是 DC 不用 link library中的 cell 來綜合設計。
當 DC 讀入設計時,它自動讀入由 link library 變量指定的庫。當連接設計時,DC 先搜尋其內存中已經有的庫,然后在搜尋由 link library 指定的庫。
注:當讀入的文件是門級網表時,需要把 link library 指向生成該門級網表的庫文件,否則 DC 因不知道網表中門單元電路的功能而報錯。 關於工藝庫里面的具體內容,后面會專門進行說明。
Symbol library
Symbol library 提供 Design Vision GUI 中設計實現的圖形符號,如果你使用腳本模式而不使用 GUI,此庫可不指定 Symbol library
Synthetic library
即為 Designware library ,名字上翻譯是綜合庫,但卻常稱之為IP庫,而不是直譯。特殊的 Designware library 是需要授權的(比如使用多級流水線的乘法器),默認的標准 Designware 由 DC 軟件商提供,無需指定。
Create_mw_lib :主要使用DC的物理綜合的時候,需要生成物理庫
③讀入設計 :
設計的讀入過程是將設計文件載入內存,並將其轉換為 DC 的中間格式,即GTECH 格式,GTECH 格式由“soft macros” 如 adders, comparators 等組成,這些組件來自 synopsys 的 synthetic lib,每種組件具有多種結構。
讀入設計有兩種實現方法實現方法:read 和 analyze & elaborate(實際上
read 是 analyze 與 elaborate 的打包操作 ),下面介紹二者在使用中的區
別:
從中可以看到,analyze & elaborate 可以自由指定設計庫,並生成 GTECH中間文件前生成.syn 文件存儲於 work 目錄下,便於下次 elaborate 節省時間,我們一般選擇 analyze & elaborate 的方法讀入設計。
④定義設計環境:
定義對象包括工藝參數(溫度、電壓等),I/O 端口屬性(負載、驅動、扇出),
統計 wire-load 模型,設計環境將影響設計綜合及優化結果。
⑤設置設計約束:
設計約束包括設計規則約束和優化約束,設計規則約束(design rule
constraint)由工藝庫決定,在設計編譯過程中必須滿足,用於使電路能按功能要求正常工作。設計優化約束定義了 DC 要達到的時序和面積優化目標,該約束由用戶指定,DC 在不違反設計規則約束的前提下,遵循此約束綜合設計。
⑥選擇編譯策略:
對於層次化設計,DC 中有兩種編譯策略供選擇,分別為 top down 和 bottom
up。在 top down 策略中,頂層設計和子設計在一起編譯,所有的環境和約束設置針對頂層設計,雖然此種策略自動考慮到相關的內部設計,但是此種策略不適合與大型設計,因為 top down 編譯策略中,所以設計必須同時駐內存,硬件資源耗費大。在 bottom up 策略中,子設計單獨約束,當子設計成功編譯后,被設置為 dont_touch 屬性,防止在之后的編譯過程中被修改,所有同層子設計編譯完成后,再編譯之上的父設計,直至頂層設計編譯完成。Bottom up 策略允許大規模設計,因為該策略不需要所有設計同時駐入內存。
⑦編譯:
用 Compile 命令執行綜合與優化過程,還可以利用一些選項指導編譯和優化過程。
⑧分析及解決設計中存在的問題
DC 可以產生一些報告以反應設計的綜合和優化結果,如:時序、面積、約束等報告,這些報告有助於分析和解決設計中存在的問題以改善綜合結果,我們還可以利用 check_design 命令檢驗綜合的設計的一致性。
⑨存儲設計數據
DC 不會自動存儲綜合后的設計結果,因而需要在離開 DC 時手動存儲設計數據。比如存儲網表、延時信息等數據文件。
2、實戰
在這里,我們將實戰一下,做一下實驗,讓大家體驗一下流程:
·首先准備好文件:
這個.synopsys_dc.setup文件(包含了com、dc_setup)、TOP.con文件是需要我們書寫的,這里以及寫好了,我們來看一下就好了。
.synopsys_dc.setup的內容:
然后我們移步到common_setup.tcl和dc_setup.tcl的內容:
common_setup.tcl文件定義了庫的名字和名稱,上面是邏輯庫,下面物理庫:
5行:定義庫的搜索路徑,當找不到庫時,從這個路徑中尋找
8行:定義target library使用的庫(注意,只是定義一個變量)
10行:定義圖形庫變量
15行:定義頂層設計庫的變量名稱
17行:定義milkyway(參考)庫(的位置)
19行:定義工藝庫(的位置)
21行:定義寄生參數庫(的位置)
23行:定義工藝庫和寄生參數庫的映射關系庫(的位置)
dc_setup.tcl的內容:
dc_setup.tcl文件就是指定庫了,而不是單單地定義了,ser_app_var是定義DC內部變量,4~7這是指定搜索路徑個各種庫的路徑和名稱
下面的物理庫設置中:
13行:指定milkyway(參考)庫的名稱
14行:指定當前設計的庫的名稱
16行:創建milkyway庫,格式如圖上面,需要工藝庫、參考、當前設計庫
19行:打開當前的設計庫
20行:加載寄生參數(庫)
·啟動DC
這里是流程演示,因此我們使用圖形化的方式啟動:
design_vision -topo
·讀入設計前的檢查
-->檢查庫是否正確設置:
-->檢查邏輯庫和物理課的一致性:
Check_library
檢查可能不會通過,結果不影響綜合的話,可以忽略
-->檢查寄生參數文件和工藝庫文件的一致性:(物理綜合的時候需要檢查)
check_tlu_plus_files
通過的話會有三個passed
·讀入設計和查看設計
-->讀入設計:
read_file -format verilog ./rtl/TOP.v
用法如下所示:
-->設置當前設計
要綜合哪個模塊,就把哪個模塊設置為當前設計;
查看當前設計:current_design
設置當前設計:current_design TOP
-->link設計
Link設計,查看當前要綜合的設計是否缺少子模塊:
link
返回值是1,說明子模塊完整
-->以ddc的格式保存未映射的設計(注意需要先創建unmapped文件夾):
Write -hierarchy -f ddc -out unmapped/TOP.ddc
我們可以看看write的用法:
-->查看內存中的設計和庫:
帶*的設計為當前設計,要綜合哪個模塊就current_design哪個設計
然后list_libs是查看庫和庫的路徑,這個命令也可以檢查是否讀入了對應的庫
·約束設計(也就是上面流程圖中的各種set)
我們通過執行約束文件來約束設計:
source TOP.con
其他選項我們在后面會敘述,我們這里只說一下5行的reset_design,這個就是剔除之前所有的約束,防止影響下面的約束。
·進行綜合
Compile_ultra(這是在拓撲模式下進行綜合的命令)
·綜合后的檢查(檢查不通過的需要優化,這里只作為一般流程,沒有進行優化)
report_constraint -all (查看是否違規)
report_timing (查看時序報告)
report_are (查看面積情況)
·保存綜合后的設計(注意先創建mapped這個文件夾)
write -hierarchy -format ddc -output ./mapped/TOP.ddc
總結,大概的流程為:
准備好文件 ——>啟動DC ——>讀入設計前的檢查——>讀入設計和查看設計——>約束設計——>綜合——>綜合后檢查(與優化)——>保存優化后的設計