你們以為我要講的是coding-style?
NO,我主要講的是其它和設(shè)計(jì)質(zhì)量相關(guān)的規(guī)范。
1、代碼篇
1.1、手撕代碼部分
module name需要包含一定的功能展現(xiàn),什么意思呢,比如要設(shè)計(jì)address remap,你就叫XXX_addr_remap或者XXX_addr_decoder。切記不要叫XXX_misc,一定是迫不得已再寫這個(gè)module,否則集成或者debug會很頭疼,誰知道這玩意是干啥用的。
當(dāng)然,內(nèi)容部分就是老生常談的:
·加注釋
·組合和時(shí)序
·縮進(jìn)
·狀態(tài)機(jī)
·阻塞賦值和非阻塞賦值
·一個(gè)module一個(gè)變量
·begin end對齊
·?語句和:的對齊等
1.2、第三方IP
我們除了仔細(xì)寫的代碼外,還會用第三方工具例如ARM和DesignWare生成很多簡單IP,例如AHB2AHB橋,I2C,DWT,UART,TIMER等,我們除了要清楚我們的功能feature外,還要注意module一定要加前綴,文件名同樣,否則我們無法與其他人的代碼區(qū)分開,這樣就會存在設(shè)計(jì)風(fēng)險(xiǎn)。
1.3、common cell
什么是common cell,就是我們常用的lib cell,例如mux,ckmux,ckg,ckand,ckor,sync_cell,dft_dff,等。為什么要單獨(dú)拎出來呢?因?yàn)檫@里不做好標(biāo)準(zhǔn),后端很痛苦。
我們一般會由專人負(fù)責(zé)設(shè)計(jì)和維護(hù),以后所有人無特殊情況禁止直接手寫lib cell,比如在某個(gè)module內(nèi)用always語句寫sync cell。
為什么呢?因?yàn)檫@些cell和后端約束強(qiáng)相關(guān),和dont touch list強(qiáng)相關(guān),和timing強(qiáng)相關(guān),因此,從SYNTH開始就要用專門的DC LIB替換他們,如果我們自己隨便在一個(gè)module里寫這些邏輯,DC工具和腳本無法抓取信息,但是如果我們例化common cell的話,他們處理起來就方便多了。
當(dāng)然,有一個(gè)細(xì)節(jié)就是define分支,一般會有SIM和ASIC分支,但是因?yàn)?a target="_blank">FPGA沒有CKG,所有我們會在這里增加FPGA分支將CKG變?yōu)镃KBUF。
1.4、memory cell
采用多級wrapper的方式,底層wrapper例化我們的physcal memory,并且在這一級對DFT信號,和timing相關(guān)調(diào)整信號做tie值處理。
二級wrapper做分支,分為SIM分支,F(xiàn)PGA分支和ASIC分支。這樣的話,即便沒有真實(shí)的物理memory,也不影響FPGA和SIM的同事使用。
當(dāng)然也可以再加一級wrapper,將所有的memory放在一起,通過generate if不同的參數(shù)(例如寬度,深度,tag)決定例化哪一個(gè)memory,這樣做的好處就是集成方便,不好的地方就是維護(hù)起來太麻煩。
2、filelist篇
soc設(shè)計(jì)的下游分為FPGA,SIM和SYNTH。但是三者的要求不同
FPGA要求filelist內(nèi)容FPGA vivado可綜合(有相關(guān)資源)。
SIM要求可以存在SIM model,不需要可綜合。
SYNTH要求必須可綜合。
因此,我們一般需要維護(hù)三個(gè)filelist,XX_FPGA.f,XX_SIM.f和XX_SYN.f,來滿足不同同事的需求,防止他們自己處理出現(xiàn)問題。
僅僅是這樣,對于大型SOC還是不夠的,需要一個(gè)filelist去重腳本,因?yàn)槊總€(gè)子系統(tǒng)subsys都可能例化了common cell(因?yàn)榭赡軙为?dú)仿真或者綜合呀),所以soc top拿到的filelist一定是有很多重復(fù)的文件,所以需要腳本展開并去重,重復(fù)的不是刪除,而是注釋,方便review(不知道腳本刪除的對不對,需要review)。
3、difine macro篇
設(shè)計(jì)中一定會有很多define,主要分為兩類:common define和function define
3.1、common define
例如SYNTH,FPGA,SIM這些,主要存在于memory wrapper和common cell中,我們需要整個(gè)項(xiàng)目組采用統(tǒng)一的格式,不能一會用SYNTH,一會用ASIC,這樣DC同事會經(jīng)常漏define,需要resynth。
3.2、function define
例如設(shè)計(jì)一個(gè)I2C,內(nèi)部多個(gè)模塊,這樣的話我們的位寬,地址寬度等會是由define參數(shù)傳遞,這些參數(shù)往往不需要給其他人展示,我們自己在define中定義,最后undefine就可以了,但是順序一定是最先編譯define,最后undefine,所以剛才的filelist去重腳本還有一點(diǎn)很重要的就是不能調(diào)整filelist順序喲。
4、交付質(zhì)量hand-off
我們每個(gè)需要綜合的節(jié)點(diǎn)一定要保證hand-off質(zhì)量,我們通常會使用spyglass做lint檢查,這是最基本的,否則DC同事一定無法綜合。會顯得我們的設(shè)計(jì)很LOW。
不同的節(jié)點(diǎn)有不同的要求,如果DFT也要進(jìn)場,我們需要用spyglass跑DFT flow,例如scan-ready,bist-ready和best-practice等幾個(gè)重要的goal。
當(dāng)然還有非常重要的CDC FLOW,也是靜態(tài)時(shí)序檢查,只是STA關(guān)注的是同步邏輯,spyglass CDC關(guān)注異步處理,兩個(gè)都做好了,才能保證設(shè)計(jì)的RTL和真實(shí)芯片的時(shí)序是一致的。
審核編輯:劉清
-
FPGA
+關(guān)注
關(guān)注
1629文章
21729瀏覽量
602982 -
SoC設(shè)計(jì)
+關(guān)注
關(guān)注
1文章
148瀏覽量
18774 -
狀態(tài)機(jī)
+關(guān)注
關(guān)注
2文章
492瀏覽量
27528 -
UART接口
+關(guān)注
關(guān)注
0文章
124瀏覽量
15288 -
Vivado
+關(guān)注
關(guān)注
19文章
812瀏覽量
66470
原文標(biāo)題:聊聊SOC設(shè)計(jì)那些與質(zhì)量相關(guān)的事兒
文章出處:【微信號:Rocker-IC,微信公眾號:路科驗(yàn)證】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論