Multi-bit的實(shí)現(xiàn)方法和應(yīng)用

MBFF的優(yōu)勢(shì)和劣勢(shì)

MBFF是把數(shù)個(gè)single bit FF(SBFF)被封裝(banking/merge)到一個(gè)MBFF上,對(duì)時(shí)序優(yōu)化有一些影響,具體見(jiàn)下:

面積優(yōu)勢(shì)

在std-cell構(gòu)畫(huà)的時(shí)候,進(jìn)行邏輯共享,面積有明顯提升


功耗優(yōu)勢(shì):由于gate級(jí)別的整合,在面積提升的基礎(chǔ)上,功耗也有明顯收益


時(shí)序劣勢(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對(duì)每個(gè)單獨(dú)的SBFF的時(shí)鐘路徑靈活使用useful skew進(jìn)行精細(xì)控制

雖然PPA的優(yōu)化,MBFF二對(duì)一勝出,但是實(shí)際情況確實(shí),在中后端幾十年以來(lái)的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用戶可以通過(guò)synopsys原語(yǔ)來(lái)知道DC對(duì)RTL相應(yīng)的設(shè)計(jì)進(jìn)行MBFF的構(gòu)建。PS:并非顯性地(explicit)在RTL中例化MBFF,這樣會(huì)對(duì)設(shè)計(jì)人員帶來(lái)很大的約束,也不利于后面的流程。


在DC的默認(rèn)配置下,elaborate命令執(zhí)行的時(shí)候,會(huì)對(duì)上述設(shè)計(jì)以及原語(yǔ)解析,會(huì)對(duì)應(yīng)輸出下列日志:


上述日志表達(dá)了兩個(gè)意思:

使用原語(yǔ)的q0:synopsys infer_multibit "q0",被封裝成了MBFF。(當(dāng)然需要滿足前文所述的MBFF邏輯設(shè)計(jì)要求)

未使用原語(yǔ)的q1,并未被封裝成了MBFF。(即便滿足前文所述的MBFF邏輯設(shè)計(jì)要求)

這里S家也貼心的給中端工程師提供了一個(gè)配置供選擇。

用戶通過(guò)變量hdlin_infer_multibit來(lái)控制DC elaborate的對(duì)應(yīng)操作。


這個(gè)變量有三個(gè)選項(xiàng):

default_none:DC僅僅根據(jù)RTL里邊的原語(yǔ)infer_multibit進(jìn)行MBFF識(shí)別。如果沒(méi)有碰到,就不轉(zhuǎn)化MBFF。PS:這個(gè)是DC的默認(rèn)設(shè)置。前提是RTL設(shè)計(jì)人員需要使用原語(yǔ)進(jìn)行MBFF指定,否則In-compile MBFF flow無(wú)法實(shí)現(xiàn)MBFF的封裝。具體細(xì)節(jié)見(jiàn)后續(xù)描述

default_all: DC根據(jù)RTL代碼的邏輯連接關(guān)系,主動(dòng)地去做MBFF的識(shí)別,無(wú)論是不是使用原語(yǔ)infer_multibit,DC都會(huì)根據(jù)邏輯連接關(guān)系,盡量進(jìn)行MBFF的封裝,除非DC遇到禁止MBFF封裝的原語(yǔ)(后文會(huì)提供細(xì)節(jié))。

never:DC工具忽略infer_multibit原語(yǔ),也不主動(dòng)去封裝MBFF,所以,在elaborate命令下,不會(huì)有任何的MBFF封裝動(dòng)作發(fā)生

下圖截取了三個(gè)不同配置下,elaborate命令的日志,MB列的結(jié)果有不同


S家為了配合上述變量的靈活使用,當(dāng)hdlin_infer_multibit配置成default_all的時(shí)候,可以使用原語(yǔ)dont_infer_multibit進(jìn)行排外處理:所有定義這個(gè)原語(yǔ)的寄存器,即便用戶使用了 hdlin_infer_multibit=default_all的配置,elaborate的時(shí)候,也不會(huì)對(duì)dont_infer_multibit指定寄存器進(jìn)行MBFF的封裝。

如下圖示例的q1,即便用戶已經(jīng)使用了default_all,這里在elaborate時(shí),仍然沒(méi)有發(fā)生MB的封裝


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容