邏輯綜合——施加約束

Design Compiler時一個約束驅動(constraint-driven)的綜合工具,它的結果與設計者施加的約束條件密切相關。

一、面積約束

? 進行面積的約束,也就是告訴DC綜合的電路面積要在多少以內。在介紹約束命令之前,先了解一下面積的單位。面積的單位可以是:

  • 2輸入與非門(2-input-NAND-gate)
  • 晶體管數目(Transistors)
  • 平方微米(Square microns)

? 此外,我們往往看到一個芯片是多少多少門,這多少門的數字就是拿芯片的總面積,除以2輸入與非門的面積得到的數值。用report_lib命令不可顯示面積的單位,我們要詢問半導體廠商面積的單位是什么。或者用以下方法得到:

? 如果不設置面積的約束,Design Compiler將做最小限度的面積優化。設置了面積的約束后,DC將在達到面積約束目標時退出的面積優化。如果設置面積的約束為“0" , DC將為面積做優化直到再繼續優化也不能有大的效果。這時,DC將中止優化。注意,對于很大(如百萬門電路)的設計,如將面積的約束設置為“0" , DC可能要花很長的時間為設計做面積優化。綜合時,運行的時間很長。

? 在超深亞微米(deep sub-micro)工藝中,一般說來,面積并不是設計的主要目標,對設計的成本影響不大。因此,我們在初次優化時,可以不設置面積的約束。優化后,檢查得到的設計面積,然后將其乘上一個百分數(例如8500),將其結果作為設計的面積約束。再為設計做增量編輯,運行“compile -inc”命令,為面積做較快的優化。這樣做,既可以優化面積,又可以縮短運行時間。

最后我們用set_max_area命令為設計作面積的約束。例如:

set_max_area ?10000

當設計不是很大的時候,根據上面的描述,我們就可以使用下面的命令進行面積約束:

set_max_area ?0

讓DC做最大的面積優化約束。

二、時序約束

關于時序約束,我們要做的是約束電路中的所有時序路徑。這些時序路徑可以分為四類(具體可見靜態時序分析系列):輸入到寄存器的路徑、寄存器到寄存器之間的路徑、寄存器到輸出的路徑、輸入直接到輸出的路徑。

我們以常見的同步電路為例:

在電路綜合過程中,所有時序電路以及組合電路的優化都是以時鐘為基準來計算路徑延遲的,因此,要在綜合時候指定時鐘,作為估計路徑延遲的基準。

1、定義時鐘

  • 用戶必須定義的值:colck source(pin or port)
  • 用戶可能需要定義的值:duty cycle、offset/skew、clock name

create_clock -period 10 [get_ports Clk]

set_dont_touch_network [get_clocks Clk]

對所有定義的時鐘網絡設置為dont_touch,即綜合時候不對Clk信號進行優化。這是為什么呢?

實際的電路設計中,時鐘樹的綜合(CTS)有自己的方法,它需要考慮到實際布線后的物理信息,所以DC不需要在這里對時鐘樹進行處理

我們使用create_clock后,情況如下:

這里我們需要定義IO相對于時鐘的一些時序。

2、定義輸入延遲

我們要定義的輸入延遲是指被綜合模塊外的寄存器觸發的信號在到達被綜合模塊之前的延時。即下圖中的Tclk-q和M電路的延時之和。

當Tclk-q和TM(Path M的延時)確定之后,由于時鐘也是確定的,則TN(Path N的延時)也將會確定。

我們用set_input_delay命令定義輸入延遲。

set_input_delay -max 4 -clock Clk [get_ports A]

由于輸入延遲是相對于時鐘的,所以需要注明時鐘域。

3、定義輸出延遲

信號在被綜合模塊的觸發器里被觸發,被外圍的一個觸發器接收,對外圍電路而言,它有一個T電路延時和外圍觸發器的建立時間要求。

由于時鐘是確定的,當T電路延時和外圍觸發器的建立時間要求確定之后,被綜合模塊內部的輸出路徑延時范圍也確定了下來。

我們用set_output_delay命令定義輸出延遲。

set_output_delay -max 4 -clock Clk [get_ports B]

三、DRC約束

常見的DRC約束有三種

  • set_max_transition?約束設計中的信號、端口、net的transition time。net的transition time取決于net的負載(fan-out),負載越大,transition time越大。
  • set_max_fanout 對design、net、output port進行操作,設定的不是具體的電容值。扇出負載值用來表示與單元輸入引腳相對的負載的數目,并不表示真正的電容負載,而是個無量綱的數字。
  • set_max_capacitance 基于工藝庫的信息設定

四、環境約束

之前的約束對待綜合電路進行了許多條件限制,但還有許多方面未提及,如環境溫度、供電電壓、外圍負載等,我們在這一節進行說明。

1、設置負載

為了更加準確地估計模塊輸出的時序,除了知道輸出延時外,還需要知道輸出負載情況,負載越大,output port的transition time越大,影響時序。

由于DC默認輸出負載為0,即相當于不接負載,則這樣綜合的電路時序過于樂觀,不能反映真實工作情況。

常用指令如下

set_load 5 [get_ports OUT]? //直接設置

set_load [load_of my_lib/and2a0/A]?[get_ports OUT] //使用工藝庫中現有的單元的load值來進行代替

set_load expr[[load_of my_lib/and2a0/A*3]]?[get_ports OUT]

2、設置驅動

除了知道輸出延時、輸出負載情況外,DC還需要知道input port 的transition time。同樣地,默認情況下,DC默認外部信號transition time為0。

set_driving_cell允許用戶自行定義一個實際的外部驅動cell,同樣地,可以用工藝庫現有的單元的值來代替。

set_driving_cell -lib_cell and2a0 \[get_ports IN]

set_driving_cell??-lib_cell ?FD1 ?-pin ?Q ?[get_potrs ?IN]

set_drive以電阻值為計量,0表示最大驅動強度,通常為時鐘端口.

3、設置工作條件

Foundry提供的工藝庫里,各個單元的延時實在一個標準的條件下得到的。在考慮延時時,還需要考慮工藝制程、電壓、溫度(PVT)的影響。

上圖可以看到PVT對延時的影響。因此,工藝庫中提供了幾種工作條件的模型(operating condition model)供設計者選擇,我們可以用:report_lib ?libname命令把廠商提供的所有工作條件列出來。一般綜合只考慮最好和最差兩種情況:最差情況用于建立時間的時序分析,最好情況用于保持時間的時序分析。

set_operating_conditions??-max $OPERA_CONDITION ?-max_library ?$LIB_NAME

4、設置連線延時

在計算時序路徑延遲時,除了需要知道門單元延遲外,還需要知道連線的延遲。

連線的延遲目前一般用(連)線負載模型( Wire ?Load ?Model,簡稱WLM)估算。WLM是廠商根據多種已經生產出來芯片的統計結果,在同樣的工藝下,計算出在某個設計規模范圍內(例如門數為0~43478.00、門數為43478.00~86956.00,等等)負載扇出為1連線的平均長度,負載扇出為2的連線的平均長度,負載扇出為3的連線的平均長度等等。

WLM是根據連線的扇出進行估算連線的RC寄生參數,一般情況下,由半導體廠商建立。廠商根據已生產出來的其他設計統計出該工藝的連線寄生參數。半導體廠商提供的工藝庫中包括了線負載模型。通常在一個綜合庫里面有多種線負載模型,不同的模型模擬不同規模的的模塊內的線上負載情況。用戶也可以自己創建自己的線負載模型去更精確地模擬設計內的線上負載。

連線延時模型如下圖:

如果要查看工藝庫中的WLM,可以使用命令:report_lib ?$lib_name,進行綜合時,綜合工具會默認根據設計面積和節點處的負載自動選擇合適的連線負載模型,如果要關掉自動選擇WLM,那么可以使用命令:

set ?auto_wire_load_selection ?false

然后手動選擇線負載模型的命令是:

set_wire_load_model??-name ?$WIRE_LOAD_MODEL ?-library ?$LIB_NAME

 如果連線穿越層次邊界,連接兩個不同的模塊,那么有三種方式對這種跨模塊線連接的類型進行建模,set_wire_load_mode命令用于設置連線負載模型的模式。有三種模式供選擇:top、segmented和enclosed。

  • enclosed:連接B1和B2的連線負載模型用圍繞它們的模塊的負載模型代替,即用SUB的負載模型代替。
  • top:連接B1和B2的連線負載模型用頂層模塊的負載模型代替,即用TOP的負載模型代替。
  • segmented:分別用穿過的三段的模型相加得到。

set_wire_load_mode top

5、檢查

在設置完環境約束之后,可以用以下指令來檢查約束是否添加成功。

  • check_timing:檢查設計是否有路徑未加入約束
  • check_design:檢查設計中是否有懸空管腳或者輸出短接的情況
  • write_script:將施加的約束和屬性寫到一個文件中,檢查該文件看看是否正確。

五、實例

下面是一個實際的tcl腳本。

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

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

相關文章

[Codevs] 1004 四子連棋

1004 四子連棋 時間限制: 1 s空間限制: 128000 KB題目等級 : 黃金 Gold題目描述 Description在一個4*4的棋盤上擺放了14顆棋子,其中有7顆白色棋子,7顆黑色棋子,有兩個空白地帶,任何一顆黑白棋子都可以向上下左右四個方向移動到相鄰…

鏈接中獲取文件名

算得上是-test.pdf 獲取文件名 var str http://aaa.com/s/ddd/算得上是-test.pdf; console.log(str.match(/([^/*.])\.\w$/)) console.log(str.match(/([^/*.])\.\w$/)[0]) // 轉載于:https://www.cnblogs.com/cssfirefly/p/6163370.html

邏輯綜合——優化電路

對進行時序路徑、工作環境、設計規則等進行約束完成之后,DC就可以進行綜合、優化時序了,DC在優化過程中主要的策略將在下面進行說明。然而,當普通模式下不能進行優化的,就需要我們進行編寫腳本來改進DC的優化來達到時序要求。 DC…

DOM包裹wrap()方法

DOM包裹wrap()方法 如果要將元素用其他元素包裹起來,也就是給它增加一個父元素,針對這樣的處理,JQuery提供了一個wrap方法 .wrap( wrappingElement ):在集合中匹配的每個元素周圍包裹一個HTML結構 簡單的看一段代碼: &…

usleep函數

usleep功能把進程掛起一段時間, 單位是微秒(百萬分之一秒); 頭文件: unistd.h 語法: void usleep(int micro_seconds); 返回值: 無 內容說明:本函數可暫時使程序停止執行。參數 micro_seconds 為要暫停的微…

限制Xamarin獲取圖片的大小

限制Xamarin獲取圖片的大小在App開發中,經常會使用網絡圖片。因為這樣不僅可以減少App的大小,還可以動態更新圖片。但是手機使用網絡環境千差萬別。當網絡環境不是理想的情況下,加載網絡圖片就是一個棘手的問題了。為了避免長時間加載圖片影響…

Linux應用開發自學之路

前言 在 「關于我 」那篇博文里,朋友們應該知道了我不是科班出身,是由機械強行轉行到Linux應用開發方向。下面我就詳細向大家介紹自己這一路上的轉行歷程,希望對大家有所啟發。 我是學機械專業的,對于機械專業我還是很感興趣&…

Verdi 基礎教程

一、Verdi 功能 查看設計debugVerdi不能自己產生波形 二、Verdi使用流程 1、Verdi環境配置 .bashrc中配置 export Verdi_HOME$Synopsys_Dir/Verdi2015 #export NOVAS_HOME$Synopsys_Dir/Verdi2015 export PATH$Verdi_HOME/bin:$PATH export LD_LIBRARY_PATH"/opt/Syno…

ida和idr機制分析(盤符分配機制)

內核ida和idr機制分析(盤符分配機制) ida和idr的機制在我個人看來,是內核管理整數資源的一種方法。在內核中,許多地方都用到了該結構(例如class的id,disk的id),更直觀的說&#xff0…

MIPI CSI-2學習

CSI(Camera Serial Interface)定義了攝像頭外設與主機控制器之間的接口,旨在確定攝像頭與主機控制器在移動應用中的標準。 關鍵詞描述 縮寫解釋CCICamera Control Interface(物理層組件,通常使用I2C或I3C進行通信&…

internet網絡 checksum校驗和計算方法

http://hi.baidu.com/%CE%C4%B3%AD%B9%AB/blog/item/7d9a4e08f82d72b32eddd4cb.html

最有效的創建大數據模型的6個技巧

數據建模是一門復雜的科學,涉及組織企業的數據以適應業務流程的需求。它需要設計邏輯關系,以便數據可以相互關聯,并支持業務。然后將邏輯設計轉換成物理模型,該物理模型由存儲數據的存儲設備、數據庫和文件組成。 歷史上&#xff…

【轉】Castle Windsor之組件注冊

【轉】Castle Windsor之組件注冊 注冊方式較多&#xff0c;大體有這么幾種&#xff0c;學習得比較粗淺&#xff0c;先記錄&#xff1a;1、逐個注冊組件即對每個接口通過代碼指定其實現類&#xff0c;代碼&#xff1a;container.Register(Component.For<IMyService>() //接…

Verilog 補碼加法溢出判斷及處理

補碼加法運算溢出判斷三種方法&#xff1a; 一、符號位判斷 Xf、Yf分別兩個數的符號位,Zf為運算結果符號位。 當Xf Yf 0&#xff08;兩數同為正&#xff09;,而Zf1(結果為負)時,負溢出&#xff1b;當出現Xf Yf 1&#xff08;兩數同為負&#xff09;,而Zf0&#xff08;結果為…

Android繪制(三):Path結合屬性動畫, 讓圖標動起來!

Android繪制(一):來用shape繪出想要的圖形吧! Android繪制(二):來用Path繪出想要的圖形吧! 目錄 效果圖前言繪制屬性動畫最后效果圖 不廢話, 直接上效果圖, 感興趣再看下去. 其實不單單是效果圖演示的, 運用熟練的話各種圖標之間都是可以切換的. 前言 之前的文章也說了, path還…

{{view 視圖層}}微信小程序

微信小程序 view 視圖層//自學 1.數據綁定 數據綁定WXML中的動態數據均來自對應Page的data。 簡單綁定數據綁定使用"Mustache"語法&#xff08;雙大括號&#xff09;將變量包起來&#xff0c;可以作用于&#xff1a; 內容<view> {{ message }} </view>Pa…

CMOS圖像傳感器——概述

一、概述 圖像傳感器是把光學圖像信息轉換成電信號的器件。圖像傳感器是隨著電視技術在20世紀30年代發展起來的,早期圖像傳感器技術的最重要貢獻在于建立了掃描(Scan)的概念,用掃描的方法把二維空間平面上的光電信息離散成行(Line)和幀(Frame),然后按空間順序讀出形成…

nand flash壞塊管理OOB,BBT,ECC

0.NAND的操作管理方式 NAND FLASH的管理方式&#xff1a;以三星FLASH為例&#xff0c;一片Nand flash為一個設備(device)&#xff0c;1 (Device) xxxx (Blocks)&#xff0c;1 (Block) xxxx (Pages)&#xff0c;1(Page) 528 (Bytes) 數據塊大小(512Bytes) OOB 塊大小(16Byte…

小白學git2

你已經在本地創建了一個Git倉庫后&#xff0c;又想在GitHub創建一個Git倉庫&#xff0c;并且讓這兩個倉庫進行遠程同步&#xff0c;這樣&#xff0c;GitHub上的倉庫既可以作為備份&#xff0c;又可以讓其他人通過該倉庫來協作&#xff0c;真是一舉多得。 首先&#xff0c;登陸G…