Tcl與Design Compiler (四)——DC啟動環境的設置


本文如果有錯,歡迎留言更正;此外,轉載請標明出處 http://www.cnblogs.com/IClearner/  ,作者:IC_learner

主要內容有:

  ·啟動環境的概述

  ·路徑變量的定義與解釋

  ·庫的指定與解釋

(1)啟動環境配置簡述

  我們按照前面的基本流程使用DC進行設置,但是這里主要使用的是腳本,因此不能一條一條命令進行演示其效果。在啟動DC之前,首先要配置DC的啟動環境,也就是那些庫的設定。配置DC的啟動環境主要是.synopsys_dc.setup配置文件的書寫。.synopsys_dc.setup這個文件就是DC的配置文件,它配置了DC啟動過程中要執行哪些命令、干哪些事。其中,search_path 、target_library...等等(后面會講,放在這里給大家留個印象),這些是DC內部的變量名稱,用來告訴DC做那些事的方法。

  一般.synopsys_dc.setup 文件有三個:①一個在synopsys的安裝目錄下,這個文件最好不要動;②一個在用戶目錄下,這個文件沒事也不要動他;③還有一個當前工作目錄下,也就是啟動DC的目錄下(沒有就需要自己創建),這個是要我們自己寫的,這個想怎么動就怎么動。我們配置DC的啟動環境,就是在啟動的目錄創建.synopsys_dc.setup並且修改它。

  此外,這個文件名字不能隨意更改,按照默認的名字來,DC在啟動的過程中會自動讀取各個名字的文件。(如果改變了它的名字,就需要通過source命令source一下)。

(2).synopsys_dc.setup配置文件的書寫

如下圖所示,一般設計的的目錄文件夾管理:

 

主要關注兩個文件夾,一個是rtl:放置.v設計文件,一個是syn文件夾:綜合時的信息。

進入綜合文件夾:

 

  有5個文件夾,mapped是存放綜合完成之后的文件的目錄,這些文件是經過綜合庫映射的。Unmaped是存放綜合時沒有經過工藝庫映射所得到的文件目錄。

Report是存放報告(比如時序報告、面積報告、DC啟動報告等)的目錄。Script是存放約束腳本的目錄。Work就是啟動DC的目錄了,在這個目錄里面,我們要進行創建.synopsys_dc.setup文件並且編寫這個文件:

 

文件的內容主要是指定這個四個庫(的名稱和路徑)

 

當然這個不是這個文件的全部內容,這個文件的全部內容如下(后面有這個文件內容的講解):

 

(3).synopsys_dc.setup的講解

  簡單的.synopsys_dc.setup文件如上圖所示了,總共79行。Echo那些行都是在終端打印相應的信息而已,提供我們判斷DC是否按照我們設定的環境進行啟動以及啟動到哪一步。“#”開頭的是注釋部分。31行(包括31行)之前的set語句是進行定義變量,也就是把路徑用變量來代替,在進行設置庫的時候,就可以使用這些變量,而不是用長長的路徑了,同時也讓別人了解你這個路徑是什么意思。依次定義:

①設計目錄(SYN_ROOT_PATH)的路徑:也就是你的總的設計路徑,在這個路徑下面進行仿真、綜合、形式驗證等等的操作。

②RTL文件的路徑(RTL_PATH):放置RTL文件的路徑。

③配置文件的路徑(CONFIG_PATH):放置DC的一些配置文件,這里的設計沒有任何的配置文件,因此沒有進行設置。

④腳本路徑(SCRIPT_PATH):放置約束腳本的路徑。

⑤未映射文件的路徑(UNMAPPED_PATH):放置DC沒有用工藝庫進行映射時得到的文件,也就是GTECH格式的文件(什么是GTECH文件,最前面第一點的時候就說了的哈),或者以ddc格式保存的未映射的文件。

⑥映射后的文件的路徑(MAPPED_PATH):放置DC最終優化后得到的結果,可能是以ddc的形式保存。

⑦放置報告的路徑(REPORT_PATH):放置DC運行過程中的一些報告,比如啟動報告,使用約束腳本運行中的報告,時序報告、面積報告等,通過查閱這些報告,分析DC是否按照我們預料中的情況進行啟動、運行,分析設計是否滿足要求等。

⑧DC運行時的路徑(WORK_PATH):啟動DC時的路徑,也就是DC工作時的路徑。

⑨DC的路徑(DC_PATH):也就是安裝DC的路徑。

⑩define_design_lib  work  -path  $WORK_PATH:這個就不是定義變量了,這個是DC內部命令格式,指定設計和庫的工作路徑。

⑩①符號庫(Symbol library )的路徑(SYMBOL_PATH):指定你符號庫的路徑,至於什么是符號庫,前面也有解說了。關聯一些圖形化庫,使用GUI界面的時候,就可以看到綜合得到的門級網表的圖形化界面。否則看不到。

由於我用的是台積電90納米的庫,圖形化符號庫及其路徑如下圖所示:

          

第一個就是庫的路徑看,后面那個是庫的名稱;由於我們需要定義的是庫的路徑,因此自然是寫路徑,而不是寫庫的名字。

附注:.sdb是DC使用的庫,是給DC看的,我們查閱得到的是亂碼;而.slib是給我們看的,我們可以用vim打開。

⑩②工藝庫(technology  library )的路徑:也就是鏈接庫(link library) 、目標庫(target library) 的路徑,這兩個庫合稱為工藝庫。至於工藝庫里面的具體信息,后面會進行講解。我的庫的路徑和名稱如下:

          

  這里的.db 格式是用來給DC用的,也就是說,DC讀取工藝庫文件,就是讀取.db這種格式的文件;.lib是給工程師看的。此外還有什么fast、typical、slow這些名稱,這些是庫的工作模式,一般情況下,我們都選擇slow,在最慢的情況下DC進行綜合,得到的時序和面積都OK,那么在其他情況下肯定都OK了的。.pdb,.plib是物理庫(以前有物理綜合的概念,即physical synthesis,用的是physical compiler吧。現在這個概念用在了ICC中了)。

從上面中我們會發現,定義(路徑)變量用的都是set(跟tcl語法一樣),因此這里就要強調一下:

  set : 自己自定義的一些變量,方便定義系統變量的時候,不用那么麻煩;主要是定義。

  set_app_var   :定義DC內部的系統變量、指定DC內部的連接等。主要指定有:search_path、synthetic_library、target_library、link_library、symbol_library 以及其他的一些命令開關等。

  當定義完這些“自定義”的變量之后,我們就要做一些正經事了,就是指定DC要用到的庫了。

⑩③指定搜索路徑(Search_path):當讀入了一些工藝庫時,忘了設置它的路徑,那么DC就會根據這個變量設置的路徑去尋找庫。DC可以根據這些路徑進行尋找相關的庫文件;或者,當需要多個.v文件時,通過這個變量告訴DC那些.v文件可能的路徑,讓DC根據.v文件的名字去找.v文件。

如:set_app_var  search_path  “$search_path  ./../....libs”;

set_app_var  search_path  [list  .  $xxx   $xxxx ](注意:換行的時候需要加換行符\,而且\后面不能有空格),list是列表的意思,意思是這個search_path有多個(路徑)變量,第一個路徑變量搜索不到(庫或者需要的文件),可以從下一個路徑中找;中間的 . 的意思好像是當前目錄。

  接下來就是指定庫文件了。在前面粗略地說了一下各個庫的意思,下面在介紹指定庫的同時,也接收這些庫在DC中的作用,但是庫里面的具體內容不在下面說明,將在后面進行介紹。

⑩④指定綜合庫(synthetic_library):這個庫一般是synopsys的庫:DesignWare library 和標准單元庫,這里指定的就是庫的名字了。

DesignWare library 這個庫是synopsys的IP庫:當使用到synopsys公司的IP核的時候比如使用了該公司的乘法器IP,那么就要定義這個綜合庫;此外,當需要用到這個庫的一些比較高端的IP核的時候,是需要相關的證書的。

例如當你在代碼中用來“*”或者“+”這操作,那么DC會通過這個你指定的綜合庫進行映射或者優化這些操作符(就是翻譯成門電路)。這個庫非必須指定。在這些庫的名稱如下所示:

             

⑩⑤指定目標工藝庫(target_library):DC將RTL級的HDL描述映射到實際的門級電路時所需要的標准單元庫。這個庫指定為半導體制造商提供的工藝庫。庫里面的具體內容后面詳細說明。這里指定的就是庫的名字。

             

  附注:啟動DC之后,可以通過printvar target_library 查看工藝庫名稱。

⑩⑥指定鏈接庫(link_library):這里指定的就是庫的名字了,鏈接庫可以從下面幾點理解:

  ·鏈接庫是target_library一樣的單元庫或者是已經綜合到門級的底層模塊設計(比如IP核)。作用是:用於分辨電路中邏輯門和子模塊的功能,然后用實際的庫單元或者子模塊代替它們;在由上而下的綜合工程中,上一層的設計調用底層已經綜合的模塊時,將從link_library中尋找並且鏈接起來,因此當讀入的文件是門級網表(比如用到了IP核的網表)時,需要把 link library 設成指向生成該門級網表的目標庫,否則 DC 因不知道網表中門單元電路的功能而報錯。

如果需要將已有的設計從工藝A轉到工藝B時,可以將當前的單元綜合庫A設為link_library,而將單元綜合庫B設為target_library,重新映射一下就可以了。

  ·路徑面前加*號表示開辟一塊單獨的內存空間給DC自己使用,然后先搜尋內存中已有的庫,然后再搜尋變量link_library指定的其他庫。DC搜尋的庫為search_path指定的目錄(比如說之前讀入設計時讀入了庫a,庫a存到內存里;這時DC在進行綜合的時候,發現缺少某個東西,於是就先從庫a里面找,找不到時就會從列表里面的變量路徑中找)。

  ·一般情況下,我們只用一個工藝庫,需要引用目標工藝庫,因此指定target_library;此外我們還有可能用到synopsys公司的IP核,因此需要指定他的DW庫。(這一點也就是上面這么指定link_library的原因)。

⑩⑦最后是指定圖形化符號庫(symbol_library):這里指定的就是庫的名字了,這個前面說得比較詳細了,這里不再重述。

⑩⑧最后source的那個腳本是用來定義一些命名規則,去掉網表中的一些符號,放置后端工程師拿到的網表中帶一些奇怪的符號從而引起不必要的錯誤。

注意:

  ·庫的指定只需要指定target_library、link_library,其他的可以不指定;

  ·上面的庫設置僅僅適用於邏輯綜合,也就是非拓撲模式下的綜合;拓撲模式下,需要使用到物理庫,或者相關的物理布局等信息;對於拓撲模式下的綜合,我們在前面的流程中提及到,在后面的實驗中,我們也會進行相關的解釋。

  ·最后,一般情況下(以后的文章中),為了方便管理,我們會像上一節那樣:

  A路徑變量的定義我們會放在common_setup.tcl中(一般是用set設置的變量)。

  B庫變量的指定我們一般放在dc_setup.tcl這個文件中,這里的庫變量一般是用set_app_var進行指定,此外指定的是具體的某一個庫,而不僅僅是路徑,DC會從search_path里面尋找到這些庫。

  C.synopsys_dc.setup文件中,僅僅包含source xxx.tcl這些內容,比如source common_setup.tcl  ;source dc_setup.tcl 以及source其他的設置內容。

 


免責聲明!

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



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