PS:字丑,禁止轉載!!!
首先先寫出大概的流程,然后是一些教材的理論知識總結,最后是進行lab2的一些流程概述。
教材的理論知識總結主要是:數字集成電路物理設計學習總結——布圖規划和布局
-->數據准備(設置)、加載設計並切換到floorplan模式
--> 創建拐角(Corner)和電源地(P/G)單元並定義他們pad的位置
-->創建floorplan
-->在電源/接地信號和I / O焊盤,宏和標准單元的所有電源/接地引腳之間建立“邏輯”連接
-->創建pad的電源環,保存電源環創建后的設計
-->驗證當前虛擬平面放置策略選項是否具有默認設置
-->設置sliver 的尺寸,防止標准單元放置在宏單元之間的狹窄通道
-->使用“無層次結構重力”(選項)來執行 時序驅動的虛擬平台放置
-->進行宏單元布局約束
-->檢查設置
-->所有宏單元周圍設置10微米的硬限制邊距
-->再次進行宏單元布局,鎖定所有的宏,保存IO、宏單元布局規划后的設計
-->在宏單元周圍創建P/G環
-->電源網絡綜合:對核心電源環、宏單元環、垂直以及水平環帶進行約束、提交電源計划、連接所有宏單元上的電源引腳,並創建標准單元電源軌道(power rail)、保存這一階段的設計
-->檢查時序
-->寫出DEF文件
-->為布局做准備而創建第二遍(布局規划)設計
上面是理論知識,下面是lab實踐:
首先就進行數據設置,數據建立(設置)之后,保存為orca_setup
數據設置的過程在lab2實驗中是沒有詳細敘述的,也就是說只給出了數據建立的結果:orca_setup
本次workshop實驗需要准備/用到的數據為:
需要說明的是,圈圈的文件,在數據設置階段就已經准備好了,其他方框的則是本次實驗需要准備的。
下面就是正式過程了:
一、加載設計
啟動ICC后,加載orca_setup這數據設置階段產生的階段設計,然后執行時序優化的控制腳本:
source scripts/opt_ctrl.tcl
然后在layout窗口中切換到design planning模式下:
File --> Task --->Design Planning
二、初始化平面圖(floorplan),也是創建布局規划
1、創建拐角(Corner)和電源地(P/G)單元並定義他們pad的位置:
因為邏輯綜合的網表里面沒有上面的這些物理單元,我們需要自己創建,才能進行放置他們的位置,創建只要執行下面的腳本:
source –echo scripts/pad_cell_cons.tcl
pad_cell_cons.tcl腳本里面的內容主要是:
·創建Corners pad和power/group pads
·定義Corner pad 的位置
·定義signal pad 和 power pad的位置(主要是分為左邊、右邊、頂層和底層)
2、初始化floorplan
需要注意的是,icc2013.3以后(包括),初始化floorplan不能用initial_floorplan,而是用create_floorplan(也就是進行布局規划).
3、插入pad fillers,填充pad之間的間隙
執行命令:
source ./scripts/insert_pad_filler.tcl
這個腳本文件主要定義要插入的filler cells
4、在電源/接地信號和I / O焊盤,宏和標准單元的所有電源/接地引腳之間建立“邏輯”連接(無物理布線),也就是執行前面數據設置中沒有進行的第6步:
source –echo scripts/connect_pg.tcl
5、創建pad的電源環:
create_pad_rings
6、保存電源環創建后的設計
save_mw_cel –as floorplan_init
三、將連接到IOpad的宏單元進行預布置(也就是布置好宏單元到核心區)
這里可以通過手動,也可以用腳本進行:
source –echo scripts/preplace_macros.tcl
這個腳本就是進行對三個宏單元的位置進行規划
四、執行虛擬平面放置
1、驗證當前虛擬平面放置策略選項是否具有默認設置:
report_fp_placement_strategy (個人理解也就是查看各種放置默認信息)
2、設置sliver 的尺寸,防止標准單元放置在宏單元之間的狹窄通道(sliver size <10)中:
set_fp_placement_strategy -sliver_size 10
3、使用“無層次結構重力”(選項)來執行 時序驅動的虛擬平台放置(以確保“邏輯層次結構”不會影響此非層次結構或平面布局的放置):
create_fp_placement –timing_driven -no_hierarchy_gravity
上面的這個命令的效果就是把宏單元的位置放好(在核心區域上)
4、把一些宏轉換成數組,電源和接地帶和宏單元環的布線可以更容易。將宏單元置於盡可能接近芯片的邊緣,將宏盡可能多地組合在一起、打開虛擬IPO以模仿時序優化(並防止不必要的布局優化)、限制某些RAM的合法布局方向,上面的四個操作通過執行腳本完成:(宏單元布局約束腳本)
source –echo scripts/macro_place_cons.tcl
5、檢查設置:
report_fp_placement_strategy
report_fp_macro_options
6、 所有宏單元周圍設置10微米的硬限制邊距。 這樣容易在宏單元周圍創建P / G環,並避免擁塞以及宏單元周圍的信號布線DRC錯誤:
source -echo scripts/keepout.tcl
7、再次進行宏單元布局:
create_fp_placement -timing_driven -no_hierarchy_gravity
可以進行擁塞分析
8、鎖定所有的宏:
set_dont_touch_placement [all_macro_cells]
9、保存IO、宏單元布局規划后的設計:
save_mw_cel -as floorplan_placed
五、在宏單元周圍創建P/G環
P/G環的創建方式(或者依據內容)主要有
·定義包含一組宏的粗略“區域”
·定義block ring layers,寬度和偏移量
·創建(提交)金屬布線
通過執行腳本創建宏單元的P/G環:
source ./scripts/macro_pg_rir ngs.tcl
六、電源網絡綜合
1、對核心電源環、宏單元環、垂直以及水平環帶進行約束
·電源帶約束
·對核心的電源帶約束
·為沒有電源環的PLL定義宏單元環
·進行全局約束
執行腳本:
scripts / pns.tcl
2、提交電源計划:
commit_fp_rail
3、連接所有宏單元上的電源引腳,並創建標准單元電源軌道(power rail):
preroute_instances
preroute_standard_cells –fill_empty_rows \
-remove_floating_pieces
創建完之后,可以進行IR drop分析
4、保存這一階段的設計
save_mw_cel -as floorplan_pns
七、檢查時序
1、PNS在METAL4和METAL5上產生了許多電源帶,這些帶放在標准單元上。可以有利地防止標簽單元放置在帶下 - 這降低了沿帶的擁塞的可能性,並且減少了對電源網絡的串擾影響。 在帶上應用“完整”電源網(pnet)阻塞,然后再次運行虛擬平面放置以考慮pnet設置:
set_pnet_options -complete "METAL4 METAL5"
create_fp_placement -timing_driven -no_hierarcI hy_gravity
2、通過執行實際布線進行檢查時序:
route_zrt_global
3、使用“view,查看”過程生成最大延遲(建立時間)時序報告(更新時序和生成報告需要幾秒鍾):
v report_timing
如果有時序違規,則可以重新進行優化布線:
optimize_fp_timing –fix_design_rule
4、保存設計
save_mw_cel -as floorplan_complete
八、寫出DEF文件
刪除所有放置的標准單元,然后以DEF格式寫出floorplan文件。這個DEF平面規划文件將被Design Compiler Topographical 使用來再次綜合;然后在ICC再次讀入再次綜合后的網表后,再用ICC進行布局規划:
下面是刪除所有放置的標准單元,然后以DEF格式寫出floorplan文件:
remove_placement -object_type standard_cell
九、為布局做准備而創建第二遍(布局規划)設計
假裝這個設計是從RTL代碼使用DC的拓撲模式重新綜合的,重新綜合的過程使用上一步生成的DEF文件。這是我們得到第二遍網表ORCA_2.v以及更新后的約束文件ORCA_2.sdc。
1、使用新的ORCA網表和約束執行數據設置:
source -echo scripts/2nd_pass_setup.tcl
這個腳本進行了標准的數據設置准備。
2、讀入上一個步驟寫出的def文件:
read_def design_data/ORCA.def
3、新應用的電源網絡合成后應用的pnet選項。這些設置不在DEF文件中定義:
set_pnet_options -complete "METAL4 METAL5"
4、將設計保存為ready_for_placement:
save_mw_cel -as ready_for_placement
ICC的設計規划實驗大概流程就是這樣了,其中主要跑腳本,腳本的內容才是設計規划的內容,要把腳本的內容參透才真正把這個實驗的內容參透。時間問題,這里就不仔細去看了,主要學習流程.
-->數據准備(設置)、加載設計並切換到floorplan模式
--> 創建拐角(Corner)和電源地(P/G)單元並定義他們pad的位置
-->創建floorplan
-->在電源/接地信號和I / O焊盤,宏和標准單元的所有電源/接地引腳之間建立“邏輯”連接
-->創建pad的電源環,保存電源環創建后的設計
-->驗證當前虛擬平面放置策略選項是否具有默認設置
-->設置sliver 的尺寸,防止標准單元放置在宏單元之間的狹窄通道
-->使用“無層次結構重力”(選項)來執行 時序驅動的虛擬平台放置
-->進行宏單元布局約束
-->檢查設置
-->所有宏單元周圍設置10微米的硬限制邊距
-->再次進行宏單元布局,鎖定所有的宏,保存IO、宏單元布局規划后的設計
-->在宏單元周圍創建P/G環
-->電源網絡綜合:對核心電源環、宏單元環、垂直以及水平環帶進行約束、提交電源計划、連接所有宏單元上的電源引腳,並創建標准單元電源軌道(power rail)、保存這一階段的設計
-->檢查時序
-->寫出DEF文件
-->為布局做准備而創建第二遍(布局規划)設計