Multi-bit的實現(xiàn)方法和應(yīng)用 (上)
時間:2025-11-17 23:06:37
手機看文章
掃描二維碼
隨時隨地手機看文章
MBFF是中后端設(shè)計實現(xiàn)常用的手段,這里結(jié)合中后端流程,來探討MBFF的優(yōu)勢和使用策略。
MBFF的優(yōu)勢和劣勢
MBFF是把數(shù)個single bit FF(SBFF)被封裝(banking/merge)到一個MBFF上,對時序優(yōu)化有一些影響,具體見下:
-
面積優(yōu)勢
在std-cell構(gòu)畫的時候,進行邏輯共享,面積有明顯提升
-
功耗優(yōu)勢:由于gate級別的整合,在面積提升的基礎(chǔ)上,功耗也有明顯收益
-
時序劣勢:
下圖示例了SBFF到MBFF的物理布局的轉(zhuǎn)變
- SBFF被封裝成MBFF后,數(shù)據(jù)路徑的終點會改變,可以變近(如上圖FF2),也可能變遠(yuǎn)(如上圖FF1),setup/hold會有變化
-
SBFF被封裝成MBFF后,時鐘路徑的終點會整合,不能像SBFF對每個單獨的SBFF的時鐘路徑靈活使用useful skew進行精細(xì)控制
雖然PPA的優(yōu)化,MBFF二對一勝出,但是實際情況確實,在中后端幾十年以來的timing_driven 實現(xiàn)策略確實這個天平不可忽略的重要因素。具體范例和沖突,本文后面也會單獨討論
MBFF的封裝方式
基于MBFF的特性,在整個中后端設(shè)計流程中,用戶可以在三個地方有選擇的進行MBFF的封裝操作- RTL階段
- 綜合階段
- APR階段
RTL階段的MBFF封裝
基于中后端設(shè)計流程,MBFF的第一個入口是RTL,DC用戶可以通過synopsys原語來知道DC對RTL相應(yīng)的設(shè)計進行MBFF的構(gòu)建。PS:并非顯性地(explicit)在RTL中例化MBFF,這樣會對設(shè)計人員帶來很大的約束,也不利于后面的流程。-
RTL指定MB封裝
原語:synpsys infer_multibit REG_NAME

上述日志表達了兩個意思:
- 使用原語的q0:synopsys infer_multibit "q0",被封裝成了MBFF。(當(dāng)然需要滿足前文所述的MBFF邏輯設(shè)計要求)
- 未使用原語的q1,并未被封裝成了MBFF。(即便滿足前文所述的MBFF邏輯設(shè)計要求)
用戶通過變量hdlin_infer_multibit來控制DC elaborate的對應(yīng)操作。

這個變量有三個選項:
- default_none:DC僅僅根據(jù)RTL里邊的原語infer_multibit進行MBFF識別。如果沒有碰到,就不轉(zhuǎn)化MBFF。PS:這個是DC的默認(rèn)設(shè)置。前提是RTL設(shè)計人員需要使用原語進行MBFF指定,否則In-compile MBFF flow無法實現(xiàn)MBFF的封裝。具體細(xì)節(jié)見后續(xù)描述
- default_all: DC根據(jù)RTL代碼的邏輯連接關(guān)系,主動地去做MBFF的識別,無論是不是使用原語infer_multibit,DC都會根據(jù)邏輯連接關(guān)系,盡量進行MBFF的封裝,除非DC遇到禁止MBFF封裝的原語(后文會提供細(xì)節(jié))。
-
never:DC工具忽略infer_multibit原語,也不主動去封裝MBFF,所以,在elaborate命令下,不會有任何的MBFF封裝動作發(fā)生
下圖截取了三個不同配置下,elaborate命令的日志,MB列的結(jié)果有不同
如下圖示例的q1,即便用戶已經(jīng)使用了default_all,這里在elaborate時,仍然沒有發(fā)生MB的封裝
綜合階段的MBFF封裝
RTL的MBFF是通過簡單的原語來進行MBFF封裝指定(infer_multibit)或者MBFF封裝排外指定(dont_infer_multibit)。除過elaborate對MBFF進行未映射(unmapped)級別的封裝,綜合流程主要還是通過compile等命令來進行MBFF的映射(mapped)實現(xiàn)的。無論是RTL使用原語對MBFF進行指定,抑或使用hdlin_infer_multibit=default_all進行MBFF識別,任何在elaborate階段的FF,只有存在MB==Y的情形,才是有可能在后期通過compile命令完成MBFF的封裝,譬如下圖的q0_reg,在compile命令執(zhí)行中,才是有可能被映射實現(xiàn)成MBFF的
Compile步驟里邊,通常有兩種方式進行MBFF的映射實現(xiàn)(mapped)。
- In-compile MBFF實現(xiàn):基于數(shù)據(jù)庫的形態(tài),使用compile 命令,直接進行MBFF的映射實現(xiàn)
- In-place MBFF實現(xiàn):基于DCT的物理布局?jǐn)?shù)據(jù),對距離相近的FF進行MBFF的封裝實現(xiàn)(banking)
In-compile MBFF實現(xiàn)
Compile命令,通過下列命令set_multibit_options對MBFF的實現(xiàn)進行配置,已完成從unmapped MBFF到真實的MBFF的實現(xiàn)PS:顧名思義,這個步驟也需要目標(biāo)工藝庫提供MBFF的支持,因為在elaborate的時候,只是一個基于邏輯的MBFF評判,最終的實現(xiàn)還是在compile掛靠工藝庫的操作
- default: 將所有的MBFF的優(yōu)化配置恢復(fù)為default
- exclude_registers_with_timing_exceptions: 設(shè)置為true時,對所有帶有timing exception的寄存器跳過MBFF的映射實現(xiàn)
- mode:MBFF的模式選擇,有下列四種模式可供選擇
- none:compile命令中跳過MBFF封裝
- non_timing_driven:無論時序好壞,工具盡可能的去做MBFF,這樣實現(xiàn)的MBFF的比率最高
- timing_driven:時序驅(qū)動的方式去做MBFF映射實現(xiàn),最后的結(jié)果是timing 得到保障的情況下,面積也可以得到了優(yōu)化
- timing_only:僅僅時序驅(qū)動的方式,時序會最優(yōu)解,但是面積可能不是最優(yōu)化的結(jié)果。
- ignore_timing_exception: 當(dāng)exclude_registers_with_timing_exceptions== true的時候,在進行MBFF映射實現(xiàn)的時候,對指定的timing_exception的類型可以進行MBFF的映射,相當(dāng)于對exclude_registers_with_timing_exceptions選項的一個二次細(xì)化。目前支持GROUP_PATH, FALSE_PATH, MULTI_CYCLE_PATH, MIN_DELAY, MAX_DELAY等五類。譬如:
set_multibit_options \ exclude_registers_with_timing_exceptions true \ ignore_timing_exception FALSE_PATH是對除過FALSE_PATH 的其他所有擁有timing exception的SBFF跳過MBFF映射實現(xiàn)。言下之意就是擁有FALSE_PATH 的SBFF會被封裝實現(xiàn)為MBFF。
- critical_range: 當(dāng)時序驅(qū)動模式打開時,這里定義的時序范圍都被考量,這個和group_path里的critical_range類似
-
path_group:當(dāng)時序驅(qū)動模式打開時,只有這里指定的path_group被考慮。如果不定義這個選項,則所有的path_group都被考慮
所以,一個實現(xiàn)MBFF的compile命令類似下例:
dc_shell> set_multibit_options -mode timing_driven dc_shell> compile_ultra -gate_clock -scancompile結(jié)束后,可以通過命令report_multibit_banking查看MBFF的替換結(jié)果統(tǒng)計
對于MBFF的替換計算,這里設(shè)定,
- MBFF_cnt(n): 擁有n-bit寬度的MBFF的instance數(shù)量
- SBFF_cnt:擁有single-bit的SBFF的instance數(shù)量
- Total_bit_cnt: 所有的SBFF和MBFF折算成SBFF對應(yīng)的bit數(shù)。這個也就是數(shù)據(jù)庫在不采用MBFF flow的時候的全部FF的數(shù)量
-
MBFF_ratio: 所有的MBFF對應(yīng)SBFF的數(shù)量占比
推導(dǎo)出:

綜上,衡量一個數(shù)據(jù)庫的MBFF的占比主要是MBFF_ratio這個值,這個值越高,說明數(shù)據(jù)庫中被封裝成MBFF的FF越多,相應(yīng)獲得的面積/功耗收益就越大。PS:由于MBFF的類型較多,分別有2、4、8bit等,單純查看MBFF的instance數(shù)量是不全面的。
【敲黑板劃重點】
MBFF對PPA有較大貢獻,也是現(xiàn)在std-cell的標(biāo)準(zhǔn)交付器件,充分理解MBFF的實現(xiàn)方法和手段,對整個前端、中后端的設(shè)計實現(xiàn)會提供很大的靈活性和可控性,無論時設(shè)計人員還是實現(xiàn)人員,都是工作中的必備技能。





