芯片設(shè)計(jì)這個(gè)行當(dāng),從大的方面講,主要分模擬和數(shù)字兩大塊,而每大塊又分前端和后端,我想大部分同學(xué)對(duì)這個(gè)肯定是非常清楚的,下面就數(shù)字電路聊聊芯片設(shè)計(jì)的一些事情,就是芯片設(shè)計(jì)有哪些活要做,這并不是全面完整的系統(tǒng)介紹,只是個(gè)人的了解和總結(jié), 希望拋磚引玉,也許不全面,不正確,歡迎大家指正和補(bǔ)充。
說(shuō)到數(shù)字芯片,不能不說(shuō)FPGA,這種是可編程的數(shù)字電路,用法原理也不說(shuō)了,數(shù)字電路設(shè)計(jì)的目標(biāo)就是把這些功能做成我們自己專用的ASIC/SoC,這樣無(wú)論面積、成本或者安全性等都能有保證。
從流程上講,數(shù)字芯片設(shè)計(jì)的大致步驟就是系統(tǒng)與功能定義、RTL實(shí)現(xiàn)驗(yàn)證、 綜合及可測(cè)試性設(shè)計(jì)、ATPG仿真、時(shí)序分析到自動(dòng)布局布線(APR),直至交付fab的GDS網(wǎng)表。
這個(gè)流程是可以反復(fù)迭代的,對(duì)于不同類型芯片,如純數(shù)ASIC或混合電路(mix-signal)及系統(tǒng)級(jí)芯片(SoC),每一步的方法和具體實(shí)施流程上可能又有所差異。下面就這些基本流程分步談一些主要問(wèn)題。
系統(tǒng)設(shè)計(jì)主要涉及到功能定義及架構(gòu)設(shè)計(jì)、總線架構(gòu)的配置、模塊設(shè)計(jì)、數(shù)據(jù)流的分配、時(shí)鐘的設(shè)計(jì)等問(wèn)題。總線包括模塊之間,模塊與MCU核之間,外部主機(jī)和芯片之間通信,或者測(cè)試需要等等一系列因素。時(shí)鐘涉及到數(shù)據(jù)流的規(guī)劃、通信接口或內(nèi)部MCU的時(shí)鐘約定、工藝條件、功耗等因素。模塊需要明確接口和定義。
在系統(tǒng)級(jí)設(shè)計(jì)上, 特別是很多數(shù)模混合電路中或?qū)挠刑貏e要求的電路中,還要有電壓域的設(shè)計(jì),不同模塊之間,功能模塊和接口之間可能都需要根據(jù)工藝條件、功耗要求設(shè)置不同的電壓。
無(wú)論是時(shí)鐘,還是電壓,都可以通過(guò)控制開(kāi)關(guān)來(lái)實(shí)現(xiàn)功耗的要求,時(shí)鐘實(shí)現(xiàn)比較簡(jiǎn)單,在大部分電路中都可以實(shí)現(xiàn)這種時(shí)鐘控制。電壓控制一般是實(shí)現(xiàn)在集成有電源管理芯片的較大規(guī)模芯片上,但未來(lái)趨勢(shì)是即使沒(méi)有電源管理芯片,電壓的gating也需要納入考慮范圍。
在 SoC系統(tǒng)設(shè)計(jì)上,一個(gè)重要的環(huán)節(jié)是MCU 內(nèi)核的選型,現(xiàn)在常用的內(nèi)核一般是ARM、較老的ARM7、ARM9等系列,較新的是三大系列Cortex -A 、R、M,具體的用途不做詳細(xì)描述,選定好后,根據(jù)需要進(jìn)行設(shè)置,一般做硬件的人不需要對(duì)它的指令集了解太多,但是需要了解它的總線接口、數(shù)據(jù)總線、指令總線, 以及存儲(chǔ)系統(tǒng)的設(shè)計(jì),一般需要安排ROM、 RAM分別作為指令和數(shù)據(jù)存儲(chǔ)器,由于ROM是不可更改的,一般也需要加入flash作為補(bǔ)丁程序?qū)懭氲兀部赡苄枰獠看鎯?chǔ)器或者DMA控制器來(lái)增加外部存儲(chǔ)空間。地址的分配是按照功能需要來(lái)進(jìn)行的,現(xiàn)在有很多工具如synopsys的DesignKits可以產(chǎn)生外部總線代碼及進(jìn)行地址分配。
第一步完成系統(tǒng)和功能定義后,要實(shí)施的就是RTL, RTL是專門描述硬件電路的工具語(yǔ)言,有Verilog和VHDL。RTL的特點(diǎn)就是硬件上的同時(shí)觸發(fā)性,不同于軟件的按順序執(zhí)行,電路由時(shí)序邏輯和組合邏輯組成。時(shí)序邏輯在物理構(gòu)成上就是一些寄存器,這些寄存器受時(shí)鐘控制,寄存器代表了電路中的數(shù)據(jù)或控制信號(hào),這些信號(hào)受時(shí)鐘的驅(qū)動(dòng)流動(dòng)。組合邏輯是不受時(shí)鐘控制的電路塊,組合邏輯顧名思義通過(guò)一些信號(hào)的組合直接生成一些邏輯結(jié)果。
RTL設(shè)計(jì)中,一大問(wèn)題是異步設(shè)計(jì)問(wèn)題,異步數(shù)據(jù)的處理根據(jù)不同情況有很多方式,最簡(jiǎn)單的對(duì)異步的電平信號(hào),可以直接在新的時(shí)鐘域中加2級(jí)寄存器來(lái)隔離,避免不定態(tài)的發(fā)生。對(duì)于總線的處理或者脈沖的處理,則需要同步模塊。同步模快一般是指需要握手信號(hào),就是前一級(jí)時(shí)鐘告訴采樣的時(shí)鐘——信號(hào)ok了,采樣的第二個(gè)時(shí)鐘再去采樣,采好后再告訴前一級(jí)時(shí)鐘,我搞定了~那樣前一級(jí)時(shí)鐘就可以換數(shù)據(jù)或做其他處理。
有一種情況就是前一級(jí)時(shí)鐘太快,造成第二級(jí)來(lái)不及傳遞信號(hào),則需要加入FIFO作為隔離,就是讓那些數(shù)據(jù)先放好,我在慢慢來(lái)取。這個(gè)FIFO的設(shè)計(jì)涉及到讀寫地址的判斷,寫滿或讀空都需要作相應(yīng)處理,讀寫地址之間的判斷只能在其中一個(gè)時(shí)鐘域中進(jìn)行,這本身又涉及異步信號(hào)的處理問(wèn)題。一般用格雷瑪解決,或者有些地方直接可以判斷地址高位, 這些方法的目的就是不能讓地址在比較的時(shí)候不穩(wěn)定。
RTL設(shè)計(jì)中,時(shí)鐘本身的設(shè)計(jì)問(wèn)題也要注意,我們?cè)谝粋€(gè)芯片中,盡量把時(shí)鐘產(chǎn)生電路放在一塊,主要是從綜合DFT的角度去考慮的,讓這些時(shí)鐘統(tǒng)一管理和約束。時(shí)鐘的分頻、切換也要專門處理,否則容易產(chǎn)生毛刺等事情。
RTL設(shè)計(jì)中還有很多需要注意的問(wèn)題,比如可綜合性,還有要考慮到電路的面積,以及響應(yīng)速度等等,這些問(wèn)題是RTL coding的基礎(chǔ)問(wèn)題。代碼寫完后,需要進(jìn)行的是驗(yàn)證工作,下面談?wù)勥@方面的事情:
芯片驗(yàn)證一般有這幾個(gè)層面,一個(gè)是RTL級(jí)或者Netlist( pre or post PR with SDF ),這個(gè)也是一般意義上的芯片驗(yàn)證工作, 一個(gè)是FPGA級(jí)的,也是RTL,只不過(guò)download到FPGA中,借助硬件環(huán)境,也可以直接做應(yīng)用實(shí)驗(yàn)。
芯片驗(yàn)證的工作量在芯片設(shè)計(jì)中占據(jù)了大部分的時(shí)間和精力,無(wú)論是哪種驗(yàn)證,都需要搭建測(cè)試平臺(tái)(testbench),驗(yàn)證平臺(tái)從軟件結(jié)構(gòu)上模擬芯片的工作環(huán)境。既有清晰的連線結(jié)構(gòu),也有完成這些測(cè)試所需要的非結(jié)構(gòu)性的函數(shù)或任務(wù)包。測(cè)試平臺(tái)中的被測(cè)試芯片是RTL級(jí)的,測(cè)試向量或者說(shuō)施加的激勵(lì)可以是 verilog/VHDL,HDL語(yǔ)言本身就具有比較完善的行為級(jí)描述功能,也可以滿足絕大部分測(cè)試平臺(tái)的搭建和測(cè)試激勵(lì)的產(chǎn)生,當(dāng)然我們面對(duì)更復(fù)雜的設(shè)計(jì),或追求更高效率,也可以使用其它被編譯器兼容的語(yǔ)言, 如C/C++、SC、SV等等。
很顯然,測(cè)試激勵(lì)是有時(shí)間概念的,是按順序進(jìn)入和流出芯片的,使用的這些非電路描述語(yǔ)言和功能和軟件幾乎是沒(méi)有區(qū)別的,所以驗(yàn)證中也越來(lái)越多地使用軟件的一 些技術(shù), 如面向?qū)ο蟮木幊碳夹g(shù)、SystemVerilog、 Specman E等。
無(wú)論傳統(tǒng)的驗(yàn)證還是最新的驗(yàn)證方法學(xué),都需要追求驗(yàn)證的收斂性,即驗(yàn)證完全是自動(dòng)化的檢測(cè),除非debug, 我們無(wú)需通過(guò)波形判斷測(cè)試通過(guò)與否。
驗(yàn)證系統(tǒng)中,使用的一般是存儲(chǔ)器的模型加上文本格式的代碼文件, 一般實(shí)現(xiàn)是直接通過(guò)系統(tǒng)讀入指令把文件讀入到存儲(chǔ)器模型中。(有些仿真工具可以直接通過(guò)選項(xiàng)導(dǎo)入,類似SDF文件,如工具nscim)。
仿真器可以直接寫出指令執(zhí)行的log,以用于debug,不過(guò)現(xiàn)在有更先進(jìn)的方式用于復(fù)雜SoC驗(yàn)證, 如Codelink工具,能夠在原仿真器的基礎(chǔ)上,建立起MCU和HDL電路已經(jīng)軟件的關(guān)系,通過(guò)展示波形和固件(firmware)源碼的鏈接進(jìn)行更方便的debug。
審核編輯:劉清
-
寄存器
+關(guān)注
關(guān)注
31文章
5430瀏覽量
123963 -
芯片設(shè)計(jì)
+關(guān)注
關(guān)注
15文章
1077瀏覽量
55553 -
RTL
+關(guān)注
關(guān)注
1文章
389瀏覽量
60902 -
SoC系統(tǒng)
+關(guān)注
關(guān)注
0文章
52瀏覽量
10935 -
電源管理芯片
+關(guān)注
關(guān)注
21文章
785瀏覽量
53673
原文標(biāo)題:芯片設(shè)計(jì)有哪些活要做?
文章出處:【微信號(hào):芯司機(jī),微信公眾號(hào):芯司機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
半導(dǎo)體芯片需要做哪些測(cè)試

芯片為什么要做低功耗設(shè)計(jì)?
電機(jī)控制使用AMC1200或AMC1306等芯片,在線上采樣電流時(shí)是否還需要做PWM的觸發(fā)同步?
聊聊std::move函數(shù)和std::forward函數(shù)
活細(xì)胞的“聚光燈”——前沿活細(xì)胞成像的案例分享

使用TPA3118和TPA3116,如果一個(gè)板子用2個(gè)芯片,一定要做同步嗎?不做同步會(huì)怎么樣?
使用UCC2897A了解和設(shè)計(jì)有源箝位電流模式控制轉(zhuǎn)換器

【軟件干貨】Android應(yīng)用進(jìn)程如何保活?

請(qǐng)問(wèn)電流反饋運(yùn)放可以設(shè)計(jì)有源濾波器嗎?
要做一個(gè)100M帶寬的寬帶放大器,如何選芯片,如何搭電路?
如何根據(jù)你需設(shè)計(jì)有源濾波電路的帶寬來(lái)懸著運(yùn)放?
判斷一臺(tái)工業(yè)平板電腦是否合格的標(biāo)準(zhǔn)通常需要做哪些產(chǎn)品測(cè)試?
OPA189在設(shè)計(jì)有源帶通濾波器時(shí),溫漂影響比較大,怎么解決?
活柱激光熔覆修復(fù)技術(shù)
STM32H7系列芯片發(fā)不出去的hello問(wèn)題

評(píng)論