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