Multi-bit的實現(xiàn)方法和應(yīng)用 (下)
掃描二維碼
隨時隨地手機看文章
In-place MBFF實現(xiàn)
相較于僅基于邏輯連接的MBFF封裝,如果考慮到布局的實際情況,那么就有physical aware的in-place的MBFF封裝實現(xiàn),這種思路可以應(yīng)用在常見的DCT/DCG/genus_PLE 等綜合流程。
和in-compilre相比,這種in-place的MBFF封裝,最大的優(yōu)勢,就是physical aware。譬如如下示意圖:
可見,工具將距離較近的SBFF封裝成了MBFF,簡單而言,工具的在封裝MBFF時候會更為謹(jǐn)慎(嚴(yán)苛),相應(yīng)的MBFF的封裝比率也自然會下降。
這里以DCT為例,它提供了一種in-place的MBFF實現(xiàn)方式:一種基于綜合結(jié)果的MBFF封裝方法。具體實現(xiàn)方法如下
set_multibit_options -mode none compile_ultra -gate_clock -scan -spg identify_register_banks source MBFF_SCR compile_ultra -gate_clock -scan -incremental -spg
和In-compile相比,這里需要注意兩個地方
- 在compile命令中,跳過MBFF封裝步驟
- 使用spg模式運行compile命令
-
基于綜合結(jié)果使用命令identify_register_banks,完成MBFF的in-place體交換。效果見下圖:

PS:封裝后的MBFF的坐標(biāo),是在原始SBFF的中間位置 - MBFF優(yōu)化后,需要使用compile -incremental進行進一步增量優(yōu)化,來平抑MBFF帶來的QoR影響
- 基于實際物理布局的情形進行MBFF有效替換:
- 相較常規(guī)的MBFF有了物理布局影響的考量,可以有針對性地進行MBFF封裝,這個對于最終的物理實現(xiàn)有很好的幫助
- 傳統(tǒng)的in-compilre的MBFF封裝,先做封裝,再做優(yōu)化,這樣很有可能導(dǎo)致優(yōu)化受限
- 可選擇的基于WNS的封裝方式,可以有效控制MBFF封裝對WNS的影響
# SYN flow: dc_shell> set hdlin_infer_multibit never\|default_none
dc_shell> compile_ultra -gate_clock -scan -spg dc_shell> identify_register_banks
dc_shell> compile_ultra -gate_clock -scan -incremental -spg dc_shell> write_file -format ddc -hierarchy top.ddc #APR flow: icc_shell> create_mw_lib ...
icc_shell> read_ddc
icc_shell> ...... icc_shell> place_opt_design -spg ......
可以看到。S家是通過SPG flow將此信息緊密聯(lián)動的,所以說,如果用戶使用了in-place的MBFF的流程,那么需要使用SPG流程完成這個信息的有效傳遞。相較傳統(tǒng)的in-compile的MBFF流程,MBFF的對APR實現(xiàn)的挑戰(zhàn)會變小。
APR階段的MBFF封裝
從上述的描述可以看到,綜合里邊可以有效地處理MBFF的封裝實現(xiàn)。對應(yīng)的,基于MBFF的封裝原理,除過上述SPG的MBFF流程外,APR階段也可以自己對MBFF進行封裝,以實現(xiàn)PPA的優(yōu)化。市面上常見的APR工具是S家ICC/ICC2和C家的innovus,這兩個工具都可以對MBFF進行封裝,原理是類似的,具體描述見下:- ICC flow
- Flow1:SPG flow,參見上述綜合的In-place MBFF封裝方法
- Flow2:coarse placement MBFF flow
icc_shell> create_mw_lib ...
icc_shell> read_verilog
icc_shell> ...... icc_shell> set_banking_guidance_strategy \ -input_map_file MBFF_map.file \ -register_group_file MBFF_reg_grp.rpt \ -output_file MBFF_assembly.tcl
icc_shell> create_placement ...... icc_shell> source ./MBFF_assembly.tcl
icc_shell> place_opt_design -skip_initial_placement ......
先配置MBFF的應(yīng)用策略,再創(chuàng)建粗布局(coarse placement),工具這個時候會根據(jù)粗布局的結(jié)果,構(gòu)建MBFF封裝方式,這個和in-place的MBFF封裝流程類似,然后用戶將導(dǎo)出的文件MBFF_assembly.tcl讀入,完成MBFF的封裝動作。最后使用place_opt_desing進行增量式優(yōu)化,完成MBFF的封裝實現(xiàn)。上述的兩個輸入文件:MBFF_map.file和MBFF_reg_grp.rpt都是在DC工具通過命令write_multibit_guidance_files來導(dǎo)出,以便指導(dǎo)ICC的MBFF封裝方式。
- Flow3:place_opt MBFF flow
icc_shell> place_opt
icc_shell> set_banking_guidance_strategy \ -input_map_file MBFF_map.file \ -output_file MBFF_assembly.tcl
icc_shell> create_banking_guidance
icc_shell> source MBFF_assembly.tcl
icc_shell> psynopt
基于SBFF的網(wǎng)表,完成正常的place_opt,然后基于物理布局結(jié)果,進行MBFF的封裝實現(xiàn),最后再做一次增量優(yōu)化,即可完成MBFF的優(yōu)化實現(xiàn)過程。如下圖示例:
- INVS flow
invs_shell> setOptMode \ -multiBitFlopOpt {true| false | mergeOnly | splitOnly} \ -multiBitFlopOptIgnoreSDC {true | false}
其中:
multiBitFlopOpt==true: timing_driven 下的MBFF封裝和打散 multiBitFlopOpt==false: 禁止MBFF操作,數(shù)據(jù)庫里邊已有的MBFF不受影響 multiBitFlopOpt==mergeOnly: timing_driven 下做MBFF的封裝操作 multiBitFlopOpt==splitOnly: timing_driven 下做MBFF的打散操作
任何階段設(shè)置了setOptMode配置,任何階段使用place_opt_design | optDesign等命令,都會根據(jù)這個設(shè)定進行相應(yīng)的優(yōu)化,這個選項也會被完整地保存在invs的數(shù)據(jù)庫中。在invs的任何優(yōu)化后的數(shù)據(jù)庫中,可以使用命令reportMultiBitFFs -statistics 對MBFF的替換結(jié)果進行統(tǒng)計報告:
這個評價系統(tǒng)和DC有一些相似之處,但是對于MBFF替換比率的表達,這里采用了Bit Per Flop:平均計算下,單個FF可以承擔(dān)的FF bit數(shù)量。這個值越高,說明MBFF的替換比率就越高,反之亦然。Invs還提供了一個pin map的報告文件,(PS:這個需要在invs的session里邊導(dǎo)出),命令是:dumpMultiBitFlopMappingFile。這個可以生成
- MBFF的封裝(merge)和打散(splie)的動作細節(jié);
- 原先的SBFF(D/Q)和MBFF(D*/Q*)的pin mapping的對應(yīng)關(guān)系
MBFF的命名
基于上述MBFF的實現(xiàn)方法和流程,MBFF的產(chǎn)生通常分為四種- DC的in-compile 封裝MBFF
- DC的in-place封裝MBFF
- ICC的in-place封裝MBFF
- Invs的in-place封裝MBFF
- 手冊給出的示范如下
但是經(jīng)過測試,得到的是類似下列的封裝方式:
這種命名方式可能會對formal的mapping有一定挑戰(zhàn),需要注意一下
- 第二種和第三種都是in-place的方式,也是使用工具導(dǎo)出的命令進行MBFF的封裝,這樣如果命名不是很友好,用戶可以通過調(diào)整腳本進行命名維護,對用戶后期的工作較為友好
這個默認模式就是簡單將FF的名字使用”_”進行連接。
- 第四種是invs是在in-place步驟進行封裝的,用戶對命名不能干預(yù),
Invs的方法比較友好,前邊使用了CDN_MBIT作為MBFF的引示,中間每一個SBFF都用MB進行引示,這個命名規(guī)則比較好理解,formal也比較容易區(qū)分。常言道,簡潔即簡單,看來invs不讓用戶干預(yù)命名,還是對自己的處理很有自信的。
流程梳理和推薦
基于上述陳述,對于MBFF的優(yōu)化方式已經(jīng)有了比較全面的理解,這里提供一些具體的數(shù)據(jù)供各位參考:- DCT采用in-place的MBFF封裝流程:
- invs基于netlist,進行的MBFF封裝流程
-
invs基于DCT in-place的netlist,進行的MBFF封裝流程
- MBFF可以在三個步驟進行封裝實現(xiàn):RTL,SYN,APR
- 綜合階段通常只作封裝,不做打散,
- APR階段需要基于時序進行封裝和打散,timing driven依賴
- MBFF的封裝對SBFF的布局有嚴(yán)重依賴:這點符合timing driven的目的
- SYN-APR MBFF flow
- SYN 打開MBFF優(yōu)化流程
- APR需要加載SYN吐出的initial placement DEF或者ddc。
- APR 使用skip_initial_placement 的place_opt命令,完成對MBFF的APR實現(xiàn)
- APR MBFF flow
- 基于SBFF的綜合數(shù)據(jù),在APR的place_opt階段開始實現(xiàn)MBFF
- 時序驅(qū)動模式下,工具可以自動實現(xiàn)后續(xù)步驟的MBFF的封裝和打散操作
【敲黑板劃重點】
MBFF的流程貫穿在整個設(shè)計實現(xiàn),最終的服務(wù)對象還是APR和時序分析。通過理解其流程,可以做出適用于自身設(shè)計的方案選擇,有效利用其優(yōu)勢,讓MBFF助力設(shè)計實現(xiàn),





