Physical Design流程

PPA最佳原則: 全稱是Performance,Power,Area熄捍,即性能凸舵,功耗崎逃,面積。這個(gè)PPA貫穿整個(gè)IC設(shè)計(jì)實(shí)現(xiàn)的全過(guò)程较剃。

教你在innovus中使用verify_drc

一, import design

宏單元擺放的原則和建議


1, 檢查時(shí)鐘周期是否符合SPEC

# 如果前端修改了時(shí)鐘周期咕别,而后端不知道的情況下繼續(xù)跑優(yōu)化,出現(xiàn)這種情況那就很浪費(fèi)時(shí)間了写穴,所以最好在完成設(shè)計(jì)導(dǎo)入之后及時(shí)與前端人員確認(rèn)時(shí)鐘約束是否正常惰拱。 
# 頻率 = 1 / 周期(period)
命令: report_clocks

2, 檢查log中是否有ERROR

3, checkDesign -netlist 會(huì)報(bào)出哪些信息

1) std cell / macro / io pad / nets 的數(shù)量
2) std cell / macro / io pad 的面積
3) instance =  std cell + macro
...
# 經(jīng)驗(yàn)估算core的面積 = std_area / 0.65 + macro_area / 0.82
計(jì)算core的面積

二, floorplan


floorplan :
innovus -files../scripts/02_create_floorplan.tcl | tee 02_create_floorplan.log

1)指定芯片/模塊的尺寸(大小)
2)檢查memory擺放的方向是否正確(poly方向需要和標(biāo)準(zhǔn)單元啊送,memory的poly方向一致)
3)把設(shè)計(jì)中的io port擺放到頂層要求的位置(edit => Pin edit)
4)添加endcap(邊界)和tapcell(閂鎖效應(yīng))
5)添加power switch cell (可選)

驗(yàn)證tapcell vios

verifyWellTap \
    -cell TAPCELLBWP40P140 \
    -rule 30 \
    -wellCutCell {BOUNDARY_LEFTBWP40P140 BOUNDARY_RIGHTBWP40P140} \
    -report WellTapCheck.rpt

如何評(píng)價(jià)數(shù)字后端設(shè)計(jì)中floorplan的好壞偿短?
從此沒(méi)有難做的floorplan(數(shù)字后端設(shè)計(jì)實(shí)現(xiàn)floorplan篇)

三, powerplan


1)打上高層的M8和M9 Power Stripe
2)sroute鋪power rail
3)設(shè)置via rule進(jìn)行power stripe和power rail的打孔,形成power mesh
4)檢查powerplan是否存在pg floating

verifyConnectivity -noAntenna -noSoftPGConnect -noUnroutedNet -error 1000000 -net VDD
verifyConnectivity -noAntenna -noSoftPGConnect -noUnroutedNet -error 1000000 -net VSS

5)檢查powerplan是否存在short和open

verify_PG_short -no_routing_blkg

6)檢查floorplan&powerplan是否有drc violation

verify_drc -limit 10000
  1. 一個(gè)強(qiáng)制供電網(wǎng)絡(luò)的標(biāo)準(zhǔn):
IR Drop符合設(shè)計(jì)spec(靜態(tài)3-5%馋没,動(dòng)態(tài)14%)
EM滿足foundary的signoff要求
供電電阻足夠小

Calibre

# 生成.gds2文件
setStreamOutMode -version 688
setStreamOutMode -textSIze 0.1
setStreamOutMode -virtualConnection true
setStreamOutMode -uniquifyCellNamesPrefix true
setStreamOutMode -SEvianames true
streamOut ../data/cortexa7Core.gds2 source-mapFile /data/tech/gdsout_5X2Y2Z_innovus.map -libName DesignLib -units 1000 -mode ALL

在innovus中使用

# innovus中執(zhí)行
source [file join $::env(CALIBRE_HOME) lib cal_enc.tcl]
# 打開calibre
calibredrv xxx.gds -l /data/tech/drc/forDRV.layerprops 

使用add_via_definition定義通孔之后 執(zhí)行add power stripe系統(tǒng)不再默認(rèn)向上或者向下打via了

這是因?yàn)槿绻覀冇昧薬dd_via_definition這個(gè)命令之后翔冀,在打power stripe的時(shí)候需要指定power stripe去打via的金屬層。如果沒(méi)有定義add_via_definition這個(gè)命令披泪,innovus默認(rèn)情況下是會(huì)用設(shè)計(jì)里面所有的金屬層去打via的纤子,即你用了M8打垂直方向的power stripe,而那么在打sroute的時(shí)候款票,工具是會(huì)識(shí)別到power stripe的via約束控硼,他可以向下一直打via連接到M1,也可以向上一直打via連接到最頂層的M10艾少。所以沒(méi)有定義add_via_definition約束的時(shí)候卡乾,我們打完power stripe之后,再打power rail缚够,他們之間是會(huì)自動(dòng)連接在一起的幔妨。
但是如果我們用了add_via_definition這個(gè)命令去定義via的約束之后,power stripe的via通孔默認(rèn)約束就失效了谍椅,他不會(huì)自動(dòng)向上或者向下打via了误堡,所以我們會(huì)發(fā)現(xiàn),打了M8之后雏吭,他不會(huì)自動(dòng)跟M9連接在一起锁施,打power rail的時(shí)候也不會(huì)跟M8連接在一起。
這個(gè)時(shí)候我們需要手動(dòng)給M9和M8這兩個(gè)power stripe再添加一個(gè)via的約束,告訴他們需要往哪一層去打via悉抵。命令如下:

setViaGenMode -optimize_cross_via true
add_via_definition -name via12_usrdefine -via_rule VIAGEN12 -row_col {1 10} -cut_size {0.13 0.05} -bottom_enclosure {0.02 0.02} -top_enclosure {0.02 0.02}  -cut_spacing {0.1 0.1}
add_via_definition -name via23_usrdefine -via_rule VIAGEN23 -row_col {1 10} -cut_size {0.13 0.05} -bottom_enclosure {0.02 0.02} -top_enclosure {0.02 0.02}  -cut_spacing {0.1 0.1}
add_via_definition -name via34_usrdefine -via_rule VIAGEN34 -row_col {1 10}  -cut_size {0.13 0.05} -bottom_enclosure {0.02 0.02} -top_enclosure {0.02 0.02}  -cut_spacing {0.1 0.1}
add_via_definition -name via45_usrdefine -via_rule VIAGEN45 -row_col {1 10}  -cut_size {0.13 0.05} -bottom_enclosure {0.02 0.02} -top_enclosure {0.02 0.02}  -cut_spacing {0.1 0.1}
add_via_definition -name via56_usrdefine -via_rule VIAGEN56 -row_col {1 10} -cut_size {0.13 0.05} -bottom_enclosure {0.02 0.02} -top_enclosure {0.02 0.02}  -cut_spacing {0.1 0.1}
add_via_definition -name via67_usrdefine -via_rule VIAGEN67 -row_col {1 10} 
add_via_definition -name via78_usrdefine -via_rule VIAGEN78 -row_col {1 10} 
add_via_definition -name via89_usrdefine -via_rule VIAGEN89 -row_col {2 5} 
setViaGenMode -viarule_preference {via12_usrdefine via23_usrdefine via34_usrdefine via45_usrdefine via56_usrdefine via67_usrdefine via78_usrdefine via89_usrdefine}

setAddStripeMode -stacked_via_top_layer M8 -stacked_via_bottom_layer M1
addStripe -nets {VSS VDD} \
    -layer M8 \
    -direction vertical \
    -width 6 \
    -spacing 2 \
    -set_to_set_distance 30 \
    -start_from left \
    -start_offset 1 \
    -uda power_stripe_M8

setAddStripeMode -stacked_via_top_layer M9 -stacked_via_bottom_layer M8
addStripe -nets {VSS VDD} \
    -layer M9 \
    -direction horizontal \
    -width 6 \
    -spacing 2 \
    -set_to_set_distance 30 \
    -start_from bottom \
    -start_offset 1 \
    -uda power_stripe_M9


sroute -connect { corePin } \
    -layerChangeRange { M1(1) M8(8) } \
    -corePinTarget { none } \
    -allowJogging 1 \
    -crossoverViaLayerRange { M1(1) M8(8) } \
    -nets { VDD VSS } \
    -allowLayerChange 1 \
    -targetViaLayerRange { M1(1) M8(8) } \
    -uda power_rail_M1

在打M8的時(shí)候肩狂,我們需要先加入setAddStripeMode -stacked_via_top_layer M8 -stacked_via_bottom_layer M1這個(gè)命令,告訴工具M(jìn)8這根power stripe可以向下打via一直連接到M1姥饰,也就是后面用sroute打的power rail傻谁,在打power rail的時(shí)候,就會(huì)自動(dòng)把M8到M1之間的通孔給補(bǔ)齊列粪,并且按照我們上面約束的通孔規(guī)則來(lái)打审磁,即一行十列的via矩陣。而打M9的時(shí)候篱竭,需要先加入setAddStripeMode -stacked_via_top_layer M9 -stacked_via_bottom_layer M8這個(gè)命令力图,告訴工具M(jìn)9這根power stripe需要跟M8 power stripe連接在一起步绸,這樣在打M9的時(shí)候掺逼,工具也會(huì)一起添加VIA8這個(gè)通孔,把兩層金屬連接起來(lái)瓤介。

top級(jí)別才需要打power ring, block級(jí)別不需要這一步.

四, placement

Placement前
1)檢查placement blockage是否正確添加吕喘,以及確認(rèn)blockage的類型
2)整理dont use list
3)設(shè)置好dont_touch的cell
4)確保時(shí)鐘clock已經(jīng)被設(shè)置為 ideal network
5)FIX住所有的Macro和預(yù)先想place好的cell
6)檢查 pin access。

Placement 基本上的順序是:
1)首先是做coarse place刑桑,所有的std cell都有一個(gè)大致的位置氯质,這個(gè)時(shí)候std cell可能是會(huì)有overlap的情況或者或者不在row上面
2)接著做coarse place的setup timing優(yōu)化,DRV優(yōu)化等
3)之后做place的合法化放置祠斧,也是可以理解為detail place闻察。在此之前std cell都是coarse place,std cell的位置比較隨意琢锋,彼此之間可能會(huì)重合辕漂,或者不在row上面,這一步就是將他們擺到row上面去吴超,同時(shí)std cell之間不能有重合或者1倍filler cell的間距
4)最后再進(jìn)行timing的優(yōu)化

Placement --
1, 環(huán)境mode設(shè)置
2, 執(zhí)行place_opt_design
3, 檢查setup timing钉嘹,DRVs是否符合預(yù)期,一般reg2reg(這里的reg2reg泛指除了io相關(guān)的path鲸阻,包括reg2reg跋涣、reg2cgate、reg2mem等等鸟悴,因?yàn)閕o相關(guān)的path是我們?nèi)藶樵O(shè)置的input delay和output delay陈辱,這些一般我們都是設(shè)置60%的時(shí)鐘周期,屬于過(guò)約束细诸,在時(shí)序上是不準(zhǔn)確的性置,在block階段是不用關(guān)注的)的wns小于100ps,drv基本clean即可繼續(xù)往下走
4, 檢查routing congestion是否滿足要求揍堰,一般總的overflow需要小于1.5% (overflow)
5, 檢查cell的desity是否滿足要求鹏浅,一般要求不要大面積出現(xiàn)超過(guò)80%的情況即可
6, 檢查max displacememt時(shí)候滿足要求嗅义,一般要求優(yōu)化過(guò)程中該數(shù)值小于100um
7, 查看設(shè)計(jì)的利用率
8, 設(shè)計(jì)的時(shí)鐘頻率

setup: 每個(gè)階段setup的WNS 控制在100ps左右即可以接著往下跑下面的流程,并非每個(gè)階段的timing都要沒(méi)有violation隐砸。

DRV: 只要不是floorplan的問(wèn)題或者不是特別大的都可以在pt timing signoff階段做fixing

整體density盡量不要超過(guò)80%之碗,而且局部density不要高于85%。主要是防止繞線detour和hold buffer沒(méi)地方插

  1. local congestion 解決方法
#第一種是檢查place優(yōu)化的mode
setPlaceMode -congEffort high
 # 設(shè)置完后重新跑opt即可
place_opt_design
#第二種是局部區(qū)域congestion優(yōu)化

congRepair  -area

#注意: 這個(gè)命令可以在做完place_opt_design的基礎(chǔ)上做congestion優(yōu)化季希。
#由于這個(gè)命令會(huì)根據(jù)congestion結(jié)果將它周圍的cell均攤開褪那,因此可能會(huì)搬動(dòng)較多的cell。
#所以這個(gè)命令不適用于post-cts timing 優(yōu)化后來(lái)使用式塌。
#第三種 Module Padding
setPlaceMode -modulePadding module factor
#這里的factor值需要根據(jù)自己的設(shè)計(jì)和經(jīng)驗(yàn)來(lái)設(shè)定博敬,通常取值范圍為1.2-2.0。
#舉個(gè)例子峰尝,比如這個(gè)值為2偏窝,表示工具在做global placement的時(shí)候會(huì)將這個(gè)module里面的每顆cell看做成2顆這樣的cell ,
#所以做出來(lái)的效果是這個(gè)module占用的面積更大武学,約為原來(lái)的兩倍祭往,cell之間的space就更大了。
#但需要注意的是火窒,這個(gè)命令只在global placement階段起作用硼补,在后續(xù)的refinePlace工具是不follow的。
#第四種 Instance Padding
在數(shù)字IC后端實(shí)現(xiàn)中經(jīng)常會(huì)把innovus中的幾種padding結(jié)合起來(lái)使用來(lái)達(dá)到一個(gè)最佳的congestion優(yōu)化效果熏矿。
foreach i [dbGet [dbGet -p2 top.insts.cell.name AOI*].name DTMF_INST/RESULTS_CONV_INST/*] { 
  specifyInstPad $i 2 
}
#第五種 Cell Padding
實(shí)際項(xiàng)目中經(jīng)常會(huì)碰到某個(gè)module中包含大量的AOI,OAI,NAD這種高pin density的cell已骇。
往往這種地方容易有l(wèi)ocal congestion問(wèn)題。那解決的方法就是將這類cell設(shè)置padding票编。
這個(gè)與ICC/ICC2中的keepout是一樣的效果褪储。
只不過(guò)S家的單位是具體距離,而C家的單位是多少site栏妖。

specifyCellPad cellName 6 (這里的6并非是6um)
#第六種 Density Placement Blockage
對(duì)于局部區(qū)域的congestion問(wèn)題乱豆,
特別是各種窄channel的地方或拐角的地方,經(jīng)常需要添加density placement blockage吊趾。
這種blockage其實(shí)就是傳統(tǒng)所說(shuō)的partial placement blockage
宛裕。主要的原理是通過(guò)控制該區(qū)域的density來(lái)解決congestion的問(wèn)題。

數(shù)字后端實(shí)現(xiàn)時(shí)congestion比較嚴(yán)重论泛,你hold得住嗎揩尸?
數(shù)字后端實(shí)現(xiàn)place過(guò)程進(jìn)階

五, CTS 時(shí)鐘樹綜合 & CTS_opt


CTS前

● 此時(shí)應(yīng)該做完標(biāo)準(zhǔn)單元的擺放,而且確保標(biāo)準(zhǔn)單元是legal的屁奏。
● placement的congestion map和cell density map比較合理
● Timing可以接受

1, 05_cts做完之后不用檢查時(shí)序岩榆,只需要檢查clock skew和clock latency是否合理,clock path是否存在兜圈的情況

  1. 到了06_ctsopt之后,我們才需要檢查時(shí)序是否滿足要求勇边,這個(gè)時(shí)候有了真實(shí)的clock skew犹撒,我們就需要開始優(yōu)化hold時(shí)序,跟place階段的timing評(píng)估標(biāo)準(zhǔn)一樣粒褒,只要reg2reg的setup和hold wns小于100ps识颊,drv基本修復(fù),就可以繼續(xù)往下走

3, 做完ctsopt之后奕坟,大家需要對(duì)timing進(jìn)行檢查祥款,需要明白common path和crpr對(duì)于timing的影響

單獨(dú)指定某個(gè)clk端latency(tree的做長(zhǎng)做短)

set_colock_latency -0.1 FF1/clk

告訴工具這個(gè)寄存器的clk端的信號(hào)到達(dá)時(shí)間是-0.1ns. 
這里意味著這個(gè)寄存器的時(shí)鐘到達(dá)時(shí)間比其他寄存器快0.1ns(100ps), 負(fù)號(hào)表示相對(duì)關(guān)系!
所以FF1的setup更容易滿足了

合理的時(shí)鐘結(jié)構(gòu)能夠加速Timing收斂(時(shí)鐘樹綜合中級(jí)篇)

時(shí)鐘樹綜合干貨分享

七, route


三個(gè)階段,分別是global route 月杉、Track Assignment 刃跛、Detail route。

Global route:可以預(yù)估design的congestion情況苛萎,這步會(huì)引用Gcell的概念分析track能通過(guò)gcell的數(shù)量桨昙,如果任何一個(gè)gcell存在congestion,工具在做global route時(shí)就會(huì)避開congestion區(qū)域來(lái)做global route首懈。
Track Assignment:就是將每一個(gè)net分配到特定的track上并鋪設(shè)實(shí)際的金屬軌跡绊率,軌道盡量長(zhǎng)谨敛、盡量直且有較少的打孔via究履。
Detail route:是按照上述的分配進(jìn)行實(shí)際的繞線同時(shí)會(huì)檢查drc的問(wèn)題。
在Route后脸狸,我們已經(jīng)有了真實(shí)的繞線情況最仑,這個(gè)時(shí)候就不需要考慮congestion map,直接看route之后的drc情況即可炊甲。

1, 繞線結(jié)束后我們主要關(guān)心繞線的DRC即可.
2, 理解天線效應(yīng)的修復(fù)操作.

如何評(píng)判route結(jié)果的好壞泥彤?

(1) short和open的數(shù)量控制在兩位數(shù)以內(nèi)
(2) 比較少的DRC
(3) 沒(méi)有多少天線效應(yīng)
(4) 沒(méi)有因?yàn)殚L(zhǎng)繞線而引起的DRV問(wèn)題
(5) 沒(méi)有比較大的timing violation,opt之后能夠控制在50ps以內(nèi)即可

八, route_opt


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載卿啡,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者吟吝。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市颈娜,隨后出現(xiàn)的幾起案子剑逃,更是在濱河造成了極大的恐慌,老刑警劉巖官辽,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛹磺,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡同仆,警方通過(guò)查閱死者的電腦和手機(jī)萤捆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人俗或,你說(shuō)我怎么就攤上這事市怎。” “怎么了辛慰?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵焰轻,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我昆雀,道長(zhǎng)辱志,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任狞膘,我火速辦了婚禮揩懒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘挽封。我一直安慰自己已球,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布辅愿。 她就那樣靜靜地躺著智亮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪点待。 梳的紋絲不亂的頭發(fā)上阔蛉,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音癞埠,去河邊找鬼状原。 笑死,一個(gè)胖子當(dāng)著我的面吹牛苗踪,可吹牛的內(nèi)容都是我干的颠区。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼通铲,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼毕莱!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起颅夺,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤朋截,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后碗啄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體质和,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年稚字,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了饲宿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片厦酬。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖瘫想,靈堂內(nèi)的尸體忽然破棺而出仗阅,到底是詐尸還是另有隱情,我是刑警寧澤国夜,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布减噪,位于F島的核電站,受9級(jí)特大地震影響车吹,放射性物質(zhì)發(fā)生泄漏筹裕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一窄驹、第九天 我趴在偏房一處隱蔽的房頂上張望朝卒。 院中可真熱鬧,春花似錦乐埠、人聲如沸抗斤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)瑞眼。三九已至,卻和暖如春棵逊,著一層夾襖步出監(jiān)牢的瞬間伤疙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工歹河, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留掩浙,地道東北人花吟。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓秸歧,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親衅澈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子键菱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容