DC基本知识问答
1.1 什么是DC?
DC(Design Compiler)是Synopsys公司的logical synthesis工具,它根據design description和design constraints自動綜合出一個優化了的門級電路。它可以接受多種輸入格式,如HDL、Schematics、Netlist等,并能生成多種性能 report,在reducing design time的同時提高了設計的性能。
1.2 DC能接受多少種輸入格式?
支持 .db、.v、.vhd、.edif、.vgh、.lib等,.db一般是廠商的單元庫;.v是veilog的后綴;.vhd是VHDL的后綴;.edif 和 .vhd是兩種形式的netlist。
1.3 DC提供多少種輸出格式?
提供 .db、.v、.vhd、edif、.vgh等,并可以輸出sdc、sdf等相關格式文件。
1.4 DC的主要功能或者主要作用是什么?
DC是把HDL描述的電路綜合為跟工藝相關的門級電路。并且根據用戶的設計要求,在timing、area、power上取得最佳的效果。在floorplanning和placement和插入時鐘樹后返回DC進行時序驗證。
1.5 如何尋找幫助?
幫助可以用3種求助方式:
1. 使用SOLD,到文檔中尋求答案
2. 在命令行中用man+ DC命令(我最喜歡這種)
3. 在命令行中用info+ DC命令
1.6 如何找到SOLD文檔?
SOLD文檔可以在teminal中輸入sold&執行。
$> sold&
或者用命令 which dc_shell找到dc的安裝目錄。找到online目錄。
1.7 如何配置DC?
綜合設置提供必要的參數給DC,使工具能夠知道進行綜合時所需要的必要的信息,如:工藝庫,目標庫,標志庫等等。要 在.synopsys_dc.setup上設置好這些參數。而.synopsys_dc.setup要在三個目錄下有說明,一個是synopsys的安裝 目錄,一個是用戶文件夾,最后一個是工程目錄。由后一個設置覆蓋前一個文件。
具體參數包括:search_path, target_library, link_library, symbol_library
1.8 target_library 是指什么?
target_library是在synthesis的map階段時需要的實際的工藝庫。
1.9 link_library如何指定?
鏈接時需要的庫,通常與library相同,設置時,需要加“*”,表示內存中的所有庫。
1.10 search_path 的設置?
該參數指定庫的存儲位置
1.11 DA 和DC有什么區別?
DA是 Design Analyzer的簡稱,它調用DC來進行綜合,但是它是圖形化的,可以看邏輯電路圖,當然需要你的庫有symbol庫.
1.12 為什么要使用DA而不用shell接口?
這個問題似乎很幼稚,shell接口當然可以用,但我們大部分人已經習慣使用windows這種友好的圖形化界面,恰好DA是圖形化的,非常適合初學者! 不過本人強烈建議使用shell接口的。synopsys的synthesis包括dc_shell(這是synopsys自帶的)和dc_shell -tcl_mode(script命令遵循tcl語法格式)。
1.13 SOLD是什么?
SOLD是 Synopsys OnLine Document的簡稱,基本包括了synopsys公司的所有工具的文檔集合.
1.14. translation這一步是用什么DC命令來實現的?
我們知道,DC綜合過程包括3個步驟:translation + logic optimization + mapping
transition 對應命令為 read_verilog(read_vhdl等)
logic optimization 和 mapping 對應于 compile
1.15. 邏輯優化和映射(logic optimization + mapping)又是用什么DC命令來實現的?
logic optimization 和 mapping 均在compile命令完成,但是可以指定使用特殊的優化方法:structural 和flatten,建議大家在synthesis時同時生成structural 和flatten格式的netlist,然后打開看看到底有什么不同之處。
1.16. 什么是DC script?
DC script 是一組dc 命令的集合,使得綜合可以流程化也易于管理。
1.17. 基于路徑的綜合的意思是什么?
路徑(path),是DC中的一個重要概念。它包括4種路徑方式:
1 input到FF的D端。
2 FF的clk到另一個FF的D端。
3 FF的clk到輸出Q。
4 input到output。
基于路徑的綜合就是對這四種路徑進行加約束,綜合電路以滿足這些約束條件。
1.18 DC中的各類參數的單位是如何確定的呢?
參數的單位由所使用的庫決定,在讀入庫之后,可以用report_lib去看庫的信息,里邊有詳細的單位說明
1.19 DC中的對象有哪些?
設計變量:一共有八種:Design, cell, reference, port, pin, net, clock, library。其中cell是子設計的例化,reference是多個子設計例化的通稱,port是design的輸入輸出,pin是cell的輸入輸 出。
1.20 什么叫start point 和end point?
這兩個概念是DC中path概念的起始點和終點:
1 起始點可以是input和FF的clk
2 終點可以是FF的data和output
這些是timing analyzing基本概念,希望大家結合DC和STA的實際牢牢掌握!
1.21 如何尋找想約束的對象?
一個是全部查找包括:all_inputs , all_outputs, all_clocks, all_registers。
比如:set_input_delay 1.0 all_inputs() :這種寫法針對dc_shell,若是在dc_shell -tcl_mode下,則為
set_input_delay 1.0 [all_inputs]
一個是根據關鍵詞進行查找:[get_ports()] 或表示成 find(port,’ ‘),前者是tcl mode下的寫法!
作為一個IC設計者,在此強烈建議初學者多看SOLD文檔,多多實踐,多多學習TCL、Perl等常用的
腳本語言。
1.22 什么叫一個設計(design) ?
設計是DC中的重要對象,你所要綜合的東西就叫design,確切的說是你所要綜合模塊的top文件。
1.23 什么叫cell 和leaf cell?
在design中,instance的子設計,稱為cell。
沒有子模塊的cell 統稱為leaf cell,我們在定義clock constraint的時候,一般需要把path指到leaf cell。
1.24 reference 是指什么? 和cell 有什么區別?
當存在一個模塊被多次例化,那么該模塊就稱為reference
1.25 如何讀入一個design?
使用analyze + elaborate 或者 read_verilog、read -f verilog、read_vhdl、read_file 命令。
1.26 analyze+ elaborate 和 read 命令有什么區別?
read_file 是可以讀取任何synopsys支持格式的;analyze和eloborate只支持verilog和VHDL兩個格式,但是他們支持在中間過程中加入參數而且以便以后可以加快讀取過程。
1.27 如何處理多個引用的問題?
方法一:使用 uniquify,就是把引用幾次那么就在內存中換名引入多個子設計,適用于不同時序約束
要 求。
方法二:可以用dont_touch命令,先對多個引用的設計進行編譯之后,設置為dont_touch,適用于基
本相同的環境要求。
方法三:把兩個引用進行 flatten(沒有層級結構),然后進行綜合。
1.28 link的作用是什么?
確定所有文件是否均存在并把它們鏈接到當前設計。
1.29 環境設置是指什么?
是指芯片物理上的參數,比如電壓,溫度等。
1.30 如何設置線載模型?
使用set_wire_load_model 命令,
如:set_wire_load_model -name KME -library libr
1.31 如何得知線載模型的種類?
讀取庫文件到DC中,使用report_lib看有多少可用的線載模型
1.32 如何設置工作環境變量?
使用set_operating_conditions
如:set_operating_conditions "WCCOM"
1.33 工作環境變量的類別可以分為哪幾類?
一般可以分為最壞(worst case)、典型(typical)、最佳(best case)。
1.34 為什么要設置工作環境變量?
由于我們要做的是一顆要在實際環境中正常工作的芯片,而溫度和環境對電路的性能有很大影響,因此為了盡可能地模擬芯片工作,設置合適的工作環境信息是非常必要的。
1.35 read 和 analyze + ealborate做了哪些工作?
語法檢查,建立GETECH庫(大家可以自己去搜索什么叫GETECH庫)值得注意的是,read命令不自動執行link操作。
1.36 getech庫是做何用途的?
GETCH庫是由軟宏(soft macros)組成的,是加法器,乘法器之類的東西,這些組件都是在DW里引用的。
1.37 調用getech 庫中的加法器之后,如何去自己選擇一個設計者需要的加法器?
我沒有用過!暫時沒有答案
1.38 調用了加法器之后在優化階段還能夠掉換不同的加法器么?
我沒有試過!暫時沒有答案
1.39 如何檢查script文件中有何錯誤呢?
dc_shell -tcl -f
1.40 如果在dc_shell啟動后, 想修改庫,怎么辦?
摁一下ctrl+c暫停,改完之后繼續運行!
1.41 如何在dc_shell環境下執行UNIX命令?
這個問題很簡單,也很幼稚!在此不作回答!
1.42 優化分為幾個層次?
一個是基于HDL的結構優化轉化為GETCH結構;基于GTECH的邏輯優化,包括架構(strcuture),打平(flatten),轉化為優化過的GETCH;基于GETCH的門級優化,主要作用是映射到實際的工藝庫中。
1.43 什么是約束?
約束分為design constraint和optimization constraint。design constraint不由用戶確定,已經由所采用的庫確定了,用戶只能添加進一步的約束。optimization constraint分為兩個方面,timing constraint和area constraint。timing constraint又可分為組合電路的約束,時序電路的約束以及輸入輸出的約束。
1.44 DC Script支持TCL么?
支持,synopsys支持dc_shell 和dc_shell -tcl_mode。前者是SYNOPSYS的內部語言,后者遵循tcl語法。
1.45 綜合時不想使用某些庫單元進行mapping,怎么辦?
使用set_dont_use 命令
/******** Part 2 Compile stategy **************/
2.1 約束一個設計分為幾個方面?
總的分為:area constraint 和 timing constraint。
2.2 面積約束的命令是什么?
set_max_area
2.3 如何對時鐘進行約束?
描述一個clock包含兩個因素:頻率和相位。
使用create_clock 建立時鐘constraint。
如:create_clock -name clk200 -period 5 -waveform {0 ,2.5} find(pin, "armpll_wrapper_x/g_reg/Q")
2.4 如何對pll進行約束?
如果存在PLL,那么首先對輸入的初始時鐘用create_clock進行約束。
再用create_propagated_clock 對PLL輸出時鐘在基于輸入時鐘進行約束,或者直接用create_clock,
兩者的clock path 都得來自leaf cell
2.5 什么叫虛擬時鐘約束?
虛擬時鐘是指在當前要綜合的模塊中不存在的物理時鐘。比如,設計外的DFF的時鐘。
建立這樣的時鐘有益于描述異步電路間的約束關系,不過本人在實際工作中基本不設置!
2.6 DC可以對時鐘的哪些特性進行約束?
DC支持對時鐘的T,waveform,jitter,skew,latency 描述,請大家務必搞清楚jitter和skew得區別,
latency有多種,如果你正在做timing 分析工作,那么問一下自己:latency、jitter、skew等這些因素已經
搞明白了嗎?
2.7 如何約束時鐘的jitter?
使用set_clock_uncertainty -setup(-hold) 約束時鐘的jitter
2.8 如何約束時鐘的skew?
使用set_clock_uncertainty 約束時鐘網絡的skew
2.9 如何約束時鐘的latency?
使用 set_clock_latency -option ,option is source or network,the default is network。
2.10 如何對當前設計的端口外部條件進行約束?
端口的外部條件包括:輸入驅動大小,輸出負載的大小,扇出大小。
2.11 輸入端口被多大的驅動所驅動?
可以使用set_dirive 和set_driving_cell,或者用set_input_transition,注意這三者區別!
2.12 輸出端口要驅動多大的負載?
使用set_load 對輸出電容值進行約束,單位根據工藝庫的define所定。
2.13 DC是基于path的綜合,那么在約束時如何體現?
我們知道,基于path會有四種路徑形式,DC中提供
create_clock 定義寄存器和寄存器之間的路徑;
set_input_delay 定義輸入與寄存器之間的路徑;
set_output_delay 定義寄存器與輸出之間的路徑;
set_max_delay和 set_min_delay定義輸入和輸出的組合路徑;
2.14 set_input_delay 的目的是什么?
定義輸入延時,來約束設計中輸入邏輯的時序
2.15 set_output_delay 的目的是什么?
定義輸出延時,來約束設計中的輸出邏輯的時序
2.16 如何對組合電路進行約束?
組合電路有set_max_delay和set_min_delay進行約束
2.17 如何對電路的速度進行約束?
使用create_clock
2.18 當一個組合電路超過了時鐘周期約束,那么該如何處理?
加上set_max_delay重新約束,這樣綜合工具就會按照set_max_delay的值盡量滿足要求,不過這樣會增加design的area,如果timing還是不能滿足,那只能修改設計。
2.19 當出現環路電路時,如何約束電路?
對某一路徑使用set_false_path
2.20 如何加強設計規則的約束?
DRC是電路必須滿足的設計規則,使用
set_max_capcitance
set_max_fanout
set_max_tansition
2.21 在添加了4種路徑約束后,那么在synthesis時如何為某些path移除約束,不作timing分析?
使用set_flase_path使得某些路徑不進行timing check
2.22 對于某些路徑需要在固定的幾個周期內完成,如何對這些路徑進行約束?
使用set_multicycle_path 對路徑進行約束
2.23 在添加這些特殊的路徑約束,如何恢復原來通用的時序約束?
使用reset_path
2.24 如何對三態門進行約束?
由于綜合時,默認三態門是enable的,所以對某些路徑要設置set_false_path
2.25 如何對門控時鐘進行約束,以保證功能正常?
對門控時鐘電路進行setup和hold檢查,使用set_gating_clock_check
2.26 設置對某些網絡比如clock或者reset不進行添加buffer等操作,應該怎么約束?
使用set_dont_touch_network,請注意和set_dont_touch用法的區別
2.27 如何修正hold 時間沖突?
加入set_fix_hold約束,這步約束在front-end遇到時一般不考慮,留給back-end公司處理!
/************ Part 3 Compile stategy ******************/
3.1 綜合時,有多少選擇綜合策略呢?
可以使用top-down 和bottom-top。
3.2 top-down 方式有何優點?
僅需提供單一TOP的script
將設計作為一個整體,可得到較好的結果
3.3 bottom-up方式有什么優點?
對多時鐘的綜合更為適合
每個子模塊都有自己的script,便于管理
當一個模塊改變時,不用重新綜合所有設計
3.4 如何進行time-budge?
使用characteristic
3.5 top-down 方式有何缺點?
編譯時間長
子模塊改變則整個設計都要重新綜合
對多時鐘設計綜合效果不好
3.6 bottom-up方式有什么缺點?
需要維護多個script
3.7 編譯時的 -incremental 是什么意思?
設計映射為門之后,時序和面積約束可以再定義,incremental確保維持以前的電路結構,只作改善時序和性能,不添加不必要的邏輯。
3.8 ...
/******* Part 4 Analyze the report ******************/
4.1 如何看面積報告?
report_area
4.2 如何看時序報告?
report_timing,詳細請man report_timing 這個命令,看看它的多種option用法
4.3 想對單獨的單元看面積報告, 用什么命令?
report_cell 但是缺省的report_cell只能看current_design下面的一級的cell的面積,因此就有兩種方法解決這個問題:
1. 用report_cell [get_cells -hier *]可以看所有的cells面積
2. 用list_design列出所有的design, 然后改變current_design到你所想要看的那一級的cell, 然后直接用report_cell.
4.4 如何看設計環境和線載模型?
report_design
4.5 若設計規則和時序違反約束,如何查看?
使用report_constraint -all_violators
4.6 如何查看連線的扇入,扇出,負載,電容和跳變時間?
使用report_net
4.6 如何看整個綜合后的網表中使用多少種類型的電路門?
使用report_hierarchy
4.7 如何查看timing exception的時序約束?
使用report_timing_requirements,請大家思考一下有哪些timing exceptions
總結
- 上一篇: Animate.css
- 下一篇: centos关机重启命令