1.1 什么是DC?
DC(Design Compiler)是Synopsys的logical synthesis優(yōu)化工具,它根據(jù)design description和constraints自動(dòng)綜合出一個(gè)優(yōu)化了的門級(jí)電路。它可以接受多種輸入格式,如硬件描述語(yǔ)言、原理圖和netlist等,并產(chǎn)生多種性能報(bào)告,在縮短設(shè)計(jì)時(shí)間的同時(shí)提高讀者設(shè)計(jì)性能。
1.2 DC能接受多少種輸入格式?
支持.db, .v, .vhd , edif, .vgh等等,以及.lib等相關(guān)格式。
1.3 DC提供多少種輸出格式?
提供.db, .v, .vhd, edif, .vgh等,并可以輸出sdc, .sdf等相關(guān)格式文件。
1.4 DC的主要功能或者主要作用是什么?
DC是把HDL描述的電路綜合為跟工藝相關(guān)的門級(jí)電路。并且根據(jù)用戶的設(shè)計(jì)要求,在timing和area,timing和power上取得最佳的效果。在floorplanning和placement和插入時(shí)鐘樹后返 回DC進(jìn)行時(shí)序驗(yàn)證
1.5 如何尋找?guī)椭?/p>
幫助可以用3種求助方式:
1. 使用SOLD,到文檔中尋求答案
2. 在命令行中用man+ DC命令
3. 在命令行中用info+ DC命令
1.6 如何找到SOLD文檔?
SOLD文檔可以在teminal中輸入sold&執(zhí)行。
$》 sold&
或者用命令 which dc_shell找到dc的安裝目錄。找到online目錄。
1.7 如何配置DC?
綜合設(shè)置提供必要的參數(shù)給DC,使工具能夠知道進(jìn)行綜合時(shí)所需要的必要的信息,即重要參數(shù):工藝庫(kù),目標(biāo)庫(kù),標(biāo)志庫(kù)等等。要在.synopsys_dc.setup上設(shè)置好這些參數(shù)。而.synopsys_dc.setup要在三個(gè)目錄下有說(shuō)明,一個(gè)是synopsys的安裝目錄,一個(gè)是用戶文件夾,最后一個(gè)是工程目錄。由后一個(gè)設(shè)置覆蓋前一個(gè)文件。
參數(shù)包括:search_path, target_library, link_library, symbol_library
1.8 target_library 是指什么?
target_library是在synthesis的map時(shí)需要的實(shí)際的工藝庫(kù)
1.9 link_library如何指定?
鏈接時(shí)需要的庫(kù),通常與library相同,設(shè)置時(shí),需要加“*”,表示內(nèi)存中的所有庫(kù)。
1.10 search_path 的設(shè)置?
該參數(shù)指定庫(kù)的存儲(chǔ)位置
1.11 DA 和DC有什么區(qū)別?
DA是 Design Analyzer的簡(jiǎn)稱, 它調(diào)用dc來(lái)進(jìn)行綜合。 但是它是圖形化的。 可以看邏輯電路圖,當(dāng)然需要你的庫(kù)有symbol庫(kù)。
1.12 為什么要使用DA而不用shell接口?
暫時(shí)我也不知道答案
1.13 SOLD是什么?
SOLD是 Synopsys OnLine Document的簡(jiǎn)稱, 基本包括了synopsys公司的所有工具的文檔集合。
1.14. translation這一步是用什么DC命令來(lái)實(shí)現(xiàn)的?
我們知道, DC綜合過(guò)程包括3個(gè)步驟: translation + logic optimization + mapping
transition 對(duì)應(yīng)命令為 read_verilog(read_vhdl,等)
logic optimization 和 mapping 對(duì)應(yīng)于 compile
1.15. 邏輯優(yōu)化和映射(logic optimization + mapping)又是用什么DC命令來(lái)實(shí)現(xiàn)的?
邏輯優(yōu)化和映射均在compile命令完成,但是可以指定使用特殊的優(yōu)化方法:structural 和flatten
1.16. 什么是DC script?
DC script. 是一組dc 命令的集合。 使得綜合可以流程化也易于管理。
1.17. 基于路徑的綜合的意思是什么?
路徑(path),是DC中的一個(gè)重要概念。它包括4種路徑方式:
a. input到FF的data口;
b. FF的clk到另一個(gè)FF的D口;
c. FF的clk到輸出端口DICDER
d. input到output
基于路徑的綜合就是對(duì)這四種路徑進(jìn)行加約束,綜合電路以滿足這些約束條件。
1.18 DC中的各類參數(shù)的單位是如何確定的呢?
參數(shù)的單位由所使用庫(kù)文件決定,在讀入庫(kù)之后,可以用report_lib去看庫(kù)的信息,里邊有詳細(xì)的單位說(shuō)明
1.19 DC中的對(duì)象有哪些?
設(shè)計(jì)變量:一共有八種:Design, cell, reference, port, pin, net, clock, library。其中cell是子設(shè)計(jì)的例化,reference是多個(gè)子設(shè)計(jì)例化的通稱,port是design的輸入輸出,pin是cell的輸入輸出。
1.20 什么叫start point 和 end point?
這兩個(gè)概念是DC中path概念的起始點(diǎn)和終點(diǎn)。
起始點(diǎn)可以是input和FF的clk
終點(diǎn)可以是FF的data和output。
1.21 如何尋找想約束的對(duì)象?
一個(gè)是全部查找包括:all_inputs , all_outputs, all_clocks, all_registers。一個(gè)是根據(jù)關(guān)鍵詞進(jìn)行查找:find_ports(),find(port,’ ‘)。
1.22 什么叫一個(gè)設(shè)計(jì)(design) ?
設(shè)計(jì)是DC中的重要對(duì)象,你所要綜合的東西就叫design,確切或者說(shuō)你所要綜合模塊的top文件。
1.23 什么叫cell ?
在design中,instance的子設(shè)計(jì),稱為cell。
1.24 reference 是指什么? 和cell 有什么區(qū)別?
當(dāng)存在一個(gè)模塊被多次例化,那么該模塊就稱為reference
1.25 如何讀入一個(gè)design?
使用analyze + elaborate 或者 read_verilog, read_vhdl, read_file 命令。
1.26 analyze+ elaborate 和 read 命令有什么區(qū)別?
read_file 是可以讀取任何SYNOPSYS支持格式的;analyze和eloborate只支持verilog和VHDL兩個(gè)格式,但是他們支持在中間過(guò)程中加入?yún)?shù)而且以便以后可以加快讀取過(guò)程。
1.27 如何處理多個(gè)引用的問(wèn)題?
一個(gè)方法是使用uniquify,就是把引用幾次那么就在內(nèi)存中換名引入多個(gè)子設(shè)計(jì),適用于不同時(shí)序約束要求;也可以用dont_touch命令,先對(duì)多個(gè)引用的設(shè)計(jì)進(jìn)行編譯之后,設(shè)置為dont_touch,適用于基本相同的環(huán)境要求;還有一種就是把兩個(gè)引用進(jìn)行flatten,之后進(jìn)行綜合。
1.28 link的作用是什么?
確定所有文件是否均存在并把它們鏈接到當(dāng)前設(shè)計(jì)。
1.29 環(huán)境設(shè)置是指什么?
是指芯片物理上的參數(shù),比如電壓,溫度等。
1.30 如何設(shè)置線載模型?
使用set_wire_model命令
1.31 如何得知線載模型的種類?
讀取庫(kù)文件到DC中,使用report_lib看有多少可用的線載模型
1.32 如何設(shè)置工作環(huán)境變量?
使用set_operating_conditions
1.33 工作環(huán)境變量的類別可以分為哪幾類?
一般可以分為最壞(worst case),典型(typical),最佳(best case)。
1.34 為什么要設(shè)置工作環(huán)境變量?
由于我們要做的是一顆要在實(shí)際環(huán)境中正常工作的芯片,而在不同的溫度和環(huán)境下的電路的性能有很大影響,因此為了近可能地模擬芯片工作,設(shè)置合適的工作環(huán)境信息是非常必要的。
1.35 read 和 analyze + ealborate做了哪些工作?
語(yǔ)法檢查,建立GETECH庫(kù)。值得注意的是,read命令不自動(dòng)執(zhí)行l(wèi)ink操作。
1.36 getech庫(kù)是做何用途的?
GETCH庫(kù)是由軟宏(soft macros)組成的,是加法器,乘法器之類的東西,這些組件都是在DW里引用的。
1.37 調(diào)用getech 庫(kù)中的加法器之后,如何去自己選擇一個(gè)設(shè)計(jì)者需要的加法器?
暫時(shí)沒(méi)有答案
1.38 調(diào)用了加法器之后在優(yōu)化階段還能夠掉換不同的加法器么?
暫時(shí)沒(méi)有答案
1.39 如何檢查script文件中有何錯(cuò)誤呢?
dc_shell -tcl -f
1.40 如果在dc_shell啟動(dòng)后, 想修改庫(kù),怎么辦?
暫時(shí)沒(méi)有答案
1.41 如何在dc_shell環(huán)境下執(zhí)行UNIX命令?
1.42 優(yōu)化分為幾個(gè)層次?
一個(gè)是基于HDL的結(jié)構(gòu)優(yōu)化轉(zhuǎn)化為GETCH結(jié)構(gòu);基于GTECH的邏輯優(yōu)化,包括架構(gòu)(strcuture),打平(flatten),轉(zhuǎn)化為優(yōu)化過(guò)的GETCH;基于GETCH的門級(jí)優(yōu)化,主要作用是映射到實(shí)際的工藝庫(kù)中。
1.43 什么是約束?
約束分為design constraint和optimization constraint。design constraint不由用戶確定,已經(jīng)由所采用的庫(kù)確定了,用戶只能添加進(jìn)一步的約束。optimization constraint分為兩個(gè)方面,timing constraint和area constraint。timing constraint又可分為組合電路的約束,時(shí)序電路的約束以及輸入輸出的約束。
1.44 DC Script支持TCL么?
dcsh和dc-tcl。前者是SYNOPSYS的內(nèi)部語(yǔ)言,后者是TOOL COMMAND language(TCL)。
1.45 綜合時(shí)不想使用某些庫(kù)單元進(jìn)行mapping,怎么辦?
使用set_dont_use 命令
/******** Part 2 Compile stategy **************/
2.1 約束一個(gè)設(shè)計(jì)分為幾個(gè)方面?
總的分為,面積約束和時(shí)序約束。
2.2 面積約束的命令是什么?
set_max_area
2.3 如何對(duì)時(shí)鐘進(jìn)行約束?
對(duì)時(shí)鐘進(jìn)行約束是對(duì)時(shí)鐘的周期,波形進(jìn)行描述。
使用create_clock 建立時(shí)鐘約束
2.4 如何對(duì)pll進(jìn)行約束?
如果存在PLL,那么首先對(duì)輸入的初始時(shí)鐘用create_clock進(jìn)行約束。
再用create_propagated_clock 對(duì)PLL輸出時(shí)鐘在基于輸入時(shí)鐘進(jìn)行約束。
2.5 什么叫虛擬時(shí)鐘約束?
虛擬時(shí)鐘是指在當(dāng)前要綜合的模塊中不存在的物理時(shí)鐘。比如,設(shè)計(jì)外的DFF的時(shí)鐘。
建立這樣的時(shí)鐘有益于描述異步電路間的約束關(guān)系。
2.6 DC可以對(duì)時(shí)鐘的哪些特性進(jìn)行約束?
DC支持對(duì)時(shí)鐘的周期,波形,jitter,skew,latency 描述
2.7 如何約束時(shí)鐘的jitter?
使用set_clock_uncertainty -setup(-hold) 約束時(shí)鐘的jitter
2.8 如何約束時(shí)鐘的skew?
使用set_clock_uncertainty 約束時(shí)鐘網(wǎng)絡(luò)的skew
2.9 如何約束時(shí)鐘的latency?
使用 set_clock_latency -option ,option is source or network,the default is network。
2.10 如何對(duì)當(dāng)前設(shè)計(jì)的端口外部條件進(jìn)行約束?
端口的外部條件包括輸入驅(qū)動(dòng)大小,輸出負(fù)載的大小,扇出大小。
2.11 輸入端口被多大的驅(qū)動(dòng)所驅(qū)動(dòng)?
可以使用set_dirive 和set_driving_cell
2.12 輸出端口要驅(qū)動(dòng)多大的負(fù)載?
使用set_load 對(duì)輸出電容值進(jìn)行約束,單位根據(jù)工藝庫(kù)的define所定。
2.13 DC是基于path的綜合,那么在約束時(shí)如何體現(xiàn)?
我們知道,基于path會(huì)有四種路徑形式,DC中提供
create_clock 定義寄存器和寄存器之間的路徑;
set_input_delay 定義輸入與寄存器之間的路徑;
set_output_delay 定義寄存器與輸出之間的路徑;
set_max_delay和 set_min_delay定義輸入和輸出的組合路徑;
2.14 set_input_delay 的目的是什么?
定義輸入延時(shí),來(lái)約束設(shè)計(jì)中輸入邏輯的時(shí)序
2.15 set_output_delay 的目的是什么?
定義輸出延時(shí),來(lái)約束設(shè)計(jì)中的輸出邏輯的時(shí)序
2.16 如何對(duì)組合電路進(jìn)行約束?
組合電路有set_max_delay 和set_min_delay進(jìn)行約束
2.17 如何對(duì)電路的速度進(jìn)行約束?
采用對(duì)電路時(shí)鐘周期的約束的方式來(lái)約束電路的速度,使用create_clock
2.18 當(dāng)一個(gè)組合電路超過(guò)了時(shí)鐘周期約束,那么該如何處理?
如果必須要滿足時(shí)鐘周期約束,那必須修改設(shè)計(jì),如果不必要嚴(yán)格要求,那么可以set_false_path可以躲過(guò)path check。
2.19 當(dāng)出現(xiàn)環(huán)路電路時(shí),如何約束電路?
對(duì)某一路徑使用set_false_path
2.20 如何加強(qiáng)設(shè)計(jì)規(guī)則的約束?
DRC是電路必須滿足的設(shè)計(jì)規(guī)則,使用
set_max_capcitance
set_max_fanout
set_max_tansition
2.21 在添加了4種路徑約束后,如何為某些路徑移除約束呢?
使用set_flase_path使得某些路徑不進(jìn)行timing check
2.22 對(duì)于某些路徑需要在固定的幾個(gè)周期內(nèi)完成,如何對(duì)這些路徑進(jìn)行約束?
使用set_multicycle_path 對(duì)路徑進(jìn)行約束
2.23 在添加這些特殊的路徑約束,如何恢復(fù)原來(lái)通用的時(shí)序約束?
使用reset_path
2.24 如何對(duì)三態(tài)門進(jìn)行約束?
由于綜合時(shí),默認(rèn)三態(tài)門是enable的,所以對(duì)某些路徑要設(shè)置set_false_path
2.25 如何對(duì)門控時(shí)鐘進(jìn)行約束,以保證功能正常?
對(duì)門控時(shí)鐘電路進(jìn)行setup和hold檢查,使用set_gating_clock_check
2.26 設(shè)置對(duì)某些網(wǎng)絡(luò)比如時(shí)鐘或者復(fù)位不進(jìn)行添加buffer等操作,應(yīng)該怎么約束?
使用set_dont_touch_network
2.27 如何修正hold 時(shí)間沖突?
加入set_fix_hold約束
/************ Part 3 Compile stategy ******************/
3.1 綜合時(shí),有多少選擇綜合策略呢?
可以使用top-down 和bottom-top。
3.2 top-down 方式有何優(yōu)點(diǎn)?
僅需提供單一TOP的script
將設(shè)計(jì)作為一個(gè)整體,可得到較好的結(jié)果
3.3 bottom-up方式有什么優(yōu)點(diǎn)?
對(duì)多時(shí)鐘的綜合更為適合
每個(gè)子模塊都有自己的script,便于管理
當(dāng)一個(gè)模塊改變時(shí),不用重新綜合所有設(shè)計(jì)
3.4 如何進(jìn)行time-budge?
使用characteristic
3.5 top-down 方式有何缺點(diǎn)?
編譯時(shí)間長(zhǎng)
子模塊改變則整個(gè)設(shè)計(jì)都要重新綜合
對(duì)多時(shí)鐘設(shè)計(jì)綜合效果不好
3.6 bottom-up方式有什么缺點(diǎn)?
需要維護(hù)多個(gè)script
3.7 編譯時(shí)的 -incremental 是什么意思?
設(shè)計(jì)映射為門之后,時(shí)序和面積約束可以再定義,incremental確保維持以前的電路結(jié)構(gòu),只作改善時(shí)序和性能,不添加不必要的邏輯。
3.8 。。.
/******* Part 4 Analyze the report ******************/
4.1 如何看面積報(bào)告?
report_area
4.2 如何看時(shí)序報(bào)告?
report_timing
4.3 想對(duì)單獨(dú)的單元看面積報(bào)告, 用什么命令?
report_cell 但是缺省的report_cell只能看current_design下面的一級(jí)的cell的面積。因此就有兩種方法解決這個(gè)問(wèn)題:
1. 用report_cell [get_cells -hier *]可以看所有的cells面積
2. 用list_design列出所有的design, 然后改變current_design到你所想要看的那一級(jí)的cell, 然后直接用report_cell.
4.4 如何看設(shè)計(jì)環(huán)境和線載模型?
report_design
4.5 若設(shè)計(jì)規(guī)則和時(shí)序違反約束,如何查看?
使用report_constraint -all_violators
4.6 如何查看連線的扇入,扇出,負(fù)載,電容和跳變時(shí)間?
使用report_net
4.6 如何看整個(gè)綜合后的網(wǎng)表中使用多少種類型的電路門?
使用report_hierarchy
4.7 如何查看timing exception的時(shí)序約束?
使用report_timing_requirements
/****************** Part 5 Output the result ***********/
評(píng)論
查看更多