Vous êtes sur la page 1sur 54

Lab1 On-Line Document

Invoke Cadence On-Line Document


1. 在 terminal 裏執行
unix% /usr/cad/cadence/EDI/cur/tools/bin/cdnshelp &
如果不輸入完整路徑而真接輸入 cdsdoc,則根據 PATH 設定的順序不同可能
會執行到其它 cadence 軟體的 On-Line document。
2. 在 Language 上連點兩下,底下視窗列出 LEF 和 DEF 的文件, 再在 LEF/DEF
5.7 Language Reference 上連點兩下,右邊出現這份文件的內容。
在 LEF Syntax 上點兩下,應可看到所有 LEF 的語法說明,你可以再往下點
找到詳細的 LEF 語法。
3. 在 search topic 的地方輸入 addstripe , 按 enter , cdnshelp 找到多少個相
關文件?
4. Cadence 的 On-Line document 做得很完整,講義裏有很大部分是由這裏取
得,你可以大致瀏覽後再將 cdnshep 關閉。
5. Lab1 結束。

1
Lab2 System Startup

Copy lab material


1. 清空 home directory , 因為 CIC 的帳號有 quota 限制,所以我們先清理空間.
unix% cd
unix% \rm -rf *
2. 複製 Lab material
unix% tar xvf ~nschang/soc/Lab-A_t18.tar

Start SOC Encounter


3. 進入 Lab-A_t18 lab
unix% cd Lab-A_t18
4. 這個 Lab 的設計檔放在 design_data 目錄裏, cell library 的檔案放在 library
目錄裏, 如果你是在學校裏做這個 design, 你必須從 CIC 提供的 tsmc.18 design
kit 裏找到這些檔案.
5. 進入 soc/Lab2
unix% cd soc
unix% cd Lab2
6. 建立 SOC Encounter 的環境,並啟動 SOC Encounter:
unix% source /usr/cad/cadence/CIC/edi.cshrc
unix% encounter 不可跑背景模式(不加 &)
7. SOC Encounter 開啓後,我們就有兩個視窗,一個是原來下指令的 terminal,
另一個是 SOC Encounter 的 GUI 介面.兩個視窗都必須用到

8. 讀取存檔

File Restore Design… ,在 Restore Design file 按 打開 file browser,


,選

取 addbond.enc,按 ,

9. 一開始看到的是一個已經繞好的 desgin, 在右上角 View 的位置有三個

icon,先切到 Floorplan view

2
10. 你可以分辦出那些是 IO pad, 什麼是 power ring, 什麼是 power stripe 嗎?
Floorplan View 是在 floorplan 階段時,用來規劃整體 CHIP

11. 再切到 Amoeba view , 你會看到 core 內部被劃分成幾個區域,這些區


域是依照 design 的 module 來劃分.

12. 點選任一個 module, 切換到 Physical view , 會看到剛剛選的 module


的 cells 反白顯示.
13. 在 Physical view 裏可以看到 routing net, 現在把右邊 color control 的 Net 切
設成不顯示 , 你可能須要按一下 下的

tab 才找得到 Net 的控制.


14. 放大 core 內部,可以看到密密麻麻的 cell, 把某個 cell 放到佔滿整 art
window, cell 中間的點顯示該 cell 的 pin, 點一下某一個 pin 可看到該 pin
和其它 cell 的連線狀況
15. 將 color control 的 Inst Pin 設成可顯示 , 可以看到 Cell 內

的 pin 的完整狀況, 點選視窗最底下的 Auto Query ,將游標移到 pin 的


位置,可以看到該 pin 的 pin name 以及連接的 net name 顯示在底下.

16. 再按一下 Auto Query , 解除 Auto Query


17. 把 color control 的 Net 設成可顯示 , 依序按鍵盤上(不是鍵
盤右邊的數字鍵區)的 1 2 3 4 5,你會看到 matel layer 1 2 3 4 5 依序消失, 再
依序按鍵盤上的 1 2 3 4 5, 會看到 matel layer 1 2 3 4 5 又依序出現, 這功
能能幫我們快速 trace 連線以及找到 drc error.

18. 嘗試用 zoom in ,zoom out ,fit ,及滑鼠來觀看整個 layout 的長相

19. File Exit 離開 SOC Encounter

3
Lab3 Design Import,
, floorplan

Prepare Data
1. 在開始 APR 前, 我們須要幾個和 design 相關的檔案, 這些檔案可以在 design
的目錄找到: (目前目錄: Lab-A_t18)
unix% ls -l design

CHIP_syn.v 主要的 verilog netlist


CHIP.sdc Boundary constraint (sdc format)
CHIP.ioc IO placement constraint

2. 除了 design 相關的檔案外,我們還須要 library 相關的檔案, 這些檔案可以


在 library 的目錄找到:
unix% ls -l library

3. 先進到 design 目錄裏


unix% cd design
4. 使用 vi 看 CHIP_syn.v,
unix% vi CHIP_syn.v
在最底下可找到我們的 top module : CHIP , 你可以看到裏面已經把 input
pad (PDIDGZ), output pad (PDO24CDG) 加在裏面. 除了那些 pad 外,在
CHIP module 裏也看到我們主要的 module: DCT 在這裏被呼叫進來.
跳出 vi.
ZZ
5. 再使用 vi 看 CHIP.ioc, 各個 input 及 output pad 都已經規劃好擺放位置, 除
了 IO PAD 外, 還可看到 CORE 的 power/ground
pad(PVDD1DGZ/PVSS1DGZ),以及 IO 的 power/ground
pad(PVDD2DGZ/PVSS2DGZ), 及 4 個 corner pad (PCORNER). power/ground
等 pad 因為不在 netlist(CHIP.vg)裏, 所以必須在該行後加上 cell name.
6. 使用 vi 看 CHIP.sdc, 你可以找到我們下了那些 sdc constraint 嗎?
7. 進入 Lab3 目錄
unix% cd ..
unix% cd soc
unix% cd Lab3

4
8. 建立 SOC Encounter 的環境,並啟動 SOC Encounter:
unix% source /usr/cad/cadence/CIC/ext.csh
unix% source /usr/cad/cadence/CIC/edi.cshrc
unix% encounter 不可跑背景模式(不加 &)

Design Import
9. 在 Encounter 中,,執行 Design Import Design…, 在 Verilog 的 Files 欄

的右邊,按
按 叫出 Files 視窗,再按
按 extend 出 file browser, 回

到上兩層的 design 目錄( ../../design) ,選擇 CHIP_syn.v ,然後再按


按 ,

把 CHIP_syn.v 加到 Netlist Files 裏,最後按 關閉。 你會看見

CHIP_syn.v 已經被加入 Verilog Files 的欄位裏。


10. 下方的 Top Cell 欄,選 By User:,並輸入 CHIP

5
11. 在 LEF Files 欄, 按 出 Files 視窗,再按
按 extend 出 file browser,
回到上兩層的 library/lef 目錄(../../library/lef);首先先注意到 RF2SH64x16.vclef
這個檔是灰色的,這是因為底下的 Filter default 為*.lef,先把 把 Filters: 改成
Files(*),讓 RF2SH64x16.vclef 可選
All Files(*)

12. 選 tsmc18_6lm_cic.lef,按 。

這個檔含有 technology 資訊,一定要放第一個

13. 選 tpb973gv_6lm.lef 、tpz973gv_6lm_cic.lef 和 RF2SH64x16.vclef ,按 。

這三個檔分別是 IO bump lef 、IO pad lef、和 memory lef

14. 選 antenna.lef、RF2SH64x16_ant.lef、tsmc18_6lm_antenna_cic.lef,按 。

這三個檔是 IO/memory/standard cell 的 antenna 資訊,放在最後

15. 按 關閉 LEF Files window

16. IO Assignment File 欄位填入 ../../design/CHIP.ioc


17. 同樣在 Design Import 視窗裏,切換最上面的標籤到 Advanced 頁,選 Power
分項,並在 Power Nets 欄輸入 VDDD,Ground Nets 欄輸入 VSS
VSS。

18. 切換最上面的標籤回到 Basic 頁,接下來要設定 MMMC,選

叫出 MMMC Browser,

19. 在 MMMC Objects 裏的 Library Sets 上連按兩下(double click),叫出 Edit


Library Set 視窗,在 Name:輸入 lib_max ,

20. Timing Library Files 部分,按 ,並用 browser 找到../../library/lib


../../library/lib 目錄,

加入 slow.lib、tpz973gvwc.lib
slow.lib tpz973gvwc.lib、RF2SH64x16_slow_syn.lib
tpz973gvwc.lib RF2SH64x16_slow_syn.lib,
RF2SH64x16_slow_syn.lib

6
21. SI library Files 部分同樣 用 browser 找到 ../../library/celtic 目錄,加入

slow.cdB、RF2SH64x16.cdb
slow.cdB RF2SH64x16.cdb

22. 在 Add Library Set 視窗按 完成 lib_max 設定。

23. 回到 MMMC Browser,按底下的 ,選擇 mmmc.view,

24. 由於 MMMC 的設定相當多,為了節省時間,我們直接 load 已經設好的存檔,

展開各個項目可看到設定內容,最後按 , 成 mmmc.view

並退出 MMMC Browser(不存也沒關係,因為 mmmc.view 早就寫好了)。

上圖 Detail 的設定如下

7
Library Set:
lib_max Timing ../../library/lib/slow.lib
../../library/lib/tpz973gvwc.lib
../../library/lib/RF2SH64x16_slow_syn.lib
SI ../../library/celtic/slow.cdB
../../library/celtic/RF2SH64x16.cdb

lib_min Timing ../../library/lib/fast.lib


../../library/lib/tpz973gvbc.lib
../../library/lib/RF2SH64x16_fast@0C_syn.lib
SI ../../library/celtic/fast.cdB
../../library/celtic/RF2SH64x16.cdb

RC Corners:
RC_corner Cap Table ../../library/soc/tsmc018.capTbl
qx tech file ../../library/fireice/icecaps_5lm.tch

Delay Corners:
Delay_Corner_max library set lib_max
rc corner RC_corner

Delay_Corner_min library set lib_min


rc corner RC_corner

Constraint Modes:
func_mode sdc file ../../design/CHIP_func_ideal.sdc

scan_mode Cap Table ../../design/CHIP_scan_ideal.sdc

Analysis_Views:
av_func_mode_max constraint mode func_mode
delay corner Delay_Corner_max

av_func_mode_min constraint mode func_mode


delay corner Delay_Corner_min

8
av_scan_mode_max constraint mode scan_mode
delay corner Delay_Corner_max

av_scan_mode_min constraint mode scan_mode


delay corner Delay_Corner_min

Setup Analysis Views:


av_func_mode_max
av_scan_mode_max

Hold Analysis Views:


av_func_mode_min
av_scan_mode_min

參考下圖,確實了解這邊 MMMC 的設定

25. Design Import 視窗裏,在 MMMC View Definition File 欄位裏填入 mmmc.view
mmmc.view

26. 在 Design Import 視窗裏按


視窗 ,一會後就可以看到初始的 floorplan

9
Global Net Connect
27. 接下來我們要連接所有的 global Net,把 cell 的 power/ground pin 連接到
VDD/VSS

28. 執行 Power Connect Global Net…


29. 在 Global Net Connections 視窗裏,
視窗 Pin Name 填入 VDD, Scope 選

Apply All,To Global Net 欄位填入 VDD,然後按 ,你會看到

左邊 Connection List 裏多了一份資料

30. 接下來改在 Pin Name 欄位填入 VSS,To Global Net 欄位填入 VSS,然後按

,你會看到左邊 Connection List 裏又多了一份資料

因為這個 cell library 有 tie high 及 tie low cell,所以在這裏不處理 1’b0 及 1’b1
等 net,到後面再以加入 tiehi 及 tielo cell 方式連接
若你不使用 tie high cell 或 tie low cell,則必須執行下面兩步,但現

在我們不做 2727a 27b
a 及 27b

27a. 選擇 Tie High,在 To Global Net 欄位填入 VDD,


, 然後按 ,

這是把所有連到 1’b1 的 net 都接到 VDD.

27b. 選擇 Tie Low,在 To Global Net 欄位填入 VSS,


, 然後按 ,
這是把所有連到 1’b0 的 net 都接到 VSS

10
31. 到目前為止,左邊的 Connection List 裏有兩份資料,按 ,然後按

,你會看到 terminal 跑出很多 warning 訊息,這些訊息是說某些 cell

pin 連到 1’b1 或 1’b0,但還沒設定要怎麼樣連到 power 或 ground

32. 最後按 關閉 Global Net Connections 視窗.


視窗

33. 執行 File SaveDesign…


…,存檔成 init.enc,
init.enc

Load Scan Chain Def

34. 執行 File Load DEF,選 CHIP-scan.deff,

35. 在 encounter terminal 執行:


encounter> scanTrace

11
Scan Trace Summary 顯示 scan train 共有多少 scan bits ?
scan1: 14
scan2: 896
scan3: 895

36. 執行 File SaveDesign…


…,存成 init.encc ,

Floorplan

37. 執行 Floorplan Specify Floorplan …


38. 在 Specify Floorplan 視窗
視窗裏的 Ratio (H/W) 填入 1 , Core Utilization
填入 0.7, Core to Left 和 Core to Top 和 Core to Right 和 Core to Bottom

四個欄位裏都填入 80 , 填完後按

12
39. 按 Z(大寫,shift+z)或 , 你會看到右邊有一個大 Cell,那是一顆 ram,屬
於 hardmacro, 左邊有個粉紅色的矩形,那是 design 的 sub module

-- floorplan--

40. 執行 Floorplan Automatic Floorplan Plan Design…, 直接按

tool 幫我們計算出 Ram 的位置, 並將左邊的 module 重新整理過.

右邊 Layer control 的 頁裏,把 Instance Pin 的 visible 打開

,比較清楚 Ram 擺放的位置


41. tool 把 Ram 放在 core area 右下角,但是我想放在左上角,選用 tool wedget 上

的 ,把 Ram 抓到左上角。
42. 點選 Ram,接下來我們要為這個 ram 加上 18um 的 block hole. 執行
Floorplan Edit Floorplan Edit Halos…, 在 Edit Halos 視窗裏, 選擇
Selectd Blocks/Pads (現在這個 ram 應該在是選到的狀態) , 現在要加的是
Placement Halo, 在 Top/Bottom/Left/Right 四個欄位都填入 18, 按

,你會看到 hardmacro 周邊多了一圈紅色區域.

-- preplace timing alysis--

43. 執行 Timing Report Timing…, Design Stage 選 Pre-Place,

44. Timing analysis 的結果, Worst negative slacks(WNS)是多少?


all reg2reg in2reg reg2out in2out clkgate
-0.615 0 -0.615 0.591 88.151 0.59

45. 執行 Timing Debug Timing…,若跳出 Display/Generate Timing Report 視窗,

按 後出現 Timing Debug 視窗

46. 在 Timing Debug 視窗裏,執行 Analysis Path Group Analysis…

在 Path Category 區域分出 path group。 在 Path List 區 double clock 任一條
path,跳出 Timing Path Analyzer 視窗,研究一下這條 path timing 的狀況,為什
麼它會有 violation。
47. 關閉 Timing Path Analyzer 視窗和 Timing Debug 視窗,回到 encounter 視窗

48. 為了統一大家的 floorplan, 執行 File Load Floorplan…, 選 CHIP.fp1 ,

13

49. 執行 File Save Design…,存成 init.encc

50. Lab3 結東, 離開 SoC Encounter 或是從 Lab4 第 4 步繼續做

14
Lab4 Powerplan,
,Placement

1. 進入 Lab4
unix% cd Lab4
2. 進入 SOC Encounter
unix% source /usr/cad/cadence/CIC/ext.csh
unix% source /usr/cad/cadence/CIC/edi.cshrc
unix% encounter
3. 讀取存檔

File Restore Design… ,在 Restore Design file 按 打開 file browser,


,選

取 init.enc,按 ,

Powerplan
-- Create power ring --
4. 執行 Power Power Planning Add Ring…,在 Net(s)的欄位輸入 VDD VSS

(或按 選擇),Ring Configuration 部分 Top 和 Bottom 的 Layer 改成


METAL5H,Width 設成 8,Left 和 Right 的 Layer 改成 METAL4V,Width

也是設成 8,都填好後按一下 Spacing 右邊的 ,Spacing 會自動改成


Design rule 合法的 spicing。Offset 選 Center in channel
5. 切換到 Advanced page, 在 Wire Group 的部分,選擇 Use wire group 和

Interleaving, 並在 Number of bits 欄位填入 4 , 按

6. Core 和 IO 之間多了一圈 power ring,,分別是 VSS VDD VSS VDD…交錯排


列著.

15
-- 連接 power pad --
7. 把 color control 裏的 Instance Pin 設為 Visibe, 以方便觀察 power pin 連接.
8. 執行 Route Special Route…, 在 Net(s)欄位輸入 VDD VSS, SRoute 部分
只留下 Pad pins,其它 Block pins/Pad rings/Follow Pin/Secondary Power
都設成不選取,
Pins 都設成不選取
9. 切換 Advanced Page, 選 Pad Pins, 並把 Number of Connections to Multiple

設成 All,按
Geometries:設成 ,應該可看到 power line 從 power pad 連到

power ring 上

10. 先暫時存個檔, File Save Design …,存成 powerplan.encc,

16
-- Create power stripe --
11. 執行 Power Power Planning Add Stripes…, Net(s)輸入 VDD VSS, Layer
選 METAL4, Width 設成 4, Spacing 設成 0.28, 選擇 Sets-to-set distance,
並把 Set-to-set distance 設成 50, 底下在 First/Last Stripe 處 X from left 設
成 30, X form right 設成 50.

12. 切換到 Advanced page, 加選以下幾項:


Omit stripes inside block rings
Switch layer over obstructions
Pad/Core ring connection Allow jogging
Block ring connection Allow jogging
13. 切換到 Via Generation page, 加選以下幾項:
Use exact overlap area on partially intersecting wires
split vias while encountering Obs and different net Wires/Pins
Generate same-sized stack vias while encountering macro Pins/Obs
Connect to orthogonal targets only

14. 按 ,看到垂直 stripe 加進去。

17
15. 接下來再加上橫的 power stripe, 在 Add Stripes 視窗, 切換到 Basic page,
這次 Layer 選 METAL5, , 你會看到 Direction 自動換到 Horizontal, Width
設成 4, Spacing 設成 0.28 , 選擇 Sets-to-set distance,並設成 50, Y from
top 設成 30, Y from bottom 設成 50.
16. Advanced page 不變, 和剛才的設定一樣.
17. Via Generation page 也不變

18. 按 ,看到橫向的 stripe 加進去。

19. 存檔, File Save Design,存成 powerplan.enc,

-- Connect follow pin --

20. 執行 Route Special Route…,在 Basic page, Net(s)填入 VDD VSS,SRoute

只留下 Follow Pins,其餘不選,

-- Add IO Filler--
21. 觀看 addIoFiller.cmd 內容
unix% more addIoFiller.cmd
22. 在 encounter terminal 輸入:
encounter> source addIoFiller.cmd

23. redraw ,看到 IO Filler 已經加入,你可以 Zoom in 看是不是完全填滿

-- Add routing blockage for CUP pad --

由於本 IO library 是 CUP (circuit under pad) pad, IO pad 上方沒有 Metal 5
blockage, 保留給 bump pad 使用, 為了避免 routing 時將繞線繞到 IO pad
上方, 所以我們要先在上方加入 routing blockage

24. 執行 File Save DEF…,存成 CHIP.def,

25. 再開另一個 terminal, 進到 Lab4 目錄,


目錄 在新開的 terminal 裏執行
unix> perl addbonding_v3.6.pl CHIP.def

26. 這個 perl 程式計算出 IO pad 的位置, 並寫出兩個檔案: addRouteBlk.cmd 及


addbond.cmd. 我們現在要使用的是前面一個檔

18
27. 回到 encounter 的 terminal, 執行
encounter> source addRouteBlk.cmd
IO pad 上方加入一些 blockage, 你可以選其中一個 blockage,然後按 q 看其
詳細內容
28. 把 color control 裏的 routing Blkg 設回 unvisibe

29. 存檔, ,存成 powerplan.enc,

—Verify Geometry—

30. 執行 Verify Verify Geometry…, , 執行結束後, 在 power ring 上

是否有任何的錯誤.

31. 檢查完後有多少 Violation? 視窗裏有沒有顯示 X ?


Cells 0
SameNet 0
Wiring 0
Antenna 0
Short 0
Overlap 0

. —Verify Connectivity—
執行 Verify Connectivity… , Net Type 選 Special Only, 在 Nets 選

Named,並填入: VDD VSS, , 是否有 violation?

—Verify DRC with calibre —


32. 在 Encounter terminal 輸入:
encounter> source savegds.cmd
這個指令寫出一個 gds file,檔名 CHIP.gds
33. 新開一 terminal,並進入進入 Lab4/DRC 目錄
34. 編輯 CLM18_LM16_LM152_6M.210a_m.drc
修改以下幾個項目 (搜尋 PRIMARY,找到下面兩行):
LAYOUT PATH “GDSFILENAME”
LAYOUT PRIMARY “TOPCELLNAME”

修改成:

19
LAYOUT PATH “../CHIP.gds”
LAYOUT PRIMARY “CHIP”

35. 存檔並離開。
36. 執行 calibre drc

unix% source /usr/cad/mentor/CIC/calibre.cshrc


unix% calibre –drc CLM18_LM16_6M.28a_m.drc
37. 程式執行完後,用編輯器觀看 DRC 的結果 DRC.rep 是否有 DRC 錯誤?。
或是執行這個指令: grep ^RULECHECK DRC.rep | grep -v 0$
:
以下的 DRC 錯是可乎略的
RULECHECK NO.IND.OD.R.1 ............... TOTAL Result Count = 1
RULECHECK NO.IND.PO.R.3 ............... TOTAL Result Count = 1
RULECHECK NO.IND.M1.R.1 ............... TOTAL Result Count = 1
RULECHECK NO.IND.M2.R.1 ............... TOTAL Result Count = 1
RULECHECK NO.IND.M3.R.1 ............... TOTAL Result Count = 1
RULECHECK NO.IND.M4.R.1 ............... TOTAL Result Count = 1
RULECHECK NO.IND.M5.R.1 ............... TOTAL Result Count = 1
RULECHECK UTM20K.R.1 .................. TOTAL Result Count = 1
RULECHECK OD.R.1 ...................... TOTAL Result Count = 1

由於先進的製程有很多奇怪的 DRC rule,encounter 可能會檢查不全,所以我們


在做完 powerplan 後就先做 Calibre DRC 檢查。
如果有任何 DRC violation 一定要這時侯解決,否則到 signal 繞線後就不易修
正了

-- placement--

38. 接下來要做 placement ,執行 Place Place Standard Cells…,選 Run Full
Placement, 選取 Include Pre-Place Optimization,及 Include In-Place

Optimization ,按底下的 進入 Mode Setup 視窗

39. 在 Mode Setup 視窗裏,勾選 Specify Maximum Density,並填入 0.7,


0.7

40. 回到 Place 視窗, ,開始執行 Place cell。

20
41. 切換到 Amoeba view 看一看現在 module 的排列, 看完後切回 Physical

view

42. 執行 Place Check Placement…

是否有任何 violation?
*info: Placed = 6374
*info: Unplaced = 0

43. 存檔, ,存成 place.enc ,

-- timing analysis --

44. 執行 Timing Report Timing…, Design Stage 選 Pre-CTS,

45. Timing analysis 的結果, Worst negative slacks(WNS)是多少?


all reg2reg in2reg reg2out in2out clkgate
-0.036 0.0 -0.036 0.231 85.482 0.549

-- Optimization --
46. 如果 slack 是負的, 則必須做 optimization 解決 timing violation, 執行
Optimize Optimize Design…, Design Stage 是 Pre-CTS,Optimization Type

裏加選 Max Fanout,

Optimize 結束後, 記錄 timing report WNS


all reg2reg in2reg reg2out in2out clkgate
0.00 0.00 0.00 0.23 85.688 0.594

共有多少 real DRV (Design Rule Violation)?


max_cap 0
max_tran 0
max_fanout 0

47. 存檔, ,存成 place.enc ,

Lab4 結東, 離開 SoC Encounter 或是從 Lab5 第 4 步繼續做

21
Lab5 clock tree synthesis

1. 進入 Lab5
unix% cd Lab5
2. 進入 SOC Encounter
unix% source /usr/cad/cadence/CIC/ext.csh
unix% source /usr/cad/cadence/CIC/edi.cshrc
unix% encounter
3. 讀取存檔

File Restore Design… ,在 Restore Design file 按 打開 file browser,


,選

取 place.enc, ,

Clock Tree Synthesis


4. 把 color control 的 Routing Blkg 的 Visible 及 Selectable 關閉
-- Update sdc constraint --
5. 執行 Timing Configure MMMC…,叫出 MMMC Browser,展開 展開 Constraint
Modess,
Mode
6. 在 func_mode 上 double click,跳出
click Edit Constraint Mode 視窗,原本的 SDC
Constraint File 是 ../../design/CHIP_func_ideal.sdc,把這個檔刪除,改加

入 ../../design/CHIP_func_prop.sdcc, 。

7. 再在 scan_mode 上 double click,跳出


click Edit Constraint Mode 視窗,原本的 SDC
Constraint File 是 ../../design/CHIP_scan_ideal.sdc,把這個檔刪除,改加

入 ../../design/CHIP_scan_prop.sdcc, 。

8. 回到 MMMC Browser,

*ideal.sdc 和 *prop.sdc 的主要差別是,prop.sdc 拿掉 clock unsertancy 和


clock latency 的設定,並加進 set_propagated_clock

22
-- Clock tree synthess--

9. 執行 Clock Synthesize Clock Tree, 在 Synthesis Clock Tree 視窗裏按

,在 Generate Clock Spec 視窗裏, 把左邊 Cells List 裏的

CLKBUF*及 CLKINV*等 cell 加到右邊 Selected Cells 裏

Output Specification file 取名為 Clock.ctstch,

10. 回到 terminal, 使用 vi 編輯 Clock.ctstch, 找到 MaxDelay 和 MinDelay 的設


定, 把 MaxDelay 改成 2ns, MinDelay 改成 0ns, 改完後存檔離開

11. 回到 Synthesize Clock Tree 視窗, Clock specification File 保留 Clock.ctstch,

12. CTS 開始執行, 結束後, 在 log 可以找到 CTS 做完的 clock timing 結果, 或
是你也可以在 clock_report/clock.report 裏到同樣的結果, 各項數值為何? 是
否符何我們的 constraint?
Nr. of Sinks: 1825
Nr. of Buffer: 101
Nr. of Level : 10
Rise Phase Delay: 2278~3059(ps)
Fall Phase Delay: 1590~2264 (ps)
Trig. Edge Skew: 223.8 (ps)
Rise Skew: 780 (ps)
Fall Skew: 673 (ps)

23
13. 執行 Clock Display Display Clock Tree…
在 Display Clock Tree 視窗裏,Display Selection 部分選擇 Display Clock

Tree 和 All Level,

14. 切換到 physical view, 把 net display disable, 你看到整個 clock tree 的分

15. 在 Display Selection 部分改選擇 Display Clock Phase Delay,


, ,

這次顯示的顏色表示 Phase Delay 的程度,紅色表示 Delay 最多,藍色是最少.

16. 最後改選 Display Min/Max Pathss, 看到畫出 max 和 min 兩條 path

17. 執行 Clock Display Clear Clock Tree Display

18. 執行 Clock Browse Clock Treer…, 在 Clock Tree Browser 視窗裏選 CLK ,

, Post-CTS, , 你看到 Clock Tree Browser 視窗跳出

19. 在 Clock Tree Browser 裏, 執行 Display Hide/Show …Input delay , 在


每一個 leaf instance 的後面顯示其 input transition time.
20. 看看 Edit 選單裏有那些選項,這些選項可以讓我們手動修改 clock tree.
21. 執行 Browser Close, 關閉 Clock Tree Browser

22. File Save Design …, 將結果存成 cts.enc ,

-- Timing Analysis--

23. Timing Report Timing…,執行 timing analysis,Design Stage 選 Post-CTS,

,timing 結果為何?

all reg2reg in2reg reg2out in2out clkgate


-1.39 0.000 0.000 -1.39 85.674 1.715
由於 clock latency 比我們預估的還要長,造成 reg2out timing 不 meet

24. 執行 Optimize,執行 Optimize Optimize Design..., Design Stage 選

Post-CTS, 結果 timing 如何

All reg2reg in2reg reg2out in2out clkgate


-0.278 0 0 -0.278 86.584 1.713

24
25. slack 還是負的,執行 Timing Debug 研究一下原因,Timing Debug Timing…,

若跳出 Display/Generate Timing Report 視窗,直接按

26. 在 Timing Debug 視窗底下 Path List 裏,double click 任一條 slack 為負的
PATH,研究一下這條 PATH 的問題,然後關閉 Timing Path Analyzer 和 Timing
Debug 視窗

25
27. 接下來做 hold time analysis,執行一次 Timing Report Timing…,Design Stage

選 Post-CTS, Analysis Type 選 Hold, ,hold time timing 為何

all reg2reg in2reg reg2out in2out clkgate


0.182 0.182 1.64 4.875 8.762 0.246
28. slack 雖然是正的,我們還是執行 Optimize,執行 Optimize Optimize Design...,

Design Stage 選 Post-CTS, Optimization Type 加選 Hold , ,結

果如何?
Setup Mode
All reg2reg in2reg reg2out in2out clkgate
-0.278 0.000 0.000 -0.278 86.592 1.713

Hold Mode
All reg2reg in2reg reg2out in2out clkgate
0.182 0.182 1.64 4.873 8.763 0.245

-- Add Tie Hi/Lo cell --

29. 執行 Place Tie HI/LO Add …, 先按底下的 ,叫出 Mode 視窗,

選 Specify Maxinum Fanout 及 Specify Maximum Distance, Maximum

fanout 設成 20, Maximum Distance 設成 100,按 Cell Names 右邊的 ,

加入 TIEHI 和 TIELO, , ,回到 Add Tie Hi/Lo 視窗裏

共加入幾個 TIEHI cell? 17 ,幾個 TIELO cell? 24

30. File Save Design …, 將結果存成 cts.enc ,

26
31. 在 encounter terminal 執行 checkDesign –tieHiLo
encounter> checkDesign -tieHiLo

Number of Input/InOut Floating Pins 應該是 0

Number of Output Pins connect to Power/Ground *: 0


Number of Insts with Input Pins tied together ?: 141
Number of TieHi/Lo term nets not connected to instance's PG terms ?: 0
Number of Input/InOut Floating Pins :0
Number of Output Floating Pins :0
Number of Output Term Marked TieHi/Lo *: 0

32. Lab5 結東, 離開 SoC Encounter 或是從 Lab6 第 4 步繼續做

27
Lab6 Power Analysis

1 進入 Lab6
unix% cd Lab6
2 進入 SOC Encounter
unix% source /usr/cad/cadence/CIC/ext.csh
unix% source /usr/cad/cadence/CIC/edi.cshrc
unix% encounter
3 讀取存檔

File Restore Design… ,在 Restore Design file 按 打開 file browser,


,選

取 cts.enc, ,

simulation
4 把 color control 的 Routing Blkg 的 Visible 及 Selectable 關閉

5 執行 File Save Netlist...,將 netlist 存成 CHIP.v,

6 Timing Extract RC...,

7 執行 Options Set Mode specify Analysis Mode…,把 Timing Mode 改成

Best and Worst Case.,

8 在 encounter terminal 執行 source savesdf.cmd


encounter> source savesdf.cmd
savesdf.cmd 裏面的內容:
setAnalysisMode -analysisType bcwc
write_sdf -max_view av_func_mode_max \
-min_view av_func_mode_min \
-edges noedge -splitsetuphold -remashold -splitrecrem \
–min_period_edges none CHIP.sdf
因為 GUI Timing Write SDF…的選項太少,我們用指令寫出 sdf,寫出來的
sdf 檔才比較方便用來模擬

28
9 開一個新的 terminal, 並進入到 Lab6(或是你的工作目錄)目錄裏 (若你在其
它的 Lab 目錄, 則把 Lab6 裏的 post_sim 目錄 copy 過來)
10 進入 post_sim 目錄
unix% cd post_sim
11 執行 verilog
unix% source /usr/cad/cadence/CIC/incisiv.cshrc
unix% ncverilog –f vlog.f
12 執行完後應該會產生一個 vcd 檔, CHIP.vcd ,這個檔要拿來當做 power 分
析的根據
13 把這個檔搬回上層目錄
unix% mv CHIP.vcd ..

Power Analysis
--static power analysis --

14 回到 encounter 視窗,執行 Power Power Analysis Setup…,

15 執行 Power Power Analysis Run …, 選 Activity File VCD , 並填入


以下資訊
VCD File CHIP.vcd
Scope: test/CHIP start 0 stop: 1788 Block

16 輸入好後按 ,
17 結束後 power consumption 是多少?
Total Internal Power: 24.18 75.71%
Total Switching Power: 7.734 24.22%
Total Leakage Power: 0.02196 0.06876%
Total Power: 31.93
18 若想知道每一個 cell 的 power 資訊,可看 CHIP.rpt
unix% more CHIP.rpt

--power graph --
19 執行 Power Report Power & Rail Result…, State 選 power Database, 並
輸入 power.db , 這檔是剛才做 power analysis 所產生出來的 data.

20 Plot 處的 Power Analysis Plot Type 選 ip-Instance Total Power, ,

結果秀出每個 cell 的 power consumption.

29
21 在 Action 選 Clear Display, 按 ,關閉 power graph

--dynamic power analysis --

22 若希望看到動態的 power 消耗情形, 可以執行 dynamic power analysis,做


dynamic power analysis 比較麻煩,必須先建 power grid library
23 執行 Power Rail Analysis PowerGrid Library Set Power GridLibrary
24 跳出 set Power Library Mode 視窗,
Extraction Tech File 輸入 ../../library/fireice/icecaps_5lm.tch ,
LEF-Tech Map 輸入 ../../library/fireice/lefdef_libgenn.layermap.,

Power Pin 的 Voltages 輸入 1.8,


1.8

25 執行 Power Rail Analysis Characterize PowerGrid Library


26 跳出 Create Power Library 視窗,Cell List File 輸入 cell.list , Filler Cells 輸

入 FILL64 FILL32 FILL16 FILL8 FILL4 FILL2 FILL ,

執行結束後,在目前目錄產生 fast_allcells.cl 的目錄,這就是 power grid library

30
27 執行 Power Power Analysis Setup…, ,Analysis Method 選 Dynamic,
Dynamic Power Method 仍選 Vectorbased,勾選 Analysis View ,並選

av_func_mode_min,PowerGrid
av_func_mode_min Library 輸入 fast_allcells.cl

28 Power Power Analysis Run, 該輸入的之前都輸入好了,直接按

29 執行完後,看 power.rpt 裏,Internal power , Switching Power, Leakage


Power, Total Power,分別是多少
Group Internal Switching Leakage Total Percentage
Power Power Power Power (%)
---------------------------------------------------------------------------------------------------------------------------
Sequential 19 0.9489 0.003246 19.95 37.34
Macro 5.912 0.00573 0.007 5.925 11.09
IO 11.53 4.024 0.008755 15.57 29.13
Combinational 3.454 2.745 0.003739 6.203 11.61
Clock (Combinational) 2.673 3.124 0.0001147 5.797 , 10.85
Clock (Sequential) 0 0 0 0 0
---------------------------------------------------------------------------------------------------------------------------
Total 42.57 10.85 0.02285 53.44 100

31
Rail Analysis
--static power graph --

30 執行 Power RailAnalysis Setup Rail Analysis..


..,跳出 Set Rail Analysis Mode
視窗
31 PowerGrid Library 輸入 fast_allcells.cll,勾選 Analysis View ,並選

av_func_mode_min,
av_func_mode_min

32 執行 Power RailAnalysis Run Rail Analysis…,


選 Domain Basedd,Domain Name 輸入 PD,按
PD 按 enter 一定要按 enter
Power Net 的 Voltage 輸入 1.8,Threshold 輸入 0.1
Ground Net 的 Voltage 輸入 0,Threshold 輸入 0.1
Power/Current File 輸入 static_VDD.ptiavg static_VSS.ptiavg
Power Pad 選 XY File

按右邊的 ,跳出 Edit Pad Location 視窗

33 在 Edit Pad Location 視窗裏,Net 輸入 VDD,按 ,底下的 Pad

Location List 抓到 3 個 VDD pad,按 存下來,檔名叫 CHIP_VDD.pp,


CHIP_VDD.pp

34 回到 Edit Pad Location 視窗裏,Net 輸入 VSS,按 ,底下的 Pad

Location List 抓到 3 個 VSS pad,按 存下來,檔名叫 CHIP_VSS.pp,


CHIP_VSS.pp

35 關閉 Edit Pad Location 視窗


36 回到 Run Rail Analysis 視窗,Power Pad File:輸入 CHIP_VDD.ppp,Net Name

輸入 VDD,按

37 Power Pad File:改輸入 CHIP_VSS.ppp,Net Name 輸入 VSS,按

38 開始執行。

32
--rail result --
39 執行 Power Report Power&Rail Resultt,跳出 Power&Rail Result 視窗

40 State Directory 部分,按 ,進 PD_25C_avg_1,選 VDD,

回到 Power&Rail Result 視窗,按

41 Plot 區選 Rail Analysis Plot Type,右邊下拉選單選 ir-IR Dropp,勾選最底下


的 Auto Apply,在 Auto Filter 按 Auto,應該可以看到 ir drop 的結果。
IR drop 的顯示以 8 種顏色分層顯示,每一種顏色代表的壓降程度可從 Power
&Rail Results 視窗的 Filter Info 處找到.

42 把 display control 的 Instance , Net , Special Net 設成 un-visible 會比較清

,你可以看看其它的 power graph, 然後按


楚, 結束。

33
--dynamic rail analysis --

43 以下執行會花很長時間,請不要在 CIC 做,直接結束跳到 Lab7


44 執行 Power RailAnalysis Set Rail Analysis..
..,跳出
.. Set Rail Analysis Mode

視窗, Analysis Method 選 Dynamic,

45 執行 Power RailAnalysis Run Rail Analysis…,

46 Power/Current File 部分,按右邊的 browse ,把原來的 static_VDD.ptiavg


和 static_VSS.ptiavg 刪掉,改加入 dynamic_VDD.ptiavg 和 dynamic_VSS.ptiavg
47 切換到 Advanced page,Dynamic Start Time 輸入 10ns,Stop Time 輸入 100ns,

Resolution 輸入 500ps,

--power movie --
48 執行 Power Report Dynamic Movie,Movie Directory 選

PD_25C_dynamic_1/VDD/movie_analysis,

49 Analysis Type 選 tc- Tap Current,按

50 應該可以看到 tap current 的變化,你也可以看 ir drop 的 movie, 但這個 design

沒有 ir drop, 所以沒什麼好看的。 跳出

51 Lab6 結東, 離開 SoC Encounter 或是從 Lab7 第 4 步繼續做

34
Lab7 Route,
,SI Analysis,
, Stream

out

1. 進入 Lab7
unix% cd Lab7
2. 進入 SOC Encounter
unix% source /usr/cad/cadence/CIC/ext.csh
^^ (這個 lab 會用到,請記得 source ext.csh)
unix% source /usr/cad/cadence/CIC/edi.cshrc
unix% encounter
3. 讀取存檔

File Restore Design… ,在 Restore Design file 按 打開 file browser,


,選取

cts.enc, ,

Route
4. 把 color control 的 Routing Blkg 的 Visible 及 Selectable 關閉
5. 執行 Route NanoRoute Route…, ,在 Routing Phase 區域的 Post Route
Optimization 加選 Optimize Via 及 Optimize Wire
6. 在 Concurrent Routing Feature 區域, 點選 Insert Diodes, Diode Cell Name
輸入 ANTENNA , 勾選 Timing Driven, SI Driven 和 Post Route SI

7. , NanoRoute 開始執行

8. File Save Design …, 將結果存成 route.enc ,

-- Timing Analysis , Post route Optimization--

9. 執行 Timing Report Timing, Design Stage 選 Post-Route, Analysis Type

選 Setup,選 Include SII, , 執行完之後, timing 如何

35
all reg2reg in2reg reg2out in2out clkgate
-0.276 0 -0.007 -0.276 86.534 1.25
10. 若 slack 是負的, 則需做 Optimize
11. 執行 Optimize Optimize Design,Design Stage 選 Post-Route, Include

SII ,

12. 接下來換分析 hold time, Timing Report Timing, Design Stage 選

Post-Route, Analysis Type 選 Hold,選 Include SII,

hold time timing 是如何?


all reg2reg in2reg reg2out in2out clkgate
0.183 0.183 1.642 4.871 8.778 0.246

13. 若 slack 是負的, 則需做 Optimize


14. 執行 Optimize Optimize Design,Design Stage 選 Post-Route,Optimization

Type 加選 Hold,

15. 存檔, ,存成 route.enc ,

--Display Noise Net--


16. 執行 Optimize Display noise Net…,Celtic output directory 選

celtic/av_func_mode_min, ,選 Victim Noise File, 並輸入

celtic/av_func_mode_max/celtic.txt.gz,Peak Noise Threshold 定在 20%Vdd,

17. 結果跳出 Noise 大於 20%Vdd 的 net, 任選一條 net,在上面 double click,,


在 layout 上會秀出這條 net 的繞線及 Aggressor net 的繞線,把 display control
的 Net 關閉會看得比較清楚。

18. 按 , 跳出 Design Browser 視窗顯示 Aggressors 的情形,

19. 關閉 Design Browser 視窗及 Celtic Result Browser 視窗.

36
-- Sign-Off Timing Analysis --
20. 設定 Stand along QRC extraction 時所需的 layer map
encounter> setExtractRCMode –lefTechFileMap ../../library/fireice/lefdef.layermap2
21. 執行 Timing Report Timing, Design Stage 選 Sign-Off, Analysis Type 選

Setup,選 Include SII, ,encounter 自動外掛 QRC 執行,結果

timing 如何
all reg2reg in2reg reg2out in2out clkgate
-0.727 0.000 0.000 -0.727 86.257 1.696

-- Add Core Filler --

22. 執行 Place Physical Cells Add Filler …,在 Add Filler 視窗裏, 按

進入 Select Filler Cells 視窗, 選取右邊 Cells List 裏全部的 filler,按

加到左邊 Selectable Cells List 裏,

23. 在 Add Filler 視窗裏按 ,encounter 自動從最大的 filler 加到最小 filler.

24. 執行 Verify Verify Geometry…, , 是否有 Geometry Error (IO Pad

部分的 IO Filler overlap 可乎略)

25. 存檔, ,存成 add_corefiller.enc ,

-- add dummy metal --


26. 執行 Route Metal Fill Setup…,切到 Window&Densigy 頁,把所有 METAL

layer 的 Max Metal Density%從 80 改成 50,

27. 執行 Route Metal Fill Add…, 取消 Tie High/Low to net(s), Timing Aware
處選 Critical netfrom Timing Analysis, ,並輸入 0.4,

28. , 整個 layout 全部被 dummy metal 填滿.

37
29. 存檔, ,存成 metalfill.enc ,

30. Verify Verify Geometryy,

31. Verify Verify Connectivity,

32. Verify Verify Process Antenna,

-- finish --

33. 執行 File Save Netlist…, Netlist File 填入 CHIP_pr.v,

34. 寫出 sdf,在 encounter terminal terminal 執行 source savesdf.cmd


encounter> source savesdf.cmd
產生 CHIP.sdf
35. 執行 File Save DEF…,點選 Save Scan,File Name 填入 CHIP.def,

-- add bonding pad --


36. 到 encounter terminal 執行
encounter> source addbond.cmd
addbond.cmd 是在 Lab4 產生出來的,你也可以在這裏再產生一次.
在 encounter 的視窗,可以看到 IO pad 上方加上了一些 cell,那就是 bonding pad.

-- 手動加入 IO power label --


37. 為了在 LVS 驗證與 posim extraction 時可以找到 IO power 的位置,我們要在
export GDS 之前,在 IO power pad 外加上 power label. 預計輸入的位置在右
下角的 pad_IOVDD4 及 pad_IOVSS4(east 邊第 1 及第 3 個)上的 bounding pad
上.
38. 在 encounter 的 terminal 輸入:
encounter > addCustomText METAL5 IOVDD 1017 340 10
encounter > addCustomText METAL5 IOVSS 1017 226 10
39. zoom in 到右下角會看到 IOVDD 及 IOVSS 被加到這兩個座標

40. 存檔, ,存成 addbond.enc ,

38
-- stream out gds --

41. 首先我們要先產生 memory 的 gds file,方法是將 memory lef 轉成 gds, 在


terminal 裏輸入:
%unix> cp ../../library/lef/RF2SH64x16.vclef . 不要忘了最後這個點
%unix> perl lef2gds_v1.pl RF2SH64x16.vclef -t lef2gds_T18.tech
執行完後產生了 RF2SH64x16.gds

42. 存出 gds file,在 encounter terminal 輸入


encounter> source savegds.cmd
savegds.cmd 的內容:

setStreamOutMode -specifyViaName default \


-SEvianames false \
-virtualConnection false \
-uniquifyCellNamesPrefix false \
-snapToMGrid false \
-textSize 1 \
-version 3

streamOut CHIP.gds -mapFile streamOut.map \


-merge { ../../library/gds/RF2SH64x16.gds \
../../library/gds/tpb973gv_cic_0830.gds \
../../library/gds/tsmc18_core.gds \
../../library/gds/tsmc18_io.gds } \
-stripes 1 -units 1000 -mode ALL
因為 Save gds 的 GUI 實在不好用,還是用 script 方式執行比較方便。

43. File Exit ,

39
Lab8 Stream In GDS

在這個 Lab 裏, 我們把 APR 完成的 layout 讀入 Laker 裏, 但是不做任何處理,


這個 Lab 的目的只是要讓大家從 Layout Editor 裏看到自己完成的 design, 因為
所有的晶片下線都是以 gds 檔為主, 而我們不敢保證 SOC Encounter 經過 merge
gds 及 layer mapping 後產生的 gds 是正確的, 所以有必要在 layout Editor 裏檢查.
讓大家使用 layout editor 的另一重要原因是, 很有可能 layout 在 DRC 或 LVS 有
錯時必須進 layout editor 裏除錯或修改.

1. 進入 Lab8
unix% cd Lab8
Lab8 目錄裏目前已有一個 CHIP.gds, 以及 Laker 的 technology file:
Laker_MM_18S_1.8+3.3_1P6M_20K_2.7c.tf
2. 進入 icfb
unix% source /usr/cad/spring_soft/CIC/laker.cshrc
unix% laker&

-- Stream In Design --

1. 在 Laker_L3 裏執行 File Import stream . . .,


,在 Stream In 視窗裏 Input
File Name 填 CHIP.gds,Top Cell Name 不必填,Library Name 填 CHIP,
ASCII Technology File Name 填,
Laker_MM_18S_1.8+3.3_1P6M_20K_2.7c.tf,OK。

2. 執行 File Open…,Library 輸入 CHIP,Cell 欄輸入 CHIP,然後選取 View


欄的 layout,OK
3. layout 打開後,選 Window Layer Table Attach_Left,Layer table 跑到左邊
4. 使用滑鼠右鍵放大 core 內部某區域,內部已經被 dummy metal 填的密密麻麻,

40
5. 先把 layer table 裏的 dummy metal 設成不顯示: 在 Layer table 底下有個輸入欄
位,在裏面輸入 *METAL* ,按 Enterr,Layer table 現在只剩 METAL*的 layer

6. 在 Layer table 找到 的 layer, 在上面按滑鼠右


右鍵,

, 表示這層 layer 不顯示.

7. 同樣方式, 把

都設成不顯示.

8. 回到 layout editor, 按 CTRL+ r , redraw 後 dummy metal 全部不見了.


9. layout editor 的指令:
zoom in : ctrl + z
zoom out: shift + z
fit: f
display all hierarchy : shift + f
display top hierarchy: ctrl + f
使用這些指令看看 layout 長相.
10. 找到我們之前加 IOVDD 和 IOVSS 的位置 (右下 IO 的第 1,3 個 bounding
pad) , 你可能要 zoom in 到夠大才看得到這兩個 label.
11. 選擇其中一個 label, 按 q, 這個 label 是用那一層 Layer? METAL5_pin ,
Cancel 關閉 Properties 視窗.
--Stream Out --
12. 在 Laker_L3 window 中執行 File Export Stream,在 Stream Out 視窗中
的 Library Name/Top Cell Name 分別填入 CHIP/CHIP,Output File 欄位填入
CHIP.gds2,按 OK 開始執行 stream out 的動作。這個 stream out 的 gds 我們
不會使用到, 只是讓大家練習.
13. 在 Laker_L3 執行 File Exit…,離開 Laker

41
Lab9 DRC LVS
1. 進入 Lab9
unix% cd Lab9

我們必須先複製須要的檔案進來
2. 複製 calibre 的 drc 及 lvs 相關檔案
unix% cp –r ../../library/calibre/drc . 不要忘了最後這個點( . )
unix% cp –r ../../library/calibre/lvs .

3. 複製 design 的 gds 及 verilog file


如果你有自已完的的 gds 及 verilog, 則使用自己的檔案, 如:
unix% cp ../Lab7/ CHIP.gds .
unix% cp ../Lab7/CHIP_pr.v .
或是你也可以使用 Lab 裏準備好的 gds 及 verilog
unix% cp ../../design/ CHIP.gds .
unix% cp ../../design/CHIP_pr.v .

DRC
4. 進入 drc 目錄
unix% cd drc
5. 編輯 CLM18_LM16_LM152_6M.210a_m.drc
修改以下幾個項目 (搜尋 PRIMARY,找到下面兩行):
LAYOUT PATH “GDSFILENAME”
LAYOUT PRIMARY “TOPCELLNAME”

修改成:
LAYOUT PATH “../CHIP.gds”
LAYOUT PRIMARY “CHIP”

6. 存檔並離開。
7. 執行 calibre drc

unix% source /usr/cad/mentor/CIC/calibre.cshrc


unix% calibre –drc CLM18_LM16_LM152_6M.210a_m.drc
8. 程式執行完後,用編輯器觀看 DRC 的結果 DRC.rep。

42
9. 尋找最後的 RULECHECK RESULT STATISTICS 的部分:
RULECHECK HRI.WARN ........................... TOTAL Result Count = 0
RULECHECK NW.W.1 ........................... TOTAL Result Count = 0
RULECHECK NW.W.2………................. TOTAL Result Count = 0
...
RULECHECK SBD.R.5………………... TOTAL Result Count = 0
10. 是否有 Result Count 不是 0 的部分?
11. 應該會看到幾個 DRC error,
NO.IND.OD.R.1
NO.IND.PO.R.3
NO.IND.M1.R.1
NO.IND.M2.R.1
NO.IND.M3.R.1
NO.IND.M4.R.1
UTM20K.R.1
OD.R.1
DRM.R.1
這幾個 DRC 指的是 metal 及 poly 的 density 不足,可以不必理會,

關於 Error number 的意義, 可以直接查 calibre command file


CLM18_LM16_LM152_6M.210a_m.drc , 直接搜尋該 error number 即可找到

如果你熟悉 unix 指令,善用這些指令可以事半功倍,如


unix% grep ^RULECHECK DRC.rep | grep -v 0$

LVS
1. 回到 Lab9 目錄
unix% cd ..
2. 進入 lvs 目錄
unix% cd lvs
3. 有兩個和 RAM 相關的檔案已經在這個目錄裏:
RF2SH64x16.spi
RF2SH64x16.v
若是自己在做設計,且有使用到 RAM,則必須參照這兩個檔編輯所用到的

43
RAM 的相關檔案

-- v2lvs --
4. 首先我們必須先把 CHIP.v 轉換成 SPICE 格式,輸入:
unix% source /usr/cad/mentor/CIC/calibre.cshrc
unix% v2lvs –v ../CHIP_pr.v
–l tsmc18_lvs.v
-l tpz973gv_lvs.v
–l RF2SH64x16.v
–s tsmc18_lvs.spi
-s tpz973gv_lvs.spi
–s RF2SH64x16.spi
–o source.spi
–s1 VDD –s0 VSS
以上 7 行為同一行指令, 請勿斷行
確定 source 的 output 檔:source.spi 有產生出來
5. 編輯 Calibre.lvs
5.1 須要修改的地方有(第 406 行):
LAYOUT PRIMARY “ts_allcelllvs”
LAYOUT PATH “ts_allcelllvs.gds”
LAYOUT SYSTEM GDSII

SOURCE PRIMARY “ts_callcelllvs”


SOURCE PATH “ts_allcelllvs.cdl”
SOURCE SYSTEM SPICE

改成:
LAYOUT PRIMARY “CHIP”
LAYOUT PATH “../CHIP.gds”
LAYOUT SYSTEM GDSII
LAYOUT CASE YES 新加入行

SOURCE PRIMARY “CHIP”


SOURCE PATH “source.spi”
SOURCE SYSTEM SPICE
SOURCE CASE YES 新加入行

44
上面新增兩個 case sensitivity 的選項, 表示 layout netlist 和 source netlist
都是 case sensitivity.

5.4 在檔案最後新增一行:
LVS BOX RF2SH64x16
加入這行是因為我們要把這顆 ram 當成 blackbox
5.5 在 LVS BOX 處, 確定 power pad, corner pad, bonding pad, filler 都
已移除

// LVS BOX FILL1


// LVS BOX FILL16
// LVS BOX FILL2
// LVS BOX FILL32
// LVS BOX FILL4
// LVS BOX FILL64
// LVS BOX FILL8

// LVS BOX PAD50ARU


// LVS BOX PAD60NU
// LVS BOX PAD70NU
// LVS BOX PAD80NU

//LVS BOX PCORNER

//LVS BOX PFILLER0005


//LVS BOX PFILLER05
//LVS BOX PFILLER10
//LVS BOX PFILLER1
//LVS BOX PFILLER20
//LVS BOX PFILLER5

//LVS BOX PVDD1ANA


//LVS BOX PVDD1DGZ
//LVS BOX PVDD2ANA
//LVS BOX PVDD2DGZ
//LVS BOX PVDD2POC
//LVS BOX PVSS1ANA

45
//LVS BOX PVSS1DGZ
//LVS BOX PVSS2ANA
//LVS BOX PVSS2DGZ
//LVS BOX PVSS3DGZ

將這幾行移除的原因是因為我們的 verilog netlist 沒有這些 cell, 而


layout 有,所以希望 calibre 不把這些 cell 當 black box 看待.
5.6 存檔

-- Calibre LVS --
6 執行 Calibre LVS
unix% calibre –lvs –spice layout.spi –hier –auto Calibre.lvs

7 編輯結果檔 lvs.rep,找到 OVERALL COMPARISON RESULT 的部分,是不


是打個大勾,若是則表示 LVS 沒問題了

46
Lab10 Post-layout Timing

Analysis

在這個 lab 中你將練習使用 nanosim 做 simulation。做 nanosim 之前,你必須先向


CIC 申請帳號,並 telnet 至 queue.cic.edu.tw 的機器。
1. 將 Lab10 的資料以 ftp 方式上傳至 queue server 上

-- Layout Parasitic Extraction --


2. CIC 提供 Qentry 這個介面來做 LPE 及 nanosim。
執行 Qentry,看看有那些參數
unix% Qentry

3. 使用 Qentry 做 LPE, 進入 lpe 目錄,並輸入


unix% cd LPE
unix% Qentry -M LPE -f CHIP.gds –s RF2SH64x16.spec -t
t18rf2sh -c TSMC18 -I TSMC18 -o CHIP.spi
4. unix% ls
你會發現多了一個 result_xxxx 的目錄,這個目錄目前是空的,等到程式執行
完後會將執行結果複製到這個目錄裏

5. 執行 Qstat 觀看 queue 的狀態:


unix% showq

應該可以找到你的帳號名稱及你的工作執行狀態,是正在執行還是在排隊?
6. 若 LPE 順利結束,你應該可以得到下面幾個檔:

tracedrac caliber LPE log file


CHIP.spi encrypted Layout netlist(transistor level)
這是在 lpe –o 指令指定的名稱
nodename netlist 的 IO port

47
TOP_CELL.NAME 在 layout 裏的 top cell name
spice.header 執行 nanosim 時所須要的 header file
nanosim.run 程式提供的執行 nanosim 的範例
*.log 一些 stream in, stream out 或是
memory generator 產生的 log

-- Nanosim simulation --

7. 切換工作目錄到 vcs_ns,並把 result_xxxx 的結果複製到這個目錄:


unix% cd ../vcs_ns
unix% cp ../lpe/result_xxxx/spice.header .
unix% cp ../lpe/result_xxxx/CHIP.spi .
unix% cp ../lpe/result_xxxx/nodename .

8. 使用 Qentry 做 nanosim。輸入
unix% Qentry -M VCS_NS -v vlog.f –l
compile.log –ad=vcsAD.init
同樣的你也可以看看工作狀況:
unix% showq
執行結束後可得到 CHIP.fsdb 及 nanosim.log。

9. 觀看 simulation.log,在最底下可找到流經 VDD 和 VSS 的平均電流


Node: vdd
Aerage current : -3.08097e+04 uA
RMS current : 5.53880e+04 uA

10. 將 CHIP.fsdb ftp 回自己的工作站,使用 debussy nWave 觀看 nanosim 模擬結


果:

48
Labfda Encounter Foundation Flow

1. 本 Lab 以 CBDK_TSMC90G_Arm cell library 示範,複製 Lab material


unix% tar xvf ~nschang/soc/Lab-A_t90.tar
1. 進入 Labff
unix% cd Lab-A_t90/soc/Labff
2. source SOC Encounter cshrc
unix% source /usr/cad/cadence/CIC/edi.cshrc
unix% source /usr/cad/cadence/CIC/ext.cshrc

Prepare Data
3. 在 Design data 部分,已準備好幾個設定檔。

floorplan.enc Encounter 存檔
CHIP-scanDEF scan def,合成時寫出的檔案

4. 另有一個完成到 powerplan 的 design “floorplan.enc“,進入 encounter,並打開


此存檔
unix% encounter
File Restore Design… ,讀取 floorplan.enc
5. 觀察一下 design,在進入 foundation flow 前,至少要將 design powerplan 完成。
6. 執行 File Save Floorplan… ,將目前 floorplan 存出,檔名叫 CHIP.fp

7. 執行 Clock Synthesize Clock Tree…, 按 ,把 CLKINV* 和

CLKBUF* 到右邊 list 裏, 存出 Clock.ctstch


Clock.ctstch.
.ctstch

在 Synthesize Clock Tree 視窗按 跳出,不要執行

8. 編輯 Clock.ctstch,把 MaxDelay 改成 2ns

49
-- 建立 script 環境 -
9. 在 encounter terminal 輸入:
encounter> writeFlowTemplate
這個指令有 GUI menu,在 Flows Create Foundation Flow Templates Save,
擇一使用即可
執行後在目前目錄產生出 SCRIPTS 等目錄

-- 建立 initial setup 設定檔 --


10. 在 encounter terminal 輸入
encounter> source SCRIPTS/gen_edi_setup.tcl
執行後產生 setup.auto.tcl 及 edi_config.auto.tcl 及 edi_ tags.auto.tcl
11. exit 跳出 encouter
12. 把 setup.auto.tcl 改名為 setup.tcl
unix% mv setup.auto.tcl setup.tcl
13. 把 edi_config.auto.tcl 改名為 edi_config.tcl
unix% mv edi_config.auto.tcl edi_config.tcl
14. 把 edi_tags.auto.tcl 改名為 edi_tags.tcl
unix% mv edi_tags.auto.tcl edi_tags.tcl

15. 修改 setup.tcl,以下是要修改的部分
原文 修改成
set vars(fp_file) set vars(fp_file) CHIP.fp
#set vars(cts_spec) "<cts_spec>" set vars(cts_spec) Clock.ctstch
set vars(def_files) <<def_files> set vars(def_files) "CHIP-scanDEF"
set vars(max_route_payer) 15 set vars(max_route_payer) 8
set vars(func_mode,pre_cts_sdc) … 新增一行
set vars(func_mode, post_cts_sdc) \
“../../design/CHIP_func_prop.sdc”
set vars(scan_mode,pre_cts_sdc) … 新增一行
set vars(scan_mode, post_cts_sdc) \
“../../design/CHIP_scan_prop.sdc”
set vars(gds_files) set vars(gds_files)
" ../../library/gds/tsmc090nvt_macros.gds \
../../library/gds/tsmc090hvt_macros.gds \
../../library/gds/tpzn90gv3_9lm.gds \
../../library/gds/tpbn90gv_9lm.gds \
../../library/gds/RF_2P_ADV64_16.gds”
#set vars(gds_layer_map) set vars(gds_layer_map) \

50
"../../library/soc/streamOut.map"
#set vars(qrc_layer_map)set vars(qrc_layer_map) \
"../../library/fireice/lefdef.layermap2"
(行尾的反斜線 ”\” 表示換行,如果直接寫在一行則不須要加 \ )
改好的版本在 backup/setup.tcl,把它 copy 出來即可
16. 修改 edi_config.tcl,以下是要修改的部分
#set vars(in_place_opt) true set vars(in_place_opt) true
#set vars(tie_cells) <tie_cells> set vars(tie_cells) “TIELOTH
TIEHITH”
#set vars(filler_cells) <filler_cells> set vars(filler_cells) “FILL64TH
FILL32TH FILL16TH FILL8TH FILL4TH
FILL2TH FILL1TH FILL64 FILL32
FILL16 FILL8 FILL4 FILL2 FILL1
FILLCAP64TH FILLCAP32TH
FILLCAP16TH FILLCAP3TH
FILLCAP8TH FILLCAP4TH FILLCAP64
FILLCAP32 FILLCAP16 FILLCAP8
FILLCAP3 FILLCAP4”
#set vars(high_timing_effort) set vars(high_timing_effort) true
#set vars(clock_gate_aware) set vars(clock_gate_aware) true
#set vars(antenna_diode) set vars(antenna_diode) ANTENNA
set vars(multi_cut_effort) low set vars(multi_cut_effort) high
#set vars(postroute_extraction_effort) set vars(postroute_extraction_effort) high
#set vars(signoff_extraction_effort) set vars(signoff_extraction_effort) signoff
(行尾的反斜線 ”\” 表示換行,如果直接寫在一行則不須要加 \ )
改好的版本在 backup/edi_config.tcl,把它 copy 出來即可

-- 建立 Makefile 環境 --
17. 將 SCRIPT 內的 Makefile link 出來
unix% ln -s SCRIPTS/Makefile.edi.flat Makefile
-- 開始進行 Foundation Flow --
18. 觀察 make 選項
unix% make help
===================================================
Makefile Targets
===================================================
setup : Setup Run Directory
init : Create Initial Database
place : Cell Placement
prects : PreCTS Optimization
51
cts : Clock Tree Synthesis
postcts : PostCTS Optimization
postcts_hold : PostCTS Oold Fixing
route : Global/Detail Route
postroute : PostRoute Optimization
postroute_hold : PostRoute Hold Fixing
postroute_si_hold : SI Hold Fixing
postroute_si : SI Optimization
signoff : Signoff Timing / Verify
------------------------------------------------------------------------------------
single : Single Script (all steps)
===================================================
Makefile Options
===================================================
VPATH : Make directory (default make)
TOOL : EDI executable (default encounter)
ARGS : EDI arguments (default -nowin -64)
SCRIPTS : Script directory (default SCRIPTS)
LOG : Logfile directory (default LOGS)

Makefile Target 由上到下是依續相關,可以自行由上執行下來,也可以直接執


行 signoff 或中間某 target,make 會自動把前面部分做完
19. 我們先依續執行
unix% make init
init 即 encounter design import 的意思
20. 執行後多了幾個目錄,比較重要的部分的有

DBS encounter 存檔目錄


LOG message log 及 command log 儲存目錄
RPT timing report 儲存目錄
make make 控制流程的目錄
你可以進入 encouter, load DBS/init.enc 的存檔,看看 floorplan 的長相。(其實
就是之前看的 floorplan

21. 執行 placement
unix% make place
preplace 的 timing 在 RPT/preplace.summary
place 後的存檔在 DBS/place.enc
place 所使用的指令 log 在 LOG/place.log.cmdlog

22. 執行 prects optimization


unix% make prects
看看 prects 的 timing 結果:

52
unix% more RPT/prects.summary
prects 後的存檔在 DBS/prects.enc
prects 所使用的指令 log 在 LOG/prects.log.cmdlog

23. 執行 cts
unix% make cts
看看 clock tree synthesis 的結果:
unix% more RPT/clock.report
cts 後的存檔在 DBS/cts.enc
cts 所使用的指令 log 在 LOG/cts.log.cmdlog

24. 執行 postcts optimization


unix% make postcts
看看 postcts optimization 的結果
unix% more RPT/postcts.summary
postcts 後的存檔在 DBS/postcts.enc
postcts 所使用的指令 log 在 LOG/postcts.log.cmdlog

25. 接下來還有 postcts_hold、route、postroute、postroute_hold、postroute_si_hold、


postroute_si、signoff,一次做到 signoff
unix% make signoff
Encounter foundation flow 使用 makefile 來控制整個流程,執行某一步驟
會先檢查前一個步驟是否完成,若還沒完成,就會先執行前一步驟,因此,當我
們 make signoff 時,就會自動把前面所有未完成的步驟做完。

26. 打開 encounter,讀入 DBS/signoff.enc,看看執行結果


雖然整個流程跑完了,但是這流程不見得能滿足所有的需求,我們可能會希望在
流程當中插入一些步驟或設定。Foundation flow 處理的方法是保留 PLUG 的目
錄,如果有要插入的步驟可以寫在 PLUG 目錄裏的檔案中,流程執行的過程中會
自動執行 PLUG 目錄裏相對應的檔案,比如說執行 make cts,就會先執行
PLUG/pre_cts.tcl,然後執行 cts 工作,最後再執行 PLUG/post_cts.tcl,這樣
就可以在不修改 flow script 的前提下,達到調整流程的要求。

27. 相較於之前的 lab,有些步驟和 foundation flow 不同,比如:


A. 在 place 之前設定 scan chain
B. 在 route 時將 clock weight clock weight 設成 10,spacing 設 1
C. 在 route 後加入 metal fill

53
D. 全部完成後順便寫出 gds,netlist,sdf,def
28. 這些步驟已經寫在 PLUG._bak 目錄的檔案裏,把這些檔案複製到 PLUG
unix% cp -r backup/PLUG/EDI PLUG/

29. 重新執行全部流程
unix% make -B signoff
-B 參數表示,不管前面步驟有沒有執行過,全部都重新執行。
30. 檢查 signoff 的 setup time 結果
unix% more RPT/signoff.summary
是否 timing 有 meet?
31. 檢查 signoff 的 hold time 結果
unix% more RPT/signoff_hold.summary
是否 timing 有 meet?
32. 檢查 geomentic verify 結果
unix% more CHIP.geom.rpt
是否有 gemoetry violation?
33. 檢查 connectivity verify 結果
unix% more CHIP.conn.rpt
是否 connectivity violation?
34. 檢查 antenna verify 結果
unix% more CHIP.antenna.rpt
是否 antenna violation?

35. 最後 design 結果放在 apr_result 裏,應可在裏面找到寫出的 gds,netlist,sdf

54

Vous aimerez peut-être aussi