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