DC學習(環境與面積)

1、工作環境約束
一方面是設置DC的工作環境,也就是DC要從在什麼樣的環境下對你的設計進行約束;另一方面是爲了保證電路的每一條時序路徑延時計算的精確性,特別是輸入/輸出路徑的精確性,單單靠外部的輸入延時和輸出延時的約束是不夠,還要提供設計的環境屬性。

  • 輸入管腳:驅動能力,input transition time
  • 輸出管腳:RC模型,loading模型
  • PVT conditions
  • parasitic RC:寄生RC
    在這裏插入圖片描述

(1)輸出管腳loading模型:
默認情況下,DC假設端口上的外部電容負載爲0,我們可以指定電容負載,也可以使用load_of選項明確說明電容負載的值爲工藝庫中某一單元引腳的負載(一般是選擇輸入引腳)
在這裏插入圖片描述
左圖:set_load [load of my_lib/AN2/A] [get_ports B] ;#採用工藝庫my_lib裏的AN2,A是cellAN2的pin腳
右圖:set_load {expr[load of my_lib/inv1a0/A]*3} [get_ports B] ;#採用工藝庫my_lib裏的inv1a0,三個並聯

(2)input或者inout端口設置驅動強度
默認情況下,激勵是理想的,沒有transition;也可以直接設置輸入端口的轉換時間,set_input_transition 0.12 [get_ports A];當不知道輸入轉換時間時,可以調用庫器件模型
在這裏插入圖片描述
set_driving_cell -lib_cell OR3B [get_ports A] ;#調用庫lib_cell裏的OR3B
set_driving_cell -lib_cell FD1 -pin Qn [get_ports A] ;#調用庫lib_cell裏的FD1的管腳Qn

(3)PVT(process,voltage,temperature)
工藝庫單元通常用“nominal”電壓和溫度來描述其默認特性;庫文件中,包含對各種不同條件的具體描述,如slow,fast,typical等;可以通過使用命令set_operating_conditions命令把工作條件加入到設計上。綜合時,原來按“nominal”環境計算出的單元延遲和連線延遲,將按工作條件作適當比例調整。
在這裏插入圖片描述

list_libs ;#查看當前工藝庫

report_lib libname;#查看libname的PVT等信息

設置工作條件可用下面命令:

set_operating_conditions -max $OPERA_CONDITION -max_library $LIBNAME

set_operating_conditions -max "wccom"  ;#有wccom,typical,bccom選項

(4)parasitic RC:寄生RC
在計算時序路徑延遲時,除了需要知道門單元延遲,還需要知道連線的延遲(線負載模型(wire load model,簡稱WLM)),WLM是廠商根據多種以及生產出來芯片的統計結果,在同樣的工藝下,計算出某個設計規模範圍內負載扇出爲1的連線平均長度,負載扇出爲2的連線平均長度,負載扇出爲3的連線平均長度等。WLM根據連線的扇出進行估算連線的RC寄生參數。
具體格式由工藝庫決定(下)(也可使用report_lib $lib_name 查看格式):
在這裏插入圖片描述
上圖格式中,若連線扇出爲7,而連線最大扇出爲5,連線的長度計算如下:
232.68 + 50.3104*(7-5) = 333.3008;這條連線的電容和電阻分別爲 333.30080.00017=0.0566pf,333.30080.000217=0.0903千歐

DC自動選擇線負載模型:set auto_wire_load_selection false
手動選擇線負載模型:set_wire_load_model -name $WIRE_LOAD_MODEL -library $LIB_NAME

如果連線穿越層次邊界,連接兩個不同的模塊,那麼有三種方式對這種跨模塊線連接的類型進行建模,set_wire_load_mode命令用於設置連線負載模型的模式。有三種模式供選擇:top、segment和enclosed。三種模式的示意圖如下所示:
在這裏插入圖片描述
top模式下,採用50x50;
enclosed模式下,採用40x40;
segmented模式下,sub模塊採用本模塊的參數;

2、輸入驅動,輸出負載預算

  • 輸入驅動選擇弱cell,但不能過弱
  • 輸入端口電容限制set_max_capacitance
  • 輸出端口load個數估算
    在這裏插入圖片描述

模塊輸入端口驅動的負載不大於10個“AND2”門的輸入引腳的負載,模塊輸出端口最多允許連接3模塊,如果某個輸出端需要連接多於3個模塊,我們要在代碼中複製該輸端口

在這裏插入圖片描述

Set  ALL_IN_EXCEPT_CLK  [remove_from_collection [all_inputs]  [get_ports  “$CLK_NAME”]] //DC可以將設計識別成多個對象,比如輸入端口、輸出端口等等,然後這個就是從all_inputs這個對象集合中,移除掉CLK_NAME這些代表的端口

expr是表達式求值的意思,因爲load_of取出了一個端口的負載值(因爲load_of這個命令,即命令中有命令,因此需要加[]),這個值*10 是個表達式,因此用expr來指出求值,求值是一個命令,因此用[]括了起來。

LIB_NAME:庫的名字,這裏使用的惡劣的情況
WIRE_LOAD_MODEL:線負載模型,打開slow.lib這文件,可以找到各種線負載模型
在這裏插入圖片描述
DRIVE_CELL:驅動單元,也就是用來模擬驅動輸入端的驅動單元,這要選擇庫中有的單元,比如反相器
在這裏插入圖片描述
DRIVE_PIN:驅動管腳,爲單元的輸出管腳,也就是“Y”
OPERA_CONDITION:這個操作環境也是要填寫庫裏面有的:
在這裏插入圖片描述
設置完這些變量之後,還設置了ALL_IN_EXCEPT_CLK和MAX_LOAD變量,其中ALL_IN_EXCEPT_CLK變量代表了除了時鐘之外的輸入管腳。MAX_LOAD變量就表示了最大的負載,代表的是庫中某個單元的輸入負載值

3、面積約束
(1)面積的單位

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

(2)我們用set_max_area命令爲設計作面積的約束
set_max_area 10000
(3)當設計不是很大的時候,根據上面的描述,我們就可以使用下面的命令進行面積約束,讓DC做最大的面積優化約束
set_max_area 0

4、實例
(1)設計原理圖
在這裏插入圖片描述
(2)設計規範
在這裏插入圖片描述

  • 輸入端口的驅動設置:

1、要我們使用庫裏面的bufbd1來驅動除了clk和Cin*之外的所有輸入端口:

 set_driving_cell  -lib_cell  bufbd1  -library  cb13fs120_tsmc_max  [remove_from_collection  [all_inputs]  [get_ports "clk Cin*"]]

(命令的格式爲)set_driving_cell -lib_cell 單元的名字 -library 單元所在庫的名字 要設置約束的對象
2、Cin*是芯片級的端口,需要加上120ps的最大轉化時間

set_input_transition  0.12  [get_ports  Cin*]
  • 輸出負載的約束:

1、除了cout輸出,其它輸出驅動值都是庫單元bufbd7的引腳I負載值的兩倍,也就是用單元的端口進行約束

set_load [expr 2 * {[load_of cb13fs120_tsmc_max/bufbd7/I]}] [get_ports out*]

2、cout驅動最大值爲25pf的負載

set_load 0.025 [get_ports Cout*]
  • 操作環境的設置:
set_operating_conditions -max cb13fs120_tsmc_max
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章