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

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

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

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





