Design Compiler指南——預綜合過程

????????預綜合過程是指在綜合過程之前的一些為綜合作準備的步驟,包括Design Compiler的啟動、設置各種庫文件、創建啟動腳本文件、讀入設計文件、DC中的設計對象、各種模塊的劃分以及Verilog的編碼等等。

一、Design Compiler的啟動

? ? ? ? 目前,DC的啟動方式有三種:

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

二、庫文件的設置

????????在Design Compiler的運行過程中需要用到幾種庫文件,他們是工藝庫、鏈接庫、符號庫以及綜合庫,下面對他們一一說明。

? ? ? ? 詳細可見邏輯綜合——工藝庫

1、目標庫(target_library)

? ? ? ?目標庫是綜合后電路網表要最終映射到的庫,讀入的HDL代碼首先由synopsys自帶的GTECH庫轉換成Design Compiler內部交換的格式,然后經過映射到工藝庫和優化生成門級網表。目標庫是由Foundary提供的,一般是.db的格式。這種格式是DC認識的一種內部文件格式,不能由文本方式打開。.db格式可以由文本格式的.lib轉化過來,他們包含的信息是一致的。一個例子如下:

?????????從圖中可以看出,工藝庫中包含了各個門級單元的行為、引腳、面積以及時序信息(有的目標庫還有功耗方面的參數),DC在綜合時就是根據target_library中給出的單元電路的延遲信息來計算路徑的延遲。并根據各個單元延時、面積和驅動能力的不同選擇合適的單元來優化電路。

? ? ? ? 在DC中,使用以下命令來設置目標庫

dc_shell > set target_library my_tech.db

2、鏈接庫(link_library)

????????link_library設置模塊或者單元電路的引用,對于所有DC可能用到的庫,我們都需要在link_library中指定,其中也包括要用到的IP。

????????值得注意的一點是:在link_library的設置中必須包含’*’, 表示DC在引用實例化模塊或者單元電路時首先搜索已經調進DC memory的模塊和單元電路,如果在link library中不包含’*’,DC就不會使用DC memory中已有的模塊,因此,會出現無法匹配的模塊或單元電路的警告信息(unresolved design reference)。

????????另外,設置link_library的時候要注意設置search_path

????????圖中設置了link_library,但是DC在link的時候卻報錯,找不到TOP中引用的DECODE模塊,這說明link_library默認是在運行DC的目錄下尋找相關引用。要使上例的DECODE能被找到,需要設置search_path。? ? ? ?

3、符號庫 (symbol_library)

????????symbol_library是定義了單元電路顯示的Schematic的庫。用戶如果想啟動design_vision來查看、分析電路時需要設置symbol_library。符號庫的后綴是.sdb,如果沒有設置,DC會用默認的符號庫取代。

????????設置符號庫的命令是

dc_shell > set symbol_library my.sdb

4、綜合庫(synthetic_library)

????????在初始化DC的時候,不需要設置標準的DesignWare庫standard.sldb用于實現Verilog描述的運算符,對于擴展的DesignWare,需要在synthetic_library中設置,同時需要在link_library中設置相應的庫以使得在鏈接的時候DC可以搜索到相應運算符的實現。

三、啟動文件.synopsys_dc.setup的設置

????????啟動文件顧名思義,就是DC在啟動的時候首先讀入的文件,DC在啟動的時候,會自動在三個目錄下搜索該文件,對DC的工作環境進行初始化:

  1. $SYNOPSYS/admin/setup目錄下,DC安裝的標準初始化文件。
  2. 當前用戶的$HOME目錄下,一般用于設置一些用戶本人使用的變量以及一些個性化設置。
  3. DC啟動所在的目錄下,一般用于與所在設計相關的設置。

????????其中后面的setup 文件可以覆蓋前面文件中的設置。該文件主要包括庫的設置、工作路徑的設置以及一些常用命令別名的設置等等。

????????由于dcshell的啟動腳本和tcl的腳本語法不一致,所以如果只有一種方式的啟動腳本,那么運行另一種方式的時候會報錯。因此,DC的啟動腳本有一種兼容兩種方式的格式。下面是這種腳本的舉例——

????????它區別與其他啟動腳本的特征是第一行有一個”#”,說明它是dcshell的一個子集,同時兼容兩種方式。文件的第一段設置工藝庫和鏈接庫,第二段設置符號庫和搜索路徑,第三段設置DC命令的別名,這一點與Shell相似。?

四、讀入設計文件????????

????????Design Compiler支持多種硬件描述的格式,.db、.v、.vhd、等等,對于dcsh工作模式來說,讀取不同的文件格式只需要帶上不同的參數,對于TCL的工作模式來說,讀取不同的文件格式需要使用不同的命令。

read –format verilog[db、vhdl etc.] file ????????//dcsh的工作模式

read_db file.db ???????????????????????????????????????????????//TCL工作模式讀取DB格式

read_verilog file.v????????????????????????????????????????????//TCL工作模式讀取verilog格式?

????????Design Compiler可以讀取設計流程中任何一種數據格式,如行為級的描述、RTL級的描述、門級網表等等,不過由于不同的數據格式使得Design Compiler綜合的起點不同,即使實現相同的功能,也可能會產生不同的結果。

????????讀取源程序的另外一種方式是配合使用analyze命令和elaborate命令:

  1. analyze是分析HDL的源程序并將分析產生的中間文件存于work(用戶也可以自己指定)的目錄下;
  2. elaborate則在產生的中間文件中生成verilog的模塊或者VHDL的實體,缺省情況下,讀取的是work目錄中的文件。

????????當讀取完所要綜合的模塊之后,需要使用link命令將讀到Design Compiler存儲區中的模塊或實體連接起來,如果在使用link命令之后,出現unresolved design reference的警告信息,需要重新讀取該模塊,或者在.synopsys_dc.setup文件中添加link_library,告訴DC到庫中去找這些模塊,同時還要注意search_path中的路徑是否指向該模塊或單元電路所在的目錄。

五、設計對象

????????上圖是一個Verilog描述的設計實例,里面包含了我們所要討論的幾種設計對象。這些對象也是今后DC命令的操作對象。Verilog描述的各個模塊可以稱之為設計(Design),里面包含時鐘(Clock),他的輸入輸出稱為端口(Port),模塊中的互連線是線網(Net),內部引用的元件稱為引用(Reference),引用的實例稱為單元(Cell),引用單元的內部端口是管腳(Pin)。?

????????其中值得注意的是DC識別Clock不是通過HDL的書面表達,而是要通過設計者施加一定的約束來區分的,具體內容后續會討論。

?六、設計的劃分

????????把一個復雜的設計分割成幾個相對簡單的部分,稱為設計劃分(Design Partition)。這種方法,也可以稱為“分而治之”(Divide and conquer)的方法,在平常的電路設計中這是一種普遍使用的方法,一般我們在編寫HDL代碼之前都需要對所要描述的系統作一個系統劃分,根據功能或者其他的原則將一個系統層次化的分成若干個子模塊,這些子模塊下面再進一步細分。這是一種設計劃分,模塊(module)就是一個劃分的單位。

????????在運用DC作綜合的過程中,默認的情況下各個模塊的層次關系是保留著的,保留著的層次關系會對DC綜合造成一定的影響,比如在優化的過程中,各個子模塊的管腳必須保留,這勢必影響到子模塊邊界的優化效果。下面我們將詳細介紹在作設計劃分的過程中要注意的幾點原則,并根據每個原則舉一個實例說明。

1、組合電路

????????不要讓一個組合電路穿越過多的模塊

????????上圖中的組合邏輯電路存在于寄存器A與寄存器C之間,它同時穿過了模塊A、模塊B以及模塊C。前面提到了,如果直接將這樣的劃分交給DC綜合,那么綜合后的電路將仍舊保持上面的層次關系,即端口定義不會改變。這樣的話,DC在作組合電路的優化的時候就會分別針對A、B、C三塊電路進行,這樣勢必會影響到DC的優化能力,不必要的增加了這條路徑的延時和面積。因此,可以考慮將三塊分散的組合邏輯劃分到一個模塊中,如下圖所示——

?????????

????????這張圖說明了組合電路劃分到一個模塊之后的電路情況,這樣DC就可以充分的施展它的的優化技巧,綜合出比較滿意的電路來。為什么說它只是一個較好的劃分呢?因為它只是考慮到組合電路的最優劃分而沒有想到時序電路部分。我們進一步修改:

?

????????在這張圖里,組合邏輯被劃到了C模塊中,它不僅能保證組合的最佳優化還能保證時序的最佳優化,因為里面的寄存器在優化的過程中可以吸收前面的組合邏輯,從而形成其他形式的時序元件,如由原先的D觸發器變成JK觸發器、T觸發器、帶時鐘使能端的觸發器等等。這樣工藝庫中的大量的時序單元都可以得到充分的利用了。?

2、時序電路

????????通過前面的討論,可以知道:在編寫代碼或者綜合的過程中,我們可以把模塊盡量寫成這樣的邏輯結構:將所有的輸出寄存起來。其實這樣不但是最佳的優化結構,也可以簡化時序約束(使得所有模塊的輸入延時相等)。

????????就算遵循了輸出寄存的原則,我們還是可能犯下面的錯

????????圖中可以看到,一個與非門連接了A、B、C三個模塊,同樣的不難看出來,它也會影響到C的組合邏輯的優化。一般這種情況只會在自下而上的綜合策略中才出現。可以通過把與非門吸收到C中的組合邏輯的方法消除粘滯邏輯(如下圖),從而使得電路的頂層模塊僅僅是將子模塊拼接在一起,而沒有獨立的電路結構,這樣的一個另一個好處是可以使得在自下而上的設計策略中不需要編譯頂層模塊。?

????????

3、模塊大小

????????綜合時間主要受到硬件條件(主頻、內存)的制約,對于早期的工作站而言,硬件水平不高,跑一個大型的設計可能會一次花上幾天時間才會有結果,這樣對調試和縮短工期是不利的,所以需要根據工作站的能力選擇合適的模塊大小。

????????

????????這個例子的模塊大小從500門到37萬門不等,假設工作站的硬件條件限制最多只能跑30萬門的設計,那么上面的這種劃分就有一些弊病。首先,TEENY模塊太小,不適合優化出最好的結果,可以考慮將它合并到其他模塊中。其次,另一個組合模塊邏輯太大,這勢必使得綜合的時間變得不能承受。因此,改進的劃分可以如下圖所示——

????????可以看到,雖然各個模塊也是大小不一,但卻可以取得較前面的劃分更好的結果。值得注意的是——Design Compiler軟件本身沒有模塊大小的限制,它完全根據工作站的環境決定,在具體作設計的時候,我們可以在硬件條件允許的條件下編譯較大的模塊,假如硬件條件的確有限,只能選擇小的模塊來綜合了

4、同步邏輯

????????將同步邏輯部分與其他部分分離

????????上圖是一個芯片的頂層設計,可以看到它被分層了三個層次——最外邊是芯片的Pad,Pad是綜合工具中沒有的,也不是工具能生成的,它由Foundry提供,并由設計者根據芯片外圍的環境手工選擇;中間一層被分成四個部分,其中最里面那個稱為Core,也就是DC可以綜合的全同步邏輯電路,另外的三個部分DC不能綜合,需要其他的辦法來解決:ASYNCH是異步時序部分,不屬于DC的范疇;CLOCK GEN是時鐘產生模塊(可能用到PLL),盡管有一部分同步電路,但也不符合綜合的條件;JTAG是邊界掃描的產生電路,這一部分可以由Synopsys的另外一個工具BSD Compiler自動生成。

5、group / ungroup

????????上面我們介紹了四個劃分的原則,當然這些原則并不是我們在編寫HDL代碼的時候就必須遵守的,它只是說明什么樣的設計劃分對于DC來說是最理想的,能得到最優化的結果。事實上除了通過HDL中的模塊體現劃分,我們還可以運用DC的兩個命令(Group及Ungroup)來調整設計劃分。

? ? ? ? 比如在第一點中提到的例子

?????????第一步是使用group命令,創建一個新的模塊NEW_DES(設計名),單元名為U23,包含了U2和U3,這個命令很直觀,很容易看懂。

????????第二步則是使用ungroup命令,將U23中的U2和U3的邊界去掉,使之稱為一個整體:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253647.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253647.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253647.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

KAFKA介紹(分布式架構)

2019獨角獸企業重金招聘Python工程師標準>>> 介紹 Kafka是一個分布式的、可分區的、可復制的消息系統。它提供了普通消息系統的功能,但具有自己獨特的設計。這個獨特的設計是什么樣的呢? 首先讓我們看幾個基本的消息系統術語: Kaf…

jquery 回車事件

簡單地記下jquery實現回車事件,代碼如下:全局: $(document).keydown(function(e){if(e.keyCode13){$(".login-li input[typebutton]").trigger("click");} });某個控件: $("body").keydown(functio…

Three.js 詳細解析(持續更新)

1、簡介; Three.js依賴一些要素,第一是scene,第二是render,第三是carmea npm install --save three import * as THREE from "three"; import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js&quo…

[js高手之路]構造函數的基本特性與優缺點

上文,通過基本的對象創建問題了解了構造函數,本文,我們接著上文繼續了解構造函數的基本特性,以及優缺點. 每個對象上面都有一個constructor屬性( 嚴格意義上來說,是原型上的,對象是通過查找到原型找到 constructor屬性…

Design Compiler指南——施加設計約束

Design Compiler是一個約束驅動(constrain-driven)的綜合工具,它的結果是與設計者施加的約束條件密切相關的。在本文里,我們主要討論怎樣給電路施加約束條件,這些約束主要包括——時序和面積約束、電路的環境屬性、時序和負載在不同模塊之間的…

Python:eval的妙用和濫用

時間 2014-07-08 13:05:24 CSDN博客 原文 http://blog.csdn.net/zhanh1218/article/details/37562167主題 Python eval()函數十分強大,官方demo解釋為:將字符串str當成有效的表達式來求值并返回計算結果。 so,結合math當成一個計算器很好用…

程維柳青發布道歉聲明:滴滴順風車業務將無限期下線

雷鋒網(公眾號:雷鋒網)消息,8 月 28 日晚間,滴滴創始人兼 CEO 程維和滴滴總裁柳青正式發出道歉聲明,向受害者和受害者家屬道歉——這已經離本次滴滴順風車悲劇的發生整整四天的時間。 聲明表示,滴滴不再以規模和增長作…

MATLAB圖像增強程序舉例

1.灰度變換增強程序: % GRAY TRANSFORM clc; Iimread(pout.tif); imshow(I); Jimadjust(I,[0.3 0.7],[0 1],1); %transforms the walues in the %intensity image I to values in J by linealy mapping %values between 0.3 and 0.7 to values between 0 and 1. fi…

Design Compiler指南——設計綜合過程

在前面一章介紹完施加約束之后,接下來要做的工作就是將設計進行綜合編譯(compile),本文我們將主要討論綜合編譯的過程。主要分為這樣幾個部分: 優化的三個階段及其特點編譯的策略編譯層次化的設計 一、優化的三個階段 這一節我們介紹Design …

How to find Material based on Sales Organization and Distribution Channel

Fetch data from Database View /BEV1/RBEA_V Fields: VKORG - Sales Organization VTWEG - Distribution Channel MATNR - Material Number 轉載于:https://www.cnblogs.com/JulietLV/p/7436028.html

iOS開發 iOS10兼容訪問http

添加NSAppTransportSecurity的字典會自動變成 AppTransportSecurity再添加 allow Arbitary Loads Boolean YES轉載于:https://www.cnblogs.com/diweinan/p/6233052.html

django 利用PIL 保存圖片

在使用django時不知道怎么保存圖片,又不想用它的form ,在網上找了許久,終于找到個解決方案,利用PIL.image 將POST上來的圖片保存到media目錄下,然后再修改models from PIL import Imagescreen_name request.POST.get(…

圖像轉灰度圖

MyYuanLaiPic imread(e:/image/matlab/darkMouse.jpg);%讀取RGB格式的圖像 MyFirstGrayPic rgb2gray(MyYuanLaiPic);%用已有的函數進行RGB到灰度圖像的轉換 [rows , cols , colors] size(MyYuanLaiPic);%得到原來圖像的矩陣的參數 MidGrayPic zeros(rows , cols);…

Design Compiler指南——后綜合過程

本文我們著重討論使用Design Compiler綜合大型設計時要注意的一些問題,比如怎樣調整綜合方法,出現約束違反后怎樣修正,怎樣給不同的子模塊作時序和負載預算,以及給整個設計在具體綜合之前先作一個預估(Design Exploration)等等。 …

web worker原理 SSE原理

第一部分 什么是 web worker? 我們一直強調JavaScript是單線程的,但是web worker的出現使得JavaScript可以在多線程上跑,只是web worker本身適合用于一些復雜的、耗費cpu的運算,不能操作window、document、parent對象&#xff0c…

如何尋回xp盤符丟失的數據

分區丟失是比較常見的數據恢復案例,需要注意,分區丟失后不要再重建新的分區。保護好資料丟失現場,可以最大程度的恢復出資料。具體的恢復方法看正文了解。 工具/軟件:星空數據恢復軟件 步驟1:先百度搜索并下載程序打開…

afx_msg函數意思

應用程序框架產生的消息映射函數 例如:afx_msg void OnBnClickedButton1(); 其中 afx_msg為消息標志,它向系統聲明:有消息映射到函數實現體; 而在map宏定義中,就有具體消息和此函數的映射定義(可以是自定義…

文件得編碼和文件名的編碼是不一樣的

1.新知識,通過文件后墜名的編碼判斷文件類型,可以有效的防止腳本文件偽裝為正常得文件。 2.攔截器和過濾器。 過濾器只能夠在http請求和回復的時候進行處理。 但是攔截器可以在很多地方攔截,例如程序拋異常等都可以捕獲的到。還可以進行權限得…

Visual computing——概述

Visual Computing(視覺計算)是所有處理二維圖像和三維模型的計算機科學學科的總稱,即計算機圖形學、圖像處理、可視化、計算機視覺、虛擬和增強現實、視頻處理,但也包括模式識別、人機交互、機器學習等方面。核心挑戰是視覺信息&a…

推薦!手把手教你使用Git

一:Git是什么? Git是目前世界上最先進的分布式版本控制系統。 二:SVN與Git的最主要的區別? SVN是集中式版本控制系統,版本庫是集中放在中央服務器的,而干活的時候,用的都是自己的電腦&#xff0…