有人需要详细的SoC Encounter流程,先发表于下:
Lab1 System Startup
Logging in
1. Log into your workstation.
Username : trainaXX for Sun workstation
Password : train0XX
其中XX 代表工作站名字的號碼,例如工作站名字叫做traina01 的話,XX
就是01。
2. 先確定你是否進入Solaris 作業系統的Common Desktop Environment(CDE)
的視窗環境,如果沒有進入的話,請和CIC 人員聯絡。
Copy lab material
3. 清空home directory , 因為CIC 的帳號有quota 限制,所以我們先清理空間.
unix% cd
unix% \rm -rf *
4. 複製Lab material
unix% /usr/local/bin/tar xvfz /cad2/lab/SOC/umc18.tgz
Start SOC Encounter
5. 進入Lab1
unix% cd umc18
unix% cd Lab1
6. 複製所須要的library
unix% ./prep_data.csh
這個c shell,會把一些library 相關的檔案複製到此目錄,包括
io cell, ram 的 lef
standard cell, io cell, ram 的
verilogstandard cell, io cell, ram 的 lib (synthesis library)
因為我修改過lef 的technology 部分,所以standard cell 的lef 直接附在lab 裏.
7. 建立SOC Encounter 的環境,並啟動SOC Encounter:
unix% source /usr/cadence/cic_setup/soc.csh
unix% encounter -64 􀃅不可跑背景模式(不加 &)
8. SOC Encounter 開起後,我們就有兩個視窗,一個是原來下指令的terminal,另
一個是SOC Encounter 的GUI 介面.兩個視窗都必須用到
9. 讀取存檔, 執行Design􀃆Restore Design, 在Restore Design form. 裏的File
name 輸入 finish.enc, 然後按Open
10. 一開始看到的是一個已經繞好的desgin, 在左下角View 的位置有三個icon,
先切到Floorplan view
11. 你可以分辦出那些是IO pad, 什麼是power ring, 什麼是power stripe 嗎?
Floorplan View 是在floorplan 階段時,用來規劃整體CHIP
12. 再切到Amoeba view
13. 點選core 中間的粉紅區域,按一下上方icon 的Hierarchy Down , 你會看
到一些 flight line, 先不管,滑鼠在art window 裏隨便點一下取消掉這些flight
line.現在會看到core 內部被劃分成幾個區域,這些區域是依照design 的module
來劃分.
14. 點選module DCT/acf, 再按一次Hierarchy Down , 並把flight lines 按掉,
可以看到acf moduel 又往下顯示一層階層
15. 點選任一個module, 切換到Physical view , 會看到剛剛選的module 的
cells 反白顯示.
16. 在Physical view 裏可以看到routing net, 現在把右邊color control 的Net 切設
成不顯示, 你可能須要按一下All Colors 下的swith bar 才找得到Net 的控制.
17. 放大core 內部,可以看到密密麻麻的cell, 把某個cell 放到佔滿整art window,
cell 中間的點顯示該cell 的pin, 點一下某一個pin 可看到該pin 和其它cell
的連線狀況
18. 將color control 的Inst Pin 設成可顯示, 可以看到Cell 內的pin 的完整狀況,
點選視窗最底下的Auto Query ,將游標移到pin 的位置,可以看到該pin
的pin name 以及連接的net name 顯示在底下.
19. 再按一下Auto Query , 解除Auto Query
20. 把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.
21. Design􀃆Exit 離開 SOC Encounter
Lab2 Design Import, floorplan,
Powerplan
Prepare Data
1. 進入Lab2
unix% cd Lab2
在Lab2 裏我們可以找到幾個和design 相關的檔案:
vlog/CHIP.vg 主要的verilog netlist
CHIP.sdc Boundary constraint (sdc format)
CHIP.io IO placement constraint
2. 除了design 相關的檔案外,我們還須要library 相關的檔案,執行prep_data.csh
取得相關檔案
unix% ./prep_data.csh
3. 使用vi 看vlog/CHIP.vg,
unix% vi vlog/CHIP.vg
在最底下可找到我們的top module : CHIP , 你可以看到裏面已經把input pad
(P2A), output pad (P2A), core power/ground pad (PVDDC/PVSSC), IO
power/ground pad (PVDDR/PVSSR), corner pad (PCORNER) 加在裏面.
除了那些pad 外,在CHIP module 裏也看到我們主要的module: DCT 在這裏
被呼叫進來.
跳出vi.
ZZ
4. 使用vi 看CHIP.sdc, 你可以找到我們下了那些sdc constraint 嗎? 要有足夠的
constraint,才可以做timing analysis 以及timing driven PR.
5. 使用vi 看CHIP.ioc, 裏面記錄了每個pad 及corner 所擺放的位置和方向.
6. 建立SOC Encounter 的環境,並啟動SOC Encounter:
unix% source /usr/cadence/cic_setup/soc.csh
unix% encounter -64 􀃅不可跑背景模式(不加 &)
Design Import
1. 在Encounter 中,執行Design􀃆Design Import…, 在Verilog Files 的欄位的右邊,
按 叫出Files form,再按 extend 出file browser, 選擇vlog 裏的
CHIP.vg, 然後再按 ,把CHIP.vg 加到Netlist Files 裏,最後按close 關
閉. 你會看見vlog/CHIP.vg 已經被加入Verilog Files 的欄位裏.
2. 以同樣的方式在LEF Files 的欄位裏加入lef 目錄裏的三個lef:
lef/umc18_6lm_cic2.lef
lef/umc18io3v5v_6lm_cic.lef
lef/DPR64x16.vclef
3. 以同樣方式在Max Timing Libraries 欄位裏加入lib 目錄裏的三個lib:
lib/DPR64x16_slow_sync.lib
lib/slow.lib
lib/umc18io3v5v_slow.lib
4. 以同樣方式在Min Timing Libraries 欄位裏加入lib 目錄裏的三個lib:
lib/DPR64x16_fast_sync.lib
lib/fast.lib
lib/umc18io3v5v_fast.lib
5. 以同樣方式在Common Timing Libraries 欄位裏加入lib 目錄裏的三個lib:
lib/DPR64x16_typical_sync.lib
lib/typical.lib
lib/umc18io3v5v_typ.lib
Max Timing Libraries 是在計算setup timing check 時使用,Min Timing
Libraries 則是在計算hold timing check 時使用.
6. 在 Buffer Name/Footprint 欄位裏填入 buf
7. 在 Delay Name/Footprint 欄位裏填入 dly4
8. 在 Inverter Name/Footprint 欄位裏填入 inv
這幾個footprint 告訴Encounter 在timing driven optimization 時有那些
inverter 或buffer 可使用.
9. 在IO Assignment File 欄位裏填入 CHIP.ioc
10. 切換到Timing slide
11. 在Timing Constraint File 欄位裏填入CHIP.sdc
12. 切換到Power slide
13. 在Power Nets 裏輸入 VDD DVDD
14. 在Ground Nets 裏輸入 GND DGND
這兩個欄位是填入global Net 的名子
15. 這些麻煩的設定可以用底下的Save… 功能存成一個檔,方便以後重新執行,
這裏我準備好一個已經存好的設定檔 CHIP.conf, 按下底下的 Load… 按鍵,
選擇CHIP.conf 後按Open , 所有的設定直接設定好,這樣可以省去1 至14 步
驟.
16. 在Design Import form. 裏按OK 鍵,一會後就可以看到初始的floorplan
Global Net Connect
1. 接下來我們要連接所有的global Net, 包括所有cell 的power/ground pin 連接
到VDD/GND, 以及把Cell 裏接到 1’b0 的port 連到GND, 接到1’b1 的port
連到GND.
2. 執行Floorplan􀃆 Global Net Connections…
3. 在Global Net Connections form. 裏, Pins 欄位填入VDD, To Global Net 欄位
填入VDD,然後按Add to List ,你會看到左邊Connection List 裏多了一份資料
4. 接下來改在Pins 欄位填入GND, To Global Net 欄位填入GND, 然後按
Add to List ,你會看到左邊Connection List 裏又多了一份資料
5. 接下來選擇 Nets,並在Nets 欄位填入GND, 在To Global Net 欄位填入GND,
然後按Add to List .
6. 在Nets 欄位填入VDD, 在To Global Net 欄位填入VDD, 然後按Add to List .
7. 接下來選擇Tie High, 在To Global Net 欄位填入VDD, 然後按Add to List ,
這是把所有連到1’b1 的net 都接到VDD.
8. 接下來選擇Tie Low, 在To Global Net 欄位填入GND, 然後按Add to List, 這
是把所有連到1’b0 的net 都接到GND.
9. 到目前為止,左邊的Connection List 裏有六份資料,按 Apply , 然後按 Check,
最後按Close 關閉此視窗.
10. 在check 時,你會看到很多warning,說IO pad 及corner pad 沒有連接到special
net, 這是正常的,因為pad 用的power 和core cell 用的本來就不一樣.
Timing Analysis
1. 在terminal 視窗裏輸入以下指令:
encounter> setCteReport
encounter> setAnalysisMode –setup –async –skew –autoDetectClockTree
encounter> buildTimingGraph –ignoreNetLoad
encounter> checkTA -verbose
encounter> reportTA
在Lab2 裏可以找到一個檔案Lab2.cmd, 裏面記錄所有在Lab2 使用到的指令,
你可以用copy-paste 的方式輸入那些指令
2. 執行Timing􀃆 Timing Analysis…
3. 在Timing Analysis form. 裏, 點選 Ignore Net Load, 在Slack Report File 欄位
填入CHIP.slk , 然後按OK , timing analysis report 會被寫入檔案CHIP.slk 裏.
4. 執行Timing􀃆 Timing Debug 􀃆 Slack Browser… , File name 填入 CHIP.slk,
按Open
5. Timing Slack Browser 告訴我們目前Timing Analysis 各path 的timing
requirement 和timing slack , 目前最小的timing slack 是多少?
slackR : 1.754
slackF : 1.754
在所有APR 執行前做一次timing analysis 可以幫我們確定constraints 有沒
有寫錯, 也可以讓我們知道在不考慮net loading 的前提下,是否已有timing
violation, 若這時已有timing violation,則chip place 後或 routing 後幾乎
不可能會meet timig.
6. 按 Cancel 關閉Timing Slack Browser form
Floorplan
1. 執行Floorplan 􀃆 Specify Floorplan …
2. 在 Specify Floorplan form. 裏的 Ratio (H/W) 填入 1 , Core Utilization 填入
0.85 , Core to Left 和 Core to Top 和Core to Right 和 Core to Bottom 四個
欄位裏都填入80 , 填完後按 OK
3. 按Z(大寫,shift+z)或, 你會看到右邊有一個大Cell,那是一顆ram,屬於
hardmacro, 左邊有一個粉紅色的矩形,那是我們主要的module : DCT
4. 選擇左邊的DCT module, 再點一下, DCT module 被分成五個更小的
module, 試著找出這幾個module 的名子:
tposemem
bdeg
acf
IDRU8
DRU
5. 現在我們要把右邊的hardblock 擺到core 內部, 但是不知道要放那, 所以先執
行 Floorplan􀃆

lace Blocks/Modules􀃆

lace ...
6. 在Place Blocks form. 裏, 點選 Place hard macros inside modules , 然後按
OK ,執行完後右邊的block 已經被擺放到中間core 的部分, 這是encounter 建
議的擺放方式.
7. 對這個擺放方式我們不滿意, 要再做一些調整, 首先把右邊color control 的
Module 設成不可見(un-visible, check up) , 以方便我們做
事.
8. 我們希望這RAM 的pin 都向中間, 用滑鼠左鍵選取hardmacro, 執行
Floorplan􀃆Edit Floorplan􀃆 Flip/Rotate Instances... , 點選Mirror Y , 然後按
OK. hardmacro 向Y 軸翻轉一次.
9. 再來要把hardmacro 搬到core 的左下角,選擇tool wedgit 的 , 用滑鼠左
鍵抓住hardmacro 後往core 的左下角搬.
10. 為了統一,請直接在encounter terminal 裏輸入:
encounter>
placeInstance DCT/tposemem/Bisted_DPR64x16/WRAPPED_RAM_i0/SRAM_i0 276 276 R90
你可以在Lab2.cmd 裏找到這行指令,直接以copy-paste 的方式貼過去
11. 搬好後,須把其狀態設成pre-placed, 選擇hardmacro 並執行 Floorplan􀃆 Edit
Floorplan 􀃆Set Block Placement Status… , 在Set Placement Status form. 裏直接
按OK.
12. 接下來我們為這個hardmacro 加上30um 的block hole, 在這block 的30um 內不
可擺放任何其它cell. Floorplan􀃆Edit Block Halo…, 在Top/Bottom/Left/Right
四個欄位都填入30, 按OK
13. 到此算一段落,先存個檔以防萬一, Design􀃆Save Design… , File name 填入
floorplan.enc ,按Save
Powerplan
1. restore Design, 把剛剛的存檔叫回來, Design􀃆Restore Design…, 選擇
floorplan.enc,按 Open. (請務必重讀存檔,不要忽略此步,否則待會會出錯)
-- Create power ring --
2. 執行Floorplan􀃆

ower Planning􀃆Add Rings… , 在Net(s)的欄位只留下
GND VDD , Ring Configuration 部分Top 和Bottom 的Layer 改成ME5, Width
設成8 , Left 和Right 的Layer 改成ME4, Width 也是設成8, 都填好後按一
下Spacing 右邊的Update, Spacing 會自動改成Design rule 合法的spicing.
3. 在Wire Group 的部分,選擇Use wire group 和 Interleaving, 並在Number of
bits 欄位填入4 , 按OK
4. Core 和IO 之間多了一圈power ring, 並八條,分別是VDD GND VDD GND…
交錯排列著.
建立八條細的power ring 而不是VDD GND 兩條粗的power ring 的用意是避開
wide metal 的slot rule, 而這樣的方式也可以承受較大的電流以及在VDD
和GND 間得到較大的電容
5. 因為我們的ram 本身就含有block ring,所以跳過block ring 的步驟.
-- 連接power pad --
6. 執行Route􀃆SRoute…, 在Net(s)欄位只留下VDD GND, Route 部分只留下
Pad pins 部分,其它Block pins/Pad rings/Standard cell pins/Stripes 都設成不選
取, 按 OK . 應該可看到六條線從power pad 連到power ring 上
7. SRoute 將Core power/ground pad 連接到power ring 上,但是因為這條連接線的
寬度大於35um, 違反Design rule, 所以必須改正, 按 e 叫出Edit Route from,
按一下split wire , cancel 關閉 Edit Route from.
8. 應該可以看到剛才連接的6 條線各被切成幾份寬度小於10um 的線段
-- Create power stripe --
9. 執行Floorplan􀃆

ower Planning 􀃆 Add Stripes… , Net(s)只留下GND VDD,
Layer 選 ME4 , Width 設成5, 按一下Update , 選擇 Number of sets, 並把
Number of Set 設成3, X from left 設成 140, X form. right 也設成 140. 點選
Use wire group 和Interleaving,並把Number of bits 設成2
10. 切換到Advanced slide, 加選以下幾項:
Break stripes at block rings
Switch layer to make block ring connection
Jog stripe to make block ring connection
11. 按OK
12. 一會後我們看到並加進三組stripe,每組stripe 各四條線,每條線5um,左右兩組
和core 的邊界相鄰140um,且這時stripe 的上下已經接到core ring 或block ring
上了.
13. 我們發現最右邊的stripe 下面因為和power pad pin 相衝突, 造成stripe 沒有完
全接到power ring上,所以再使用SRoute 把stripe 連起來. 執行Route􀃆SRoute,
這次在SRoute form. 的Route 選項裏,只留下Stripes(unconnected),其餘的全都
不選, 按OK
-- Connect Ring Pins --
14. 雖然我們的RAM 的power 已經用stripe 連起來了,但是我還覺得不夠,要以
Connect Ring Pins…的方法連接更多power pin. 執行Floorplan􀃆

ower
Planning 􀃆Connect Ring Pins…, Net(s)留下GND VDD, Sides 只留下 left 和
Bottom, Top/Bottom edges 的layer 設成ME5, Maximum width 設成1 ,
Left/Right edges 的layer 設成ME4, Maximum width 設成1, Maximum
number of connections 設成8, 點選Allow routing over rows 和 Switch layer
to connect, 然後按OK .
15. 執行完後,看到左邊有一個叉叉,以滑鼠右鍵zoom in 到該部位,把display
control 的Inst Pin 和Cell Blkg 設成visibility,可以看到這個violation 的原因
是因為metal4 的spacing 和blockage 太近,解決這個violation 最簡單的方法是
將該net 刪除, 按e 叫出Edit Route form,按叫出Delete wire form, action
選Delete, 然後選擇要刪除的net,選好後按Apply
16. 完整刪除該net 後, 執行Verify->Clear Violation 把violation 清除
17. powerplan 結束, Design􀃆Save Design… ,存成 powerplan.enc
18. Lab2 結東, 離開SoC Encounter 或是從Lab3 第3 步繼續做
Lab3 placement, scan reorder,
clock tree synthesis
Placement
1. 進入Lab3
unix% cd Lab3
複製library 到此目錄
unix% ./prep_data.csh
2. 進入SOC Encounter
unix% source /usr/cadence/cic_setup/soc.csh
unix% encounter -64
3. 讀取存檔
Design􀃆Restore Design… ,在Restore Design form. 選取powerplan.enc ,按
Open
開檔須要一段時間
-- Specify Scan Chain --
4. 首先建立scan chain, 必須給scan_in 和scan_out 的位置,在encounter terminal
輸入:
encounter> specifyScanChain scan1 -start PAD_SCAN_IN/Y -stop
PAD_SCAN_OUT/A
你可以在Lab3.cmd 裏找到這行指令
接下來trace scan:
encounter> scantrace
Scan Trace Summary 顯示這個scan train 共有多少個element ? 686
-- Create Floorplan Guide --
5. 做一次試探性的place:
Place􀃆

lace…
在Place form. 裏, 選擇Prototyping,以及Ignore Scan Connection, 按OK
6. 查看log, Average module density 是多少? 0.794
7. 執行Place􀃆Check Placement…, 直接按 OK
8. 查看log,有沒有instance overlapped?
有沒有 Violation?
因為這只是試探性place, 可不管這些violation.
9. 切換到Amoeba view , 選取中間的DCT module, 按一下Hierarchy
down , 可以看到各module 的擺放位置以及module 和module 之間的連線
10. 這個module 的擺放不是我心目中理想的擺放方式,執行Floorplan􀃆Generate
FP Guide…,直接按 Apply
11. 切換到floorplan view ,會看到各module 散落在core 內部, 找到DRU
module,把DRU module 搬到core 的左上角, 再找到IDRU8 module ,把它
搬到右下角.
12. 用滑鼠點選其它幾個module,按q,把Constraint Type 由Guide 改成None,然後
按OK
13. 為了統一,在encounter terminal 輸入以下指令以達到11,12 步的效果
encounter> unplaceGuide DCT/acf
encounter> unplaceGuide DCT/bdeg
encounter> unplaceGuide DCT/tposemem
encounter> createGuide DCT/DRU 275.48 733.6 455.0 915.04
encounter> createGuide DCt/IDRU8 762.544 274.96 920.94 436.24
同樣的,你可以在Lab3.cmd 裏找到這幾行指令,用copy-paste 方式貼上去
14. 再做一次amoeba place, Place􀃆

lace…, 同樣選擇Prototyping 和Ignore Scan
Connection, OK
15. 切換到Amoeba view , 這次是不是照我們想要的方式擺放?
-- Scan Chain Reorder --
16. Scan Chain Reorder, 執行Place􀃆Reorder Scan… , 直接按OK
log 裏顯示原來的Scan chain wire length 是多少? 45115.994
reorder 之後的 wire length 是多少? 14595.854
理論上每重做過一次placement 就該重做scan chain reorder
-- Timing Analysis --
17. 這次timing analysis 我們要考慮placement 的效應,所以必須先把繞線大概繞上,
執行 Route􀃆Trial Route…, 在Trial Route form. 裏選擇Prototyping,按OK
使用prototyping 繞線只是大概把繞線接起來,很有可能會有很多DRC
error,但我們只是為了要做extraction, 不care.
18. 切換到Physical view , 繞線已被繞上,接下來做extraction, 執行
Timing􀃆Extract RC…, 直接按OK
19. 執行Timing􀃆 Timing Analysis…, 確定Slack Report File 裏是CHIP.slk, 按OK
20. 執行Timing􀃆Timing Debug􀃆Slack Browser…, 選擇CHIP.slk, 按Open
這次看到的timing slack 最小是多少? 是否仍合乎我們的timing constraing?
slackR/slackF 0.972 / 0.972
按Cancel 關閉Slack Browser
-- Timing Driven Placement --
21. 重新執行Place􀃆

lace…, 這次選Medium Effort, Timing Driven, 以及Ignore
Scan Connection, 按OK
22. 執行Place􀃆Check Placement…, OK, 這次還有沒有violation?
23. 切換到Amoeba view 看一看現在module 的排列
24. 執行Place􀃆Reorder Scan…, OK, 這次的scan chain wire length 由多少變成多
少? 76188 􀃆 15652
-- Timing Analysis --
25. 執行Timing􀃆Specify Analysis Condition􀃆Specify RC Extraction Mode…,
Mode 選Detail, 點選Assume Metal Fill, OK
26. 執行Route􀃆Trial Route…, Trial Route Effort Level 選Medium Effort, OK
27. 執行Timing􀃆Extract RC…, OK
28. 執行Timing􀃆Timing Analysis…, OK
29. 執行Timing􀃆Timing Debug􀃆Slack Browser…, Open
最小的timing slack 是多少? slackR/slackF 0.237 / 0.237
30. Design􀃆Save Design..存檔,存成place.enc
Clock Tree Synthesis
1. 執行Clock􀃆Create Clock Tree Spec…, Buffer Footprint 填入clkbuf ,
Inverter Footprint 填入 clkinv , Save Spec To 填入 CHIP.ctstch, OK
2. 再開一個terminal 視窗,看看CHIP.ctstch 裏寫了什麼,必要的話可以修改這些設
定
3. 執行Clock􀃆Specify Clock Tree…, Clock Tree File 保留CHIP.ctstch, 按OK
4. 執行Clock􀃆Synthesisze Clock Tree…, 加選 Display Clock Tree, OK
5. 在新開的terminal 視窗裏,進入CHIP_cts 的目錄,裏面有幾個檔案, 首先
看.ctsntf 檔:
unix% more CHIP_cts.ctsntf
CTS 共幫我們加了多少net?
6. 再看timing report 檔, more CHIP_cts.ctsrpt , 各項timing 的結果為何?
Nr. of Level : 3
Rise Phase Delay: 881.5 ~ 908.2 (ps)
Fall Phase Delay: 904.3 ~ 930.8 (ps)
Trig. Edge Skew: 36.3 (ps)
Rise Skew: 26.7 (ps)
Fall Skew: 26.5 (ps)
Max. Rise Buffer Tran: 355.8 (ps)
Max. Fall Buffer Tran: 325.8 (ps)
Max. Rise Sink Tran: 178.6 (ps)
Max. Fall Sink Tran: 166 (ps)
7. 在encounter 的window 裏可以看到各個clock tree group 以不同顏色顯示, 把
右邊的color control 的Instance 設成不可見, 可以更清楚看到clock tree 分布
8. 執行Clock􀃆Display􀃆Clear Clock Tree Display
9. 執行Clock􀃆Display􀃆Display Clock Tree…
在Display Clock Tree form. 裏的Display Selection 部分選擇Display Clock
Tree 和All Level, OK
你看到整個clock tree 的分布
10. 再執行Clock􀃆Display􀃆Display Clock Tree…
這次在Display Selection 部分選擇Display Clock Phase Delay, OK
這次顯示的顏色表示Phase Delay 的程度, 紅色表示Phase Delay 最嚴重,藍色
是最輕微.
11. 執行Clock􀃆Clock Tree Browser…, 在Clock Tree Browser form. 裏選
PAD_CLK/Y , Select, OK, 打開Clock Tree Browser
12. 在Clock Tree Browser 裏, 執行Display􀃆Hide/Show􀃆…Input tran , 在每一個
leaf instance 的後面顯示其input transition time.
13. 看看Edit 選單裏有那些選項,這些選項可以讓我們手動修改clock tree.
14. 執行Browser􀃆Close, 關閉Clock Tree Browser
15. 執行Clock􀃆Display􀃆Clear Clock Tree Display
16. Design􀃆Save Design…, 將結果存成cts.enc
17. Lab3 結東, 離開SoC Encounter 或是從Lab4 第3 步繼續做
Lab4 IPO, Power Analysis, Fix
DRV, Fix hold time, Route power
In-Placed Optimization
1. 進入Lab4
unix% cd Lab4
複製library 到此目錄
unix% ./prep_data.csh
2. 進入SOC Encounter
unix% source /usr/cadence/cic_setup/soc.csh
unix% encounter -64
3. 讀取存檔
Design􀃆Restore Design… ,在Restore Design form. 選取cts.enc ,按Open
開檔須要一段時間
-- Timing Analysis --
4. 設定Operating Condition, 執行Timing􀃆Specify Analysis Condition􀃆Specify
Operating Condition/PVT …
在Specify Operating Condition form. 中, max 的slide 選Timing Library: slow,
min 的slide 選Timing Library: fast , 按OK
5. 設定Extraction Mode, 執行Timing􀃆Specify Analysis Condition􀃆Sepcify RC
Extraction Mode…
Mode 選擇 Detail, Assume Metal Fill, OK
6. Route􀃆Trial Route, OK
7. Timing􀃆Extract RC…, OK
8. Timing􀃆Timing Analysis…, OK
9. Timing􀃆Timing Debug􀃆Slack Browser, Open
10. 若這時有負的slack,則必須做IPO(In-Place Optimization)
-- IPO --
11. 執行Timing􀃆In-Place Optimization
Power Analysis
1 執行Power􀃆Edit Pad Location
這裏的目的是要指定power pad 的位置, 在Edit Pad Location form. 裏的Net
欄位裏填入VDD,然後按Auto Fetch .
再在Net 欄位裏填入GND, 然後按 Auto Fetch
此時在Pad Location List 裏應該可找到6 個power/ground pad 的位置.
按Save…,把結果存成CHIP.pp, Save
Cancel
2 執行Power􀃆Edit Net Toggle Probability…
2.1 按Get Clock, 在Toggle Probability List 列出我們的clock
2.2 選擇CLK1, 按 Edit
2.3 在Net Toggle Probability 欄位裏填入0.9, 然後按Add/Replace, 為了加
強IR drop 的效果,所以我給這麼大的Toggle rate
2.4 按Save…,儲存成CHIP.tg, Save
2.5 Cancel
3 執行Power􀃆Power Analysis􀃆Statistical…
Net Names 輸入 VDD,
選post-CTS clock
Net Toggle Probability File 填入CHIP.tg
Pad Location Files 填入 CHIP.pp
Report File 填入pa.report
Instance Voltage File 填入 instance.voltage
按Apply
4 看看pa.report,
unix% more pa.report
找到以下幾個資料:
average power: 4.67 mw
worst IR drop: 1.1139e-02v
worst EM: M1: 5.6807e-01 mA/u
M2: 2.6601e-01 mA/u
M3: 1.5050e-01 mA/u
M4: 6.7366e-01 mA/u
M5: 2.8869e-01 mA/u
5 回到Power Analysis Statistical Mode form, 這次Net Names 處填入 GND, 其
餘參數不變,按OK
6 看看pa.report,
unix% more pa.report
找到以下幾個資料:
average power: 4.75 mw
worst IR drop: 1.0343e-02v
worst EM: M1: 4.4014e-01 mA/u
M2: 2.4990e-01 mA/u
M3: 1.4284e-01 mA/u
M4: 5.0331e-01 mA/u
M5: 2.5078e-01 mA/u
7 執行Power􀃆Display 􀃆Display IR Drop... , Net Name 填入VDD, Threshold 填
入0.01, OK
8 為了使顯示清楚, 把右邊的color control 裏的Instance ,net 和Row 設成不可
見,你可能須要切換color control 的switch bar 才找得到這幾個設定.
IR drop 的顯示以8 種顏色分層顯示,每換一種顏色表示電壓降下 0.01/8,
紅色為IR Drop 最嚴重區域
9 再執行Power􀃆Display 􀃆Display IR Drop... ,這次Net Name 填入GND, OK.
因為ground pad 和power pad 的位置和個數不同, IR Drop 的情況可能會不同.
10 執行Power􀃆Display 􀃆Display EM..., Net Name 填入VDD, 其餘的欄位全都
填入1, OK
encounter 視窗顯示EM 的狀況,顏示改變處表示EM 較嚴重處
11 執行Power􀃆Display􀃆Clear Power Analysis Display
Fix DRV
1 執行Timing􀃆Report􀃆Transition Violation..., 按OK
Log 裏顯示有多少violation? 303
2 執行Timing􀃆In-Place Optimization, Timing Analysis Type 選DRV Only,按
OK
3 再做一次Timing􀃆Report􀃆Transition Violation..., 按OK , 是否所有real 的
violation 都修正了?
Fix Hold Time Violation
1 執行Timing􀃆Extract RC… , OK
2 執行Timing􀃆Timing Analysis…, 這次選Hold Time Analysis, OK
3 執行Timing􀃆Timing Debug􀃆Slack Browser…, Open
是否有Hold time sack ?
4 若有Hold time slack, 則執行Timing􀃆In-Place Optimization…, Timing
Analysis Type 選hold, OK
5 Design􀃆Save Design, 將結果存成ipo.enc
Connect power
-- Connect follorpin --
1 執行Route􀃆SRoute… , Net(s)留下 GND VDD, Route 處只留下Standard
cell pins, OK
將color control 的Net 設成不可見, 可以看到core cell 的power 都連到
左右的power ring 上
-- Add IO Filler --
2 在encounter terminal 輸入:
encounter> addIoFiller –cell PFILL –prefix IOFILLER
encounter> addIoFiller –cell PFILL_9 –prefix IOFILLER
encounter> addIoFiller –cell PFILL_1 –prefix IOFILLER
encounter> addIoFiller –cell PFILL_01 –prefix IOFILLER -fillAnyGap
3 按一下redraw , 可以發現原來的IO pad 間的空隙都被填滿了
4 Design􀃆Save Design… , 存成powerroute.enc, Save
5 Lab4 結東, 離開SoC Encounter 或是從Lab5 第3 步繼續做
Lab5 Route, Stream out
1. 進入Lab5
unix% cd Lab5
複製library 到此目錄
unix% ./prep_data.csh
2. 進入SOC Encounter
unix% source /usr/cadence/cic_setup/soc.csh
unix% encounter -64
3. 讀取存檔
Design􀃆Restore Design… ,在Restore Design form. 選取powerroute.enc ,按
Open
開檔須要一段時間
Route
1. 執行Route􀃆NanoRoute… ,選Timing drive 和SI Driven
--Set Clock weight and add spacing --
2. 點選Attribute
--Set Clock weight and add shield --
1.1 在NanoRoute/Attribute form. 裏, 選NetType(s) 和 Clock Nets,
1.2 在Weight 欄位填上10
1.3 在Spacing 填入 1
1.4 Avoid Detour 選True , 這個選項的意思是route as short as possible
1.5 OK
2 在NanoRoute form. 按OK, NanoRoute 開始執行, 約14 分鐘做完(blade 2000,
1G memory,執行中約花了800M memory)
3 執行結束後會發現上下在IO pad 的位置有幾個叉叉,放大其中一個觀察, 記
得把color control 的Net 設成可見
4 不知道為什麼nanoroute 把線繞在Cell 的blockage 裏,為了得到正確的結果,
我們在這兩個pin 之間加入routing blockage.
5 選擇Add Routing Blockage , 在pin 和pin 之間畫出一個矩形.
這裏提供一個script. 幫我們把全部須要的routing blockage 都加上去,在
encounter terminal 輸入:
encounter> source createRouteBlk.tcl
6 執行Route􀃆NanoRoute,取消Timing driven 和SI driven, 選擇Area Route, 按
一下Select Area and Route 後, 在window 上圈選出一個區域, 圈選的區域包
含有violation 的位置,大小大概如上圖的大小,選完後NanoRoute 會針對所選
的區域重新繞線,修正該violation.
7 以同樣的方法,針對其它的violation 重新做Area Route.修複全部的violatio
-- Timing Analysis --
8 設定Operating Condition, 執行Timing􀃆Specify Analysis Condition􀃆Specify
Operating Condition/PVT …在Specify Operating Condition form. 中, max 的slide 選Timing Library: slow,
min 的slide 選Timing Library: fast , 按OK
9 設定Extraction Mode, 執行Timing􀃆Specify Analysis Condition􀃆Sepcify RC
Extraction Mode…
Mode 選擇 Detail, Assume Metal Fill, OK
10 iming􀃆Extract RC…, OK
11 Timing􀃆Timing Analysis…, OK
12 Timing􀃆Timing Debug􀃆Slack Browser, Open
是否合乎constraint ?
-- Add Core Filler --
13 執行Place􀃆Filler􀃆Add Filler…,在Add Filler form. 裏, 按Select 進入Select
Filler Cells form, 選取右邊Cells List 裏全部的filler,按Add 加到左邊
Selectable Cells List 裏, Close
14 在Add Filler form. 裏按OK
15 Design􀃆Save Design…,存成finish.enc, Save
-- finish --
16 執行Design􀃆Save􀃆GDS… , Output Stream File 填入CHIP.gds ,Map File 填入
streamOut.map, OK
17 執行Design􀃆Save􀃆Netlist…, Netlist File 填入CHIP.v, OK
18 執行Design􀃆Save􀃆DEF…, 點選Save Scan, File Name 填入CHIP.def, OK
19 Design􀃆Exit , Yes
Lab6 Replace
layout,
Add LVS/nanosim text
Replace Layout
1. 進入Lab6
unix% cd Lab6
Lab6 目錄裏目前已有一個CHIP.gds 和CHIP.v
複製library 到此目錄
unix% ./prep_data.csh
2. 進入 icfb
unix% source /usr/cadence/cic_setup/ic.csh
unix% icfb -log CDS.log&
-- Stream In Design --
1. 在CIW 裏執行File 􀃆Import 􀃆 stream . . .,在Stream In form. 裏Input File
填CHIP.gds,Top Cell Name 填CHIP,Library Name 填CHIP,ASCII
Technology File Name 填u18.tf , 按一下Option,在Stream In Options form. 裏
把Case Sensitivity 設成preserve,OK, OK。
和過去CIC 的flow 不同,過去的flow 是在stream in desgin 時以cross
reference 的方式找到各standard cell, 但我發現以這種方式會在Via3
Via4 的地方出錯,所以現在改用另一種方法. 我們先把design gds stream
in 進library 裏,再分別把core, io 和 ram 的layout stream in 到和
design 同一個library 裏,把之前的cell 覆蓋掉, 結果就相當於replace
layout.
在以後CIC release 的cell-library,也將不再提供DFII library,而是直
接給gds 檔
2. 當新的stream in 完成之後,你可以看見新建的library CHIP 出現在Library
Manager 中。
3. 在Library Manager 裏執行View􀃆Refresh
-- Stream In standard cells --
4. 執行File 􀃆Import 􀃆 stream . . .,在Stream In form. 裏Input File 填
umc18_artisan_core.gds,Top Cell Name 空白不填,Library Name 填CHIP,
ASCII Technology File Name 填u18.tf , OK。
5. 同樣執行File 􀃆Import 􀃆 stream . . .,在Stream In form. 裏Input File 填
umc18_artisan_io.gds,其餘和之前相同, OK。
在學校目前拿到的 UMC.18 cell library 裏應該沒有這兩個gds 檔案,只有
umc18_artisan_core 和umc18_artisan_io 兩個DFII library,可以個別將這兩個
library 做stream out, stream out 時Top Cell Name 不填即可將整個library 的
layout 寫出.然後得到這兩個gds 檔
-- Lef in ram LEF --
6. 在icfb 的主視窗CIW 裏執行 File􀃆Import􀃆LEF… , LEF File Name 填入
DPR64x16.vclef, Target Library Name 填入CHIP, OK
現在Library CHIP 裏多了一個CELL , DPR64x16,接下來我們要把這個Cell
的abstract view 複製成layout view.使得layout view 比較好看
7. 在CIW底下的command line 輸入 load(“genForLVS18v2.ile”) , CIW上應該多
出一個LVS Tools for UMC18 的選單
8. 執行LVS Tools for UMC18􀃆copy Abs to Lay , Library Name 填入CHIP , Cell
Name 填入DPR64x16, OK
9. 在Library Manager 裏執行View􀃆Refresh
Add LVS/Nanosim TEXT
1. 將滑鼠移至library manager 中,Library/Cell/View 為CHIP/CHIP/layout 位置,
然後按下中間鍵,並選擇Open 來開啟CHIP/CHIP/layout 這一個cell view。
是否所有的IO PAD,Core cell,以及RAM 都有找到?
layout 開啟後,你會看到旁邊還有一個長條形的視窗LSW, LSW 可以控制各
layer 的可否顯示或可否選擇.
2. 找到任一個IO PAD P2A, 放大其在外側打Bonding 的位置,你可以發現一些
IO label, 按F (大寫f, shift+f) 可以看到 cell 內部,這個label 剛好打在
bounding 的passivation window 裏, 按 control+f(同時按control 和f 鍵) ,恢復
只看到CHIP 最上層.
3. 按f, 顯示fit 到整個CHIP
4. 找到我們的IO power/ground pad : PVDDR 和PVSSR, 我們要在上面手動打上
DVDD 和DVSS 的label,以便以後LPE 時使用.(你會看到這個desgin 用了三
個PVSSR 和PVDDR)
5. 放大某一個PVSSR ,按F 看到cell 內部, 在LSW 視窗裏選M1_TEXT/dg, 執行Create􀃆Label…, 在Create Label form. 的Label 填入DGND, Height 填入
5, 把滑鼠移到layout 視窗上, 你會看到游標上帶著一個label, 在 PVSSR 的
bonding 位置點一下(還記得剛剛在P2A 看到的label 嗎), 一個layer 為
M1_TEXT/dg, Name 為DGND 的label 就被加上去了. 在Create Label form. 按
Cancel,關閉Create Label form.
6. 以同樣方法在另兩個PVSSR 上加上DGND 的label
7. 按control+f ,找到三個PVDDR,以同樣的方法加上Name 為DVDD 的label
8. 以同樣的方法找到某一個PVDDC, 加上一個 Name 為VDD 的label
9. 以同樣的方法找到某一個PVSSC, 加上一個 Name 為GND 的label
10. 執行Design􀃆Save,Window􀃆Close,關閉這個視窗。
--Stream Out --
11. 在CIW 中執行File 􀃆 Export 􀃆 Stream,在Stream Out form. 中的Library
Name/Top Cell Name/View Name 分別填入CHIP/CHIP/layout,Output File 欄
位填入CHIP.gds2,其餘設定均維持預設值,另外用滑鼠在Option 按鈕點一
下,在Stream Out Option form. 中的Case Sensitivity 選項選擇為preserve, 然
後按OK 來關閉Stream Out Option form,再按OK 開始執行stream out 的動
作。
12. 觀察CIW 中出現的訊息,看看是否出現下面stream out 成功的訊息:
PIPO STRMOUT (PID = ipc:-1) completed successfully
13. 檢查Lab6 目錄下是否出現一個新檔案CHIP.gds2。
14. 在CIW 執行File􀃆Exit…, YES, 離開icfb
Lab7 DRC LVS
1. 進入Lab7
unix% cd Lab7
Lab7 目錄裏目前已有一個CHIP.gds2 和CHIP.v
複製drc 和lvs 所須要的檔案:
unix% ./prep_data.csh
DRC
2. 進入drc 目錄
unix% cd drc
3. 編輯 umc18DRC.cal
修改以下幾個項目:
LAYOUT PATH
LAYOUT PRIMARY
INCLUDE
修改成:
LAYOUT PATH “../CHIP.gds2”
LAYOUT PRIMARY CHIP
INCLUDE “Calibre-drc-cur”
4. 存檔並離開。
5. 執行calibre drc
unix% source /usr/mentor/cic_setup/calibre.csh
unix% calibre –drc umc18DRC.cal
6. 程式執行完後,用編輯器觀看DRC 的結果CHIP.drc.summary。
7. 尋找最後的RULECHECK RESULT STATISTICS 的部分:
RULECHECK Off_Grid .......... TOTAL Result Count = 0
RULECHECK SkewEdge ........ TOTAL Result Count = 0
RULECHECK 4.1AB ............... TOTAL Result Count = 0
...
RULECHECK ROM4.12FG ..... TOTAL Result Count = 0
8. 是否有 Result Count 不是0 的部分?
LVS
1. 回到Lab7 目錄
unix% cd ..
2. 進入lvs 目錄
unix% cd lvs
3. 有兩個和RAM 相關的檔案已經在這個目錄裏:
DPR64x16.spi
DPR64x16_lvs.spi
若是自己在做設計,且有使用到RAM,則必須參照這兩個檔編輯所用到的
RAM 的相關檔案(使用RAM 時請先看過CIC 為RAM 寫的使用說明:
CBDK018_UMC_Artisan/CIC/Memory/PDS-030402-01-001.pdf)
-- v2lvs --
4. 首先我們必須先把CHIP.v 轉換成SPICE 格式,輸入:
unix% source /usr/mentor/cic_setup/calibre.csh
unix% v2lvs –v ../CHIP.v –l umc18_lvs.v –l DPR64x16_lvs.v –o
CHIP_source.spi –s umc18_lvs.spi –s DPR64x16.spi -s1
VDD -s0 GND
執行v2lvs 時看到一些Warning:
Warning: CHIP/PAD_CoreVDD1 calls port VDD not declared in module PVDDC
….
Warinig: CHIP/PAD_IOVSS3 calls port DGND not declared in module PVSSR
這些Warning 可以不必理它,我們只要確定source 的output 檔:CHIP_source.spi
有產生出來就可以了
5. 編輯Calibre-lvs-cur
5.1 須要修改的地方有:
LAYOUT PRIMARY
LAYOUT PATH
SOURCE PRIMARY
SOURCE PATH
改成:
LAYOUT PRIMARY “CHIP”
LAYOUT PATH “../CHIP.gds2”
SOURCE PRIMARY “CHIP”
SOURCE PATH “CHIP_source.spi”
5.2 移到檔案最底下,刪除下面四行:
LVS BOX PFILL
LVS BOX PFILL_01
LVS BOX PFILL_1
LVS BOX PFILL_9
5.3 再往上找,找到並刪除下面7 行,
LVS BOX FILL16
LVS BOX FILL1
LVS BOX FILL2
LVS BOX FILL32
LVS BOX FILL4
LVS BOX FILL64
LVS BOX FILL8
刪除這幾行是因為我們的verilog file 裏沒有filler,所以不希望caliber
將layout 裏的filler 當為blackbox
5.4 在檔案最後新增一行:
LVS BOX DPR64x16
加入這行是因為我們要把這顆ram 當成blackbox
5.5 存檔
-- Calibre LVS --
6 執行Calibre LVS
unix% calibre –lvs –spice CHIP_layout.spi –hier –auto
Calibre-lvs-cur
7 編輯結果檔 lvs.rep,找到 OVERALL COMPARISON RESULT 的部分,是不
是打個大勾,若是則表示LVS 沒問題了
Lab8 Post-layout Timing Analysis
在這個lab 中你將練習使用nanosim 做simulation。做nanosim 之前,你必須先向
CIC 申請帳號,並telnet 至queue.cic.edu.tw 的機器。
1. 將Lab8 的資料以ftp 方式上傳至queue server 上
-- Layout Parasitic Extraction --
2. 在做LPE 之前,你已經在layout 上加入text,並已經stream out 成gds2 格式。
CIC 提供Qentry 這個介面來做LPE 及nanosim。
執行Qentry,看看有那些參數
unix% Qentry
3. 使用Qentry 做LPE, 進入lpe 目錄,並輸入
unix% cd lpe
unix% Qentry -M LPE -f CHIP.gds2 –s DPR64x16.spec -t
18ra2sh -c UMC18 -I UMC18 -o netlist
4. unix% ls
你會發現多了一個 result_xxxx 的目錄,這個目錄目前是空的,等到程式執行完
後會將執行結果複製到這個目錄裏
5. 執行Qstat 觀看queue 的狀態:
unix% Qstat
應該可以找到你的帳號名稱及你的工作執行狀態,是正在執行還是在排隊?
6. 若LPE 順利結束,你應該可以得到下面幾個檔:
tracedrac caliber LPE log file
netlist encrypted Layout netlist(transistor level)
這是在lpe –o 指令指定的名稱
nodename netlist 的IO port
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. 切換工作目錄到nanosim,並把result_xxxx 的結果複製到這個目錄:
unix% cd ../nanosim
unix% cp ../lpe/result_xxxx/spice.header .
unix% cp ../lpe/result_xxxx/netlist .
unix% cp ../lpe/result_xxxx/nodename .
CHIP.vec 記錄 test vector
CHIP.cfg 記錄執行nanosim 時的設定:
8. 使用Qentry 做 nanosim。 把模擬時間設為2000 ns。 輸入
unix% Qentry -M NANOSIM -nspice netlist spice.header -nvec
CHIP.vec -m CHIP -c CHIP.cfg -o CHIP -out fsdb -t 2000
同樣的你也可以看看工作狀況:
unix% Qentry
執行結束後可得到CHIP.fsdb 及nanosim.log。
9. 觀看nanosim.log,在最底下可找到流經VDD 和GND 的平均電流
Node: vdd
Aerage current : -3.08097e+04 uA
RMS current : 5.53880e+04 uA
10. 將CHIP.fsdb ftp 回自己的工作站,使用debussy nWave 觀看nanosim 模擬結果: