DC(Design Compile)如何使用

Design Compile 是 synopsys 的綜合軟件,它的功能是把 RTL 級的代碼轉化爲門級網表。
綜合包括:

  • 轉譯(translation),在轉譯的過程中,軟件自動將源代碼翻譯成每條語句所對應的功能模塊以及模塊之間的拓撲結構,這一過程是在綜合器內部生成電路的布爾函數的表達,不做任何的邏輯重組和優化。
  • 優化(Opitimization),基於所施加的一定時序和麪積的約束條件,綜合器按照一定的算法對轉譯結果作邏輯優化和重組。
  • 映射(Mapping),在映射過程中,根據所施加的一定的時序和麪積的約束條件,綜合器從目標工藝庫中搜索符
    合條件的單元來構成實際電路。
    在這裏插入圖片描述
    DC有兩種界面:
    (1)圖形界面,通過design vision&調用出來
    (2)命令行界面,通過dc_shell-t調用

因爲門級和代碼級不同,代碼級考慮的是理想情況,但是實際電路不是這樣的,它有門級的延時,線的延時,信號的轉換時間,甚至時鐘信號到達各個觸發器的時間不相等。基於這些考慮, DC 通過施加約束,模擬實際環境,根據實際情況得出門級網表。 因此如何適當的施加約束是 DC 的關鍵所在。

(二)庫的配置
DC所用的工藝庫是.db或者.lib格式的,其中.lib 格式的文件是可讀得,通過此文件可以瞭解庫的詳細信息,比如說工作電壓,操作溫度,工藝偏差等等。 .db 格式的庫是二進制的,不可讀。 .db 格式的庫由.lib 格式的庫通過命令 read_lib 生成。

1、目標工藝庫(Target_library)
是指將 RTL 級的 HDL 描述到門級時所需的標準單元綜合庫,它是由芯片製造商(Foundry)提供的,包含了物理信息的單元模型。一般有:與非,或非,非門等基本的邏輯單元;還有選擇器,與或非,或與非等較複雜的組合邏輯,以及鎖存器 (LATCH)和觸發器(DFF)等時序邏輯單元。
在這裏插入圖片描述
2、鏈接庫(link_library)
鏈接庫可以是同 target_library 一樣的單元庫,或者是已綜合到門級的底層模塊設計,其作用如下:在由下而上的綜合過程中,上一層的設計調用底層已綜合模塊時,將從 link_library中尋找並鏈接起來(設置裏面不僅有Target library,還有其他東西,例如IP核)。
在這裏插入圖片描述
如果需要將已有的設計從一個工藝 A 轉到另一個工藝 B 時,可以將當前單元綜合庫 A 設爲link_library,而將單元綜合庫 B 設爲 target_library,重新映射一下即可

3、符號庫(symbol_library)
顯示電路時,用於標識器件,單元的符號庫
在這裏插入圖片描述
在這裏插入圖片描述
搜尋路徑(search_path)(包括綜合庫和設計文件)
在這裏插入圖片描述
setup文件:一般包含初始化參數變量、設計工藝庫名稱及路徑等相關內容

分析工藝庫,得出相關信息
芯片供應商提供的庫通常有 max,type,min 三種類型,代表操作環境爲最壞(worst),典型(type),最好(best)三種情況。芯片的操作環境包括:操作溫度,供電電壓,製造工藝偏差和RC 樹模型。
導線負載模型(導線也具有電阻和電容,也會有延時)
庫裏面對每個單元都有描述,比如該單元的功能,時間,面積等等。除此之外,對於單元的每個引腳還提供有設計規則約束(DRC), 這些值由設計工藝決定,只有滿足這些條件的單元在運行時纔會操作正常,因此在設計中有很高的權重。
延時計算最常見的是 CMOS 非線性查找表模型。

工藝庫文件的配置放在三個地方,A:軟件安裝目錄$SYNOPSYS/admin/setup。B:~user,用戶安裝目錄。C:DC startup directory前兩個目錄是早已配置好,最好不要動的;第三個目錄放在工作目錄下的隱藏目錄:.synopsys_dc.setup,通過ls -al才能看到此文件。

時序約束的基本知識:
約束對象:
在這裏插入圖片描述
靜態時序分析:
不需要使用動態仿真,提取整個電路的所有時序路徑,通過計算信號沿在路徑上的延遲傳播,找出違背時序約束的主要錯誤。用於檢查建立時間和保持時間是否滿足時序要求。
與動態仿真相比,靜態時序分析具有耗時短,不需要加激勵,所耗資源小,可以窮盡所有路徑等優點。但是靜態時序分析存在的問題在於不瞭解電路的動態行爲,並且受到僞路徑的困擾,因此目前只用於同步電路。

1、建立時間(setup time):數據在時鐘信號源到達之前必須要穩定的時間
2、保持時間(hold time):數據在時鐘信號源到達之後必須要穩定的時間
3、基本單元的延時(Td):對於所有的電路,電信號通過都需要時間,這在邏輯電路中反映爲信號的延時,在時序邏輯單元中,反映爲從時鐘沿開始,到數據輸出需要的時間。
4、連線的延時:信號除了在基本單元中有延時,在連線中也有延時,因爲連線也有電容電阻

邏輯綜合的概述
對於ASIC,使用DC工具;對於FPGA,使用ISE,QUARTUS都可
(1)Translation
主要把描述RTL級的HDL語言,在約束下轉換成DC內部的同意用門級描述的電路,以GTECH或者沒有映射的ddc形式展現
(2)logic optimization
邏輯優化,就是把統一用門級描述的電路進行優化,例如把路徑調整一下,門改一下
(3)Gate mapping
門級映射,DC用工藝庫把電路給映射出來,得到一個ddc文件;包括映射的門電路信息與網表,.v格式的網表,延時信息(sdf),工作約束(sdc);.ddc這個包含的網表文件是實際意義的網表文件,而.v這個形式的網表是用來做後仿真的文件。

求延遲的方式:
(1)線負載模式:將負載等效成RC模型,得到延遲信息;但延遲包括互連線延遲和基本單元延遲,所以有誤差
(2)拓撲模式:在DC綜合中通過物理庫,預佈局吐出腳本約束,得到延遲信息。

綜合目標:area,delay(性能)的trade off
在這裏插入圖片描述
一般有兩種文件,後綴名爲lib(人看,可轉化爲db文件)和db(工具讀)
例如:
set target_library 22nm.db

set_app_var target_library 22nm.db #對於DC內部原變量,最好使用第二種方法,set_app_var會檢查變量拼寫是否爲內部變量,若拼寫錯誤,則出現error。

(1)準備設計文件,DC 的設計輸入文件一般爲 HDL 文件
(2)指定庫文件
(3)讀入設計:設計的讀入過程是將設計文件載入內存,並將其轉換爲 DC 的中間格式,即GTECH 格式,GTECH 格式由“soft macros” 如 adders, comparators 等組成,這些組件來自 synopsys 的 synthetic lib,每種組件具有多種結構。
(4)定義設計環境: 定義對象包括工藝參數(溫度、電壓等),I/O 端口屬性(負載、驅動、扇出), 統計 wire-load 模型,設計環境將影響設計綜合及優化結果。
(5)設置設計約束:設計約束包括設計規則約束和優化約束,設計規則約束(design rule constraint)由工藝庫決定,在設計編譯過程中必須滿足,用於使電路能按功能要求正常工作。設計優化約束定義了 DC 要達到的時序和麪積優化目標,該約束由用戶指定,DC 在不違反設計規則約束的前提下,遵循此約束綜合設計。
(6)選擇編譯策略:
對於層次化設計,DC 中有兩種編譯策略供選擇,分別爲 top down 和 bottom up。在 top down 策略中,頂層設計和子設計在一起編譯,所有的環境和約束設置針對頂層設計,雖然此種策略自動考慮到相關的內部設計,但是此種策略不適合與大型設計,因爲 top down 編譯策略中,所以設計必須同時駐內存,硬件資源耗費大。在 bottom up 策略中,子設計單獨約束,當子設計成功編譯後,被設置爲 dont_touch 屬性,防止在之後的編譯過程中被修改,所有同層子設計編譯完成後,再編譯之上的父設計,直至頂層設計編譯完成。Bottom up 策略允許大規模設計,因爲該策略不需要所有設計同時駐入內存。
(7)編譯:
用 Compile 命令執行綜合與優化過程,還可以利用一些選項指導編譯和優化過程。
(8)分析及解決設計中存在的問題 :
DC可以產生一些報告以反應設計的綜合和優化結果,如:時序、面積、約束等報告,這些報告有助於分析和解決設計中存在的問題以改善綜合結果,我們還可以利用 check_design 命令檢驗綜合的設計的一致性。
(9)存儲設計數據:
DC不會自動存儲綜合後的設計結果,因而需要在離開 DC 時手動存儲設計數據。比如存儲網表、延時信息等數據文件,ddc文件。

1:準備好rtl代碼(放在rtl文件夾裏),約束文件(scripts裏),庫文件(.synopsys_dc.setup)
在這裏插入圖片描述
 $ ls -al #可以看到.synopsys_dc.setup文件,gvim打開該文件
在這裏插入圖片描述
 12-19行,alias命令是對後面的變量起簡稱;
 33-34行,source命令,在當前命令下引用該文件;
 打開common_setup.tcl文件,如下圖
 在這裏插入圖片描述
common_setup.tcl文件定義了庫的名字和名稱,上面是邏輯庫,下面物理庫:
5行:定義庫的搜索路徑,當找不到庫時,從這個路徑中尋找

8行:定義target library使用的庫(注意,只是定義一個變量)

10行:定義圖形庫變量

15行:定義頂層設計庫的變量名稱

17行:定義milkyway(參考)庫(的位置)

19行:定義工藝庫(的位置)

21行:定義寄生參數庫(的位置)

23行:定義工藝庫和寄生參數庫的映射關係庫(的位置) 
 
打開dc_setup.tcl文件,如下圖
在這裏插入圖片描述
dc_setup.tcl文件就是指定庫了,而不是單單地定義了,set_app_var是定義DC內部變量,4~7這是指定搜索路徑個各種庫的路徑和名稱
4行:search_path搜索路徑

下面的物理庫設置中:

13行:指定milkyway(參考)庫的名稱

14行:指定當前設計的庫的名稱

16行:創建milkyway庫,格式如圖上面,需要工藝庫、參考、當前設計庫

19行:打開當前的設計庫

20行:加載寄生參數(庫)

2、啓動DC
3、讀代碼前的檢查

  • 檢查庫是否正確設置
  • 檢查邏輯庫和物理庫的一致性(檢查可能不會通過,結果不影響綜合的話,可以忽略)
  • 檢查寄生參數文件和工藝庫文件的一致性:(物理綜合的時候需要檢查)

4、讀入代碼和查看設計

  • 讀入代碼
read file - format verilog ./rtl/TOP.v
  • 讀入代碼後,查看頂層設計
  • link設計:查看當前綜合的設計是否缺少子模塊,返回值爲1,說明子模塊完整。
  • 檢查當前設計的連接性層次性(設計是否有問題)check_design:check_design 返回值爲1則正確
  • 以ddc的格式保存未映射的設計(注意需要先創建unmapped文件夾,但每次改變verilog時,都要重新刷新此句)
 Write  -hierarchy  -f  ddc  -out  unmapped/TOP.ddc
  • 查看內存中的設計與庫

5、插入約束設計,在scripts文件裏
在這裏插入圖片描述
6、進行綜合

compile_ultra

7、 綜合後的檢查(檢查不通過的需要優化,這裏只作爲一般流程,沒有進行優化)
report_constraint -all (查看是否違規)
report_timing (查看時序報告)
report_timing -delay_type max ;#查看最差路徑
report_area (查看面積情況)

8、 保存綜合後的設計(注意先創建mapped這個文件夾)
在這裏插入圖片描述

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