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

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





