DC簡明教程

1.1 什麼是DC?
      DC(Design Compiler)是Synopsys的logical synthesis優化工具,它根據design description和constraints自動綜合出一個優化了的門級電路。它可以接受多種輸入格式,如硬件描述語言、原理圖和netlist等,併產生多種性能報告,在縮短設計時間的同時提高讀者設計性能。

1.2 DC能接受多少種輸入格式?
     支持.db, .v, .vhd , edif, .vgh等等,以及.lib等相關格式。

1.3 DC提供多少種輸出格式?

     提供.db, .v, .vhd, edif, .vgh等,並可以輸出sdc, .sdf等相關格式文件。


1.4 DC的主要功能或者主要作用是什麼?

     DC是把HDL描述的電路綜合爲跟工藝相關的門級電路。並且根據用戶的設計要求,在timing和area,timing和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接口?

    暫時我也不知道答案


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命令來實現的?
    邏輯優化和映射均在compile命令完成,但是可以指定使用特殊的優化方法:structural 和flatten

1.16. 什麼是DC script?
    DC script 是一組dc 命令的集合. 使得綜合可以流程化也易於管理.

1.17. 基於路徑的綜合的意思是什麼?
    路徑(path),是DC中的一個重要概念。它包括4種路徑方式:
    a. input到FF的data口;
    b. FF的clk到另一個FF的D口;
    c. FF的clk到輸出端口DICDER
    d. 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概念的起始點和終點。
    起始點可以是input和FF的clk
    終點可以是FF的data和output。

1.21 如何尋找想約束的對象?
    一個是全部查找包括:all_inputs , all_outputs, all_clocks, all_registers。一個是根據關鍵詞進行查找:find_ports(),find(port,’ ‘)。

1.22 什麼叫一個設計(design) ?
   設計是DC中的重要對象,你所要綜合的東西就叫design,確切或者說你所要綜合模塊的top文件。

1.23 什麼叫cell ?
   在design中,instance的子設計,稱爲cell。

1.24 reference 是指什麼? 和cell 有什麼區別?
    當存在一個模塊被多次例化,那麼該模塊就稱爲reference

1.25 如何讀入一個design?
    使用analyze + elaborate 或者 read_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_model命令

1.31 如何得知線載模型的種類?
    讀取庫文件到DC中,使用report_lib看有多少可用的線載模型

1.32 如何設置工作環境變量?
    使用set_operating_conditions

1.33 工作環境變量的類別可以分爲哪幾類?
    一般可以分爲最壞(worst case),典型(typical),最佳(best case)。

1.34 爲什麼要設置工作環境變量?
    由於我們要做的是一顆要在實際環境中正常工作的芯片,而在不同的溫度和環境下的電路的性能有很大影響,因此爲了近可能地模擬芯片工作,設置合適的工作環境信息是非常必要的。

1.35 read 和 analyze + ealborate做了哪些工作?
語法檢查,建立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啓動後, 想修改庫,怎麼辦?
   暫時沒有答案

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麼?
dcsh和dc-tcl。前者是SYNOPSYS的內部語言,後者是TOOL COMMAND language(TCL)。

1.45 綜合時不想使用某些庫單元進行mapping,怎麼辦?
使用set_dont_use 命令

/******** Part 2 Compile stategy **************/

2.1 約束一個設計分爲幾個方面? 
     總的分爲,面積約束和時序約束。

2.2 面積約束的命令是什麼?
     set_max_area

2.3 如何對時鐘進行約束?
     對時鐘進行約束是對時鐘的週期,波形進行描述。 
     使用create_clock 建立時鐘約束

2.4 如何對pll進行約束? 
     如果存在PLL,那麼首先對輸入的初始時鐘用create_clock進行約束。 
     再用create_propagated_clock 對PLL輸出時鐘在基於輸入時鐘進行約束。

2.5 什麼叫虛擬時鐘約束? 
   虛擬時鐘是指在當前要綜合的模塊中不存在的物理時鐘。比如,設計外的DFF的時鐘。
    建立這樣的時鐘有益於描述異步電路間的約束關係。

2.6 DC可以對時鐘的哪些特性進行約束?
    DC支持對時鐘的週期,波形,jitter,skew,latency 描述

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

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_false_path可以躲過path check。

2.19 當出現環路電路時,如何約束電路?
    對某一路徑使用set_false_path

2.20 如何加強設計規則的約束?
    DRC是電路必須滿足的設計規則,使用
    set_max_capcitance 
    set_max_fanout
    set_max_tansition

2.21 在添加了4種路徑約束後,如何爲某些路徑移除約束呢?
    使用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 設置對某些網絡比如時鐘或者復位不進行添加buffer等操作,應該怎麼約束?

   使用set_dont_touch_network


2.27 如何修正hold 時間衝突?
   加入set_fix_hold約束

/************ 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確保維持以前的電路結構,只作改善時序和性能,不添加不必要的邏輯。

/******* Part 4 Analyze the report ******************/

4.1 如何看面積報告?
    report_area

4.2 如何看時序報告?
    report_timing

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

/****************** Part 5 Output the result ***********/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章