芯片設計里的Multi-Bit FF探究
時間:2025-11-17 23:03:44
手機看文章
掃描二維碼
隨時隨地手機看文章
在現(xiàn)代的芯片設計里邊,工程師在優(yōu)化功耗和面積上無所不有其極,這里討論的multi-bit FF 就是其中的一種方法或者稱之為一種流程。
MBIT FF vs signle bit FF
Multi-bit顧名思義就是將通常單bit的FF,封裝為一個多bit的FF,下面一起來看一下他們之間的異同:
- 單bit的asyn-clear scan-FF
針對這種單bit的asyn-clear scan-FF,vendor提供了幾種多bit的asyn-clear scan-FF,
-
multi-bit2 asyn-clear scan-FF
-
multi-bit4 asyn-clear scan-FF
-
multi-bit6 asyn-clear scan-FF
-
multi-bit8 asyn-clear scan-FF
可以看到,這里會有三類pin是共享關(guān)系
- clock pin
- clean/reset pin
- SI/SE pin
MBIT的優(yōu)勢
由于MBIT對一些common pin的共享機制,由此帶來的優(yōu)勢有:- 基于共享機制,晶體管級別的面積優(yōu)化
- common pin的使用,減少layout連線損耗
-
clock tree的leaf變少,降低clock tree長度和功耗
在cell級別,以T12工藝為例,同樣功能(Scan D Flip-Flop with Async Clear, drive strenth: X1)的signle bit和MBIT的比較如下(PS:用多個單bit 直接搭建多bit 結(jié)構(gòu)進行功耗面積的比對)
如果將signle bit 例化多次進行橫比,MBIT大體上都會在面積上:7.4% ~ 12.96% 的提高幅度,功耗上:-3.93% ~ 7.32% 左右的提升在了解了multi-bit的機理后,這里需要一起梳理一下multi-bit的流程。
MBIT的流程
RTL 階段對MBIT的推進
在讀入RTL之前,DC里邊通過配置 hdlin參數(shù):hdlin_infer_multibit 來對管理multi-bit的RTL階段的識別,
- 如果使用never:這個會完全忽略前端設計人員的意圖,可能會丟失directives的信息傳遞
- 如果使用default_all:這個會導致DC 會有一些自己研判的方法,會將multi-bit進行自己研判的替換,這里不會丟失設計者的directives,但是可能會對一些總線或者二維數(shù)組進行替換,這里會導致兩類問題
- timing:在第一圈compile_ultra的時候,timing信息并非完整,此時進行multi-bit的替換,勢必會導致后續(xù)時需優(yōu)化的障礙。過早打包可能還需要二次拆包
-
register的命名行為。如果RTL是這樣的二維數(shù)組定義
reg [7:0] mem[255:0]
正常情況下,DC會把這類二位數(shù)組mapping成:mem_reg[255][7] mem_reg[255][6] ...... mem_reg[255][0] ...... mem_reg[0][7] mem_reg[0][6] ...... mem_reg[0][0]
如果,這個時候如果使用了default_all,DC analyze會對此類數(shù)組格式進行multi-bit封裝,最終DC compile_ultra生成的instance名字會變得比較奇怪,如下:# use 4bit register bank mem_reg[255][7:4] ...... mem_reg[255][3:0] ...... mem_reg[0][7:4] ...... mem_reg[0][3:0]
R2G里的MBIT的流程
從上面的描述可以看到,MBIT的替換主要是為了面積/功耗收益的同時,時序不受影響(不出violation)。所以在physical aware 的DCT完成后,進行替換,是比較合適的時機:- mapping和邏輯優(yōu)化基本完成:ICG的影響已經(jīng)帶入,MBIT的控制共享比較清晰
- 由于是physical aware的DCT,時序信息也基本清楚,這里整體進行MBIT替換可以最大限度的利用MBIT的優(yōu)勢,如果后期(APR)有時序壓力,可以使用de-banking來進行降解MBIT,也是有二次操作空間

基于上述原理,用戶可以使用下面的簡單流程在綜合里邊進行MBIT的替換
對MBIT操作的核心命令是:identify_register_banks,這個命令在第一步compile_ultra完成后,可以對DCT/DCG里的FF進行MBIT替換,除過cell之間的相同clock和控制位,identify_register_banks命令會將物理位置相近的FF進行MBIT替換,所以,從S家的R2G策略上將,為了保持良好的繼承性,用戶需要使用DCG流程+ ICC/ICC2 DEF flow(read_def + place_opt -skip_initial_placement)來完成MBIT的替換應用。只有這樣才能把DCG替換FF的物理優(yōu)勢繼承下來當然,用戶也可以在ICC/ICC2 進行MBIT的替換,但是由于替換策略都是類似的,也是一定要有cell的初始布局后,才能進行替換,基本流程如下:
這里的流程近似可以看作把place_opt進行了拆分,在第一步coarse placement 后,加入了MBIT的替換,用戶需要手動sorce 這個 腳本(和identify_register_banks類似的用法)進行MBIT替換,而后再繼續(xù)執(zhí)行place_opt剩余的步驟。無論是在synthesis還是layout階段,MBIT替換的方式主要是基于兩點:
- timing
- 物理位置
DC 中 MBIT 替換實例
以DCG為例,在第一步compile_ultra完成后,使用identify_register_banks進行MBIT 替換-
替換前:
- 替換后:可以看到,新創(chuàng)建的MBIT位于原始兩個single bit的中間
命令運行日志:
這里會打印:
- single bit cell 刪除信息
- MBIT pin 連接信息

注:用戶可以通過set_multibit_option 來控制compile_ultra 命令的行為,這樣在綜合增量優(yōu)化步驟里邊,工具可以根據(jù)set_multibit_option配置的情形,來做banking和de-banking的操作。
MBIT的命名和管腳映射
工具是通過 identify_register_banks 產(chǎn)生MBIT的替換腳本,對于總線,通常是按照升序的策略進行命名的,當然,由于這個是后處理腳本,用戶也可以自己進行修改,但是通常沒必要改變默認行為,以免對后續(xù)formal產(chǎn)生影響。簡單命令如下:
對于合成后的MBIT cell,對應的Q輸出,也是沿用升序的方式:
A[0].Q -> MBIT_A[0]__A[1]__A[2]__A[3].Q1 A[1].Q -> MBIT_A[0]__A[1]__A[2]__A[3].Q2 A[2].Q -> MBIT_A[0]__A[1]__A[2]__A[3].Q3 A[3].Q -> MBIT_A[0]__A[1]__A[2]__A[3].Q4MBIT通過這樣的命名方式,對于后續(xù)的formal mapping和gate-sim等工作是有一定幫助的
本章詞匯
【敲黑板劃重點】





