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