DC學習(2)綜合的流程


一:邏輯綜合的概述

  synthesis = translation + logic optimization + gate mapping

1:Translation

  主要把描述RTL級的HDL語言,在約束下轉換成DC內部的同意用門級描述的電路,以GTECH或者沒有映射的ddc形式展現

2:logic optimization

  邏輯優化,就是把統一用門級描述的電路進行優化,例如把路徑調整一下,門改一下。

3:Gate mapping

  門級映射;DC用別的廠商的工藝庫把電路給映射出來,得到一個ddc文件;包括映射的門電路信息與網表,.v格式的網表,延時信息(sdf),工作約束(sdc)。(.ddc不能用文本編輯器打開)。.ddc這個包含的網表文件是實際意義的網表文件,而.v這個形式的網表問價是用來做后仿真的文件。

  延時信息的得出:線負載模型、拓撲結構模型(現在)。

二:DC啟動方式

1:dc_shell

  DC以命令行的格式啟動

2:design_vision

  DC圖形界面啟動

3:Batch_mode

  批處理模式。前面兩種方式只是把DC啟動起來,沒有真正的工作。需要通過source命令把腳本寫進去以后,DC讀取才真正工作;這種批處理模式是,在啟動的同時,告訴DC執行哪些腳本

  例如:$dc_shell -topo -f run.tcl | tee -i run.log

  意思是:使用拓撲模式啟動DC,啟動的同時執行run.tcl腳本文件,並且把啟動過程中顯示在終端的信息記錄到run.log中。|  tee  -i就是寫進信息的管道命令,講dc_shell -topo -f run.tcl 執行后顯示的信息(輸出結果),流入到run.log文件中。這樣子是為了在DC啟動失敗的時候,通過查看啟動信息,進而排除錯誤

三:基本流程概述

1:高層次設計流程圖

  

  ①在設計之前,准備好庫,verilog代碼,約束條件

  ② 完成 RTL 源碼設計之后,應讓設計開發與功能仿真並行進行:

    ·在設計開發階段,我們使用DC來實現特定的設計目標,以及執行默認選項的初步綜合

    ·如果設計開發結果未能在10%的偏差范圍內滿足時序目標,則需要修正HDL代碼,然后重復設計開發和功能驗證的過程。 

  ③ 使用 DC 完成設計的綜合並滿足設計目標.這個過程包括三個步驟,即綜合=翻譯+邏輯優化+映射,首先將 RTL 源代碼轉化為通用的布爾等式,然后設計的約束對電路進行邏輯綜合和優化,使電路能滿足設計的目標或者約束,最后使用目標工藝庫的邏輯單元映射成門級網表,在將設計綜合成門級網表之后,要驗證此時的設計是否滿足設計目標。如果不能滿足設計目標,此時需要產生及分析報告確定問題及解決問題。

  ④當設計滿足功能、時序以及其他的設計目標的時候,需要執行物理層設計最后分析物理層設計的性能,也就是使用DC的拓撲模式,加入floorplan的物理信息后進行綜合分析設計的性能。如果結果未能滿足設計目標,應返回第三步.如果滿足設計目標,則本部分設計周期完成.

2:流程圖與相應的命令

  

  ①准備設計文件,DC 的設計輸入文件一般為 HDL 文件。

  ②指定庫文件,需要指定的庫文件包括:

  鏈接庫(link library) 、目標庫(target library) 、符號庫(symbol library)、綜合庫(synthetic library)

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

  一般有兩種文件,后綴名為lib(人看,可轉化為db文件)和db(工具讀)

  例如:set target_library 22nm.db

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

  下面是庫的解釋,具體的解釋在后面有說,這里先進行簡單地概述一下:

  Link  library 和 target  library 統稱為 technology  library(即工藝庫,習慣稱之為綜合庫),technology  library  由半導體制造商提供,包含相關 cell 的信息及設計約束標准,其中:

  Target library:    在門級優化及映射的時候提供生成網表的 cell,即DC 用於創建實際電路的庫。

  Link  library:設置里面不僅有Target library,還有其他東西,例如IP核。“*65n_wc.db”,*指DC在內存里開辟一片區域給自己用,別的操作不可使用。

  symbol library:Symbol library 提供 Design Vision GUI 中設計實現的圖形符號,如果你使用腳本模式而不使用 GUI,此庫可不指定 Symbol library。

 ③讀入設計:

  設計的讀入過程是將設計文件載入內存,並將其轉換為 DC 的中間格式,即GTECH 格式,GTECH 格式由“soft macros”  如  adders, comparators 等組成,這些組件來自 synopsys  的 synthetic lib,每種組件具有多種結構。讀入設計有兩種實現方法實現方法:read  和  analyze & elaborate(實際上read 是 analyze  與  elaborate 的打包操作  ),下面介紹二者在使用中的區

別:

  

  從中可以看到,analyze & elaborate  可以自由指定設計庫,並生成 GTECH中間文件前生成.syn 文件存儲於 work 目錄下,便於下次 elaborate 節省時間,我們一般選擇  analyze & elaborate 的方法讀入設計。

  ④定義設計環境: 

  定義對象包括工藝參數(溫度、電壓等),I/O 端口屬性(負載、驅動、扇出), 統計 wire-load 模型,設計環境將影響設計綜合及優化結果。

  ⑤設置設計約束: 

  設計約束包括設計規則約束和優化約束,設計規則約束(design rule constraint)由工藝庫決定,在設計編譯過程中必須滿足,用於使電路能按功能要求正常工作。設計優化約束定義了 DC 要達到的時序和面積優化目標,該約束由用戶指定,DC 在不違反設計規則約束的前提下,遵循此約束綜合設計。

  ⑥選擇編譯策略: 

  對於層次化設計,DC 中有兩種編譯策略供選擇,分別為 top down 和 bottom up。在 top down 策略中,頂層設計和子設計在一起編譯,所有的環境和約束設置針對頂層設計,雖然此種策略自動考慮到相關的內部設計,但是此種策略不適合與大型設計,因為 top down 編譯策略中,所以設計必須同時駐內存,硬件資源耗費大。在 bottom up 策略中,子設計單獨約束,當子設計成功編譯后,被設置為 dont_touch 屬性,防止在之后的編譯過程中被修改,所有同層子設計編譯完成后,再編譯之上的父設計,直至頂層設計編譯完成。Bottom  up 策略允許大規模設計,因為該策略不需要所有設計同時駐入內存。

  ⑦編譯: 

  用 Compile 命令執行綜合與優化過程,還可以利用一些選項指導編譯和優化過程。

  ⑧分析及解決設計中存在的問題 

  DC可以產生一些報告以反應設計的綜合和優化結果,如:時序、面積、約束等報告,這些報告有助於分析和解決設計中存在的問題以改善綜合結果,我們還可以利用 check_design 命令檢驗綜合的設計的一致性。

  ⑨存儲設計數據 

  DC不會自動存儲綜合后的設計結果,因而需要在離開 DC 時手動存儲設計數據。比如存儲網表、延時信息等數據文件,ddc文件。

四:例子(練習lab1)

 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文件就是指定庫了,而不是單單地定義了,ser_app_var是定義DC內部變量,4~7這是指定搜索路徑個各種庫的路徑和名稱

  4行:search_path搜索路徑

  下面的物理庫設置中:

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

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

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

  19行:打開當前的設計庫

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

 2:啟動dc

  

3:讀代碼前的檢查

  *檢查庫是否正確設置

   ,printvar link_library,printvar search_path

  *檢查邏輯庫和物理庫的一致性(檢查可能不會通過,結果不影響綜合的話,可以忽略)

  check_library

  *檢查寄生參數文件和工藝庫文件的一致性:(物理綜合的時候需要檢查)

  check_tlu_plus_files

  通過的話會有三個passed

4:讀入代碼和查看設計

  *讀入代碼:

  輸出:

  

  *讀入代碼后,查看頂層設計;也可通過 current_design top.v設置頂層設計

  

  *link設計:查看當前綜合的設計是否缺少子模塊,返回值為1,說明子模塊完整。

  

  *檢查當前設計的連接性層次性(設計是否有問題)check_design

  check_design  返回值為1則正確,但warning有時也要解決。

  *以ddc的格式保存未映射的設計(注意需要先創建unmapped文件夾,但每次改變verilog時,都要重新刷新此句):

  Write  -hierarchy  -f  ddc  -out  unmapped/TOP.ddc

    *查看內存中的設計與庫

  

  

5:插入約束設計,在scripts文件里

  

  可在此處加上check_timing

6:進行綜合

  compile_ultra

7:  綜合后的檢查(檢查不通過的需要優化,這里只作為一般流程,沒有進行優化)

  report_constraint -all  (查看是否違規)

  report_timing (查看時序報告),report_timing -delay_type max ;#查看最差路徑

  report_area (查看面積情況)

  

  

8:  保存綜合后的設計(注意先創建mapped這個文件夾)

  

 

 

  

   

 

  

 

  

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM