如果對數字晶元設計感興趣的話,來學習我的MOOC吧。目前聽課人數已經超過1000人。

今年上半年花了很多精力錄製了一門MOOC課程《芯動力——硬體加速設計方法》,在「中國大學MOOC」網站正式開課。在「中國大學MOOC」搜索課程名稱即可參與,或者訪問該短鏈接https://url.cn/57pFUkB,免費收看。近400分鐘的視頻,為了保證質量,內容設計、文字講稿、視頻錄製等每一項都是自己親力親為。挺累的,其他事情也耽擱了一些。在本職工作崗位為中國芯人才培養做的微小貢獻吧。本課程重點面向對「ASIC/SoC/FPGA前端設計」感興趣的同學,希望對同學們有所幫助。第一次在鏡頭面前錄視頻,教學內容安排和儀態都有很多問題,後面持續改進。


前排幾位答主大多結合自身學習經驗給出了建議,相信可以幫助題主以及其他集成電路設計方面的「小白」少走一些彎路。

小A整理了模擬混合信號設計驗證專家邵亞利老師撰寫的一篇文章中關於SOC設計的內容,在此與題主及各位知友分享。

讓我們先來「解剖」SOC晶元,瞭解其內部結構

圖1 混合信號SOC典型框圖

這張圖是一顆混合SOC晶元,藍色部分是數字部分,通常有微處理器、基帶(BB)、匯流排、SRAM (緩存,或者叫內存)、有NVM(非易失性存儲器),比如說像FLASH、EEPROM,或者OTP,還有Video, Audio, USB,以及外設的一些介面控制電路,像SPI、I2C、HDMI介面或者UART、GPIO、PWM控制等。

綠色部分是模擬或者模擬為主的混合模塊,通常有OSC/PLL(Phase Locked Loop)振蕩器,有作為數字和外界的窗口ADC(Analog to Digital Converter)或者DAC(Digital to Analog Converter),有邏輯控制的GPIO作為通用的I/O介面,為了給數字電路供電有LDO,因為數字電路需要比較穩定的電源。

右邊第一個是PHY,是協議物理層,通常它本身也是一個數模混合的模塊,它既有數字電路也有模擬電路,把它放在這裡就表示需要模擬工程師對它進行重點的關注。還有作為對微弱信號處理的放大器和模擬前端AFE(Analog Front End),AFE將模擬信號經過放大處理,把它輸入到ADC或者數字電路當中。Power Management是經常會用到的一個模塊,包括BUCK,BOOST或Charge Pump等模塊,另外就是感測器的控制電路。前面這幾個模塊每個晶元都不一樣,有可能有,有可能沒有。但是左邊這一列,基本上每個SOC晶元都會有。

那麼如何設計與實現一款混合SOC呢?邵老師在文章中總結了數模混合SOC設計常用流程和工具。

1. 以數字為主的SOC設計流程

常用文檔編輯工具,從高級描述開始,採用Verilog, System Verilog或者C語言,去設計數字電路並製作Test Bench(TB)和層次化的模型,再用模擬工具去模擬模型,然後通過標準單元庫,自動綜合成門級電路,生成網表,再對網表進行布圖並生成三個文件(GDS、Netlist和Timing信息的SDF),設計告一段落。

在驗證階段需要模擬的Model,供數字控制模擬或者模擬返回到數字的模擬驗證。也需要固件的二進位碼供給TB對SOC進行模擬。

2. 以模擬為主的SOC設計流程

區別於寫代碼,模擬IC設計通常是以電路圖來做設計,電路圖中包括電阻電容/MOS管等基本元件,和相關拓撲連接關係。模擬工程師通常先設計子模塊,電路圖的頂層則是由一個模擬頂層的線路圖和一個空的數字模塊構成。

頂層模擬開始階段用Digital的RTL的IP模塊和Firmware組合,加之模擬電路,進行Analog On Top的模擬。模擬驗證通過後,RTL進行PR,再由Schematic Verilog-in組成最終頂層的線路圖,結合數字的SDF的Timing約束,完成PR後的模擬。

從後端看,頂層模擬後進行Analog layout將等在Digital PR完成,然後Stream-in進來一起形成TOP的Layout,即使有些IP可能不會給底層的GDS,通過Phantom View形成TOP的Layout,再對它進行LVS。

3. 數模混合SOC並行協同設計流程

公開的/工業標準的資料庫的出現,例如Open Access(OA),對數模混合SOC方法學的開發與應用做出了重要貢獻。OA是一種層次化的資料庫,能同時存儲數字和模擬,從而不需要將數據從一種格式轉換到另外一種格式。公共資料庫是同步混合信號設計的基本要求,否則在以前單獨的模擬或者數字方法學中,每個區域對對方而言都是黑盒子,就非常容易出錯,甚至是低級錯誤,因為複雜的功能,不同的Background, 模糊的「Common Sense」,都增加了晶元出bug的風險,一些簡單錯誤可能會導致很嚴重的後果,例如功能不正常,過長的流片後的debug時間,昂貴的再流片成本,更重要的是Delay的研發週期,錯失的市場窗口。

通過OA資料庫的支持,數字和模擬之間完全透明,從而誕生了數模混合併行協同設計的流程,它可以同時汲取數模流程中的優點,迴避其缺點,從而最高效率地設計混合SOC。

以下表格對比和總結了以上三種數模混合IC的設計驗證與實現流程。

表1 數模混合IC的設計/驗證/實現流程

4. 數模集成電路設計的常見工具

圖2 數模混合設計與實現的常見工具

數模混合驗證需要在頂層同時整合兩套設計流程。模擬工程師熟悉的流程是Schematic Based,數字設計師使用RTL module。

通常熟悉Cadence Virtuoso schematic + Spectre的是模擬設計者。數字設計工具Synopsys用VCS+Verdi,Cadence用的是Xrun+Simvison,此外還要搭建Firmware的設計環境。當然,寫程序和編譯還要用到ARM CC或者像GCC之類的工具。

後端設計,模擬往往用Virtuoso Layout,再加上Calibre,做LVS和DRC;數字設計要用DC綜合,時序分析PT(Prime Time),布圖用ICC(或Encounter),還有FM(形式驗證),Patten(測試矢量的自動生成)工具。

讀到這裡的你相信已經整體把握了SOC晶元的結構和設計流程,不妨就以此為框架不斷擴充,開始系統地學習集成電路設計吧!也歡迎廣大知友在下方評論區分享想法~


作為剛從物理本科轉到IC design不足一年的小白,想分享一下自己的想法。

首先需要明確,集成電路設計分數字,模擬,CAD三個方向,模擬和CAD我也不太熟悉,數字方向從研究方向上分為計算機體系結構和演算法,從工程上來說分為前端和後端。

開發一個數字集成電路,前端任務通常包括先使用高層次語言如C++,Python等搭建一個可以快速迭代的演算法模型,然後根據演算法模型完成硬體設計的代碼,並與軟體模型進行交叉功能驗證;硬體代碼經由綜合步驟得到網表文件即可以交付後端工程師完成後續的步驟(對於後端也在學習中)。

針對題主的問題,若是選擇數字方向,我個人覺得可以先從最基礎的數集開始學習理論知識,同時學習一些Verilog,SystemVerilog語言,以及Vivado等等EDA工具的使用方法,動手實現一些簡單的小模塊,由簡到繁,循序漸進;然後可以學習一下微機原理,計算機組成原理,計算機體系結構這幾門課,認識一下狀態機,流水線等等常用的電路結構。在這個過程中會逐漸確定一個深入的方向,例如是演算法開發,或是計算機體系結構研究等等,並針對性地補全缺少的理論知識和工具知識。

因為我也只是根據實驗室的研究方向補了很小一部分知識,所以對於學習路徑等等認識多有偏頗,歡迎討論~


既然只是學習集成電路設計的話,器件,工藝方向的好多書就不用看了(當時在學校什麼四大力學學的簡直生不如死)

可以從基礎的高數,電路基礎,信號與系統學起,進而學習數電,模電(半導體物理,半導體工藝,半導體器件的基礎還是需要了解一些的),然後就可以開始看模集,數集。(列出來的書感覺是真正有用的,大學四年好多課感覺都沒什麼用……)

因為自己是模擬方向的,如果深入學習模擬方向的話,可以先看拉扎維的那本模集書,那本講的比較適合初學者(現在已經有了第二版了,基本上每次看都有新的收穫),然後可以看看一本紅色的模擬集成電路設計精粹,這本書就是進階了。當然只看書是不太夠的,可以去看一些模擬實例的書,在cadence的virtuoso裏搭電路,模擬。另外格雷還有艾倫的模集也可以看一看,這幾本書都是比較經典的。拉扎維的那本射頻書也可以看看,學模擬的話,射頻的基礎知識還是得了解的。

數字的話不太瞭解,可以看看verilog還有FPGA的書。


數電好上手,模電入門難需要很多年的經驗,各種機緣巧合,我最終學了數電VLSI。本科學物理的時候粗略學過基電、數電、模電。換了專業以後,先重新複習了基電、數電包括卡諾圖化簡,Finite state machine等也做了一些習題加深理解。

然後閱讀了computer organization and design: the hardware/software interface這本書,明白了軟體是怎樣轉化成指令在計算機裏執行。同時研究生上課學習Computer Architecture 和VLSI Design。Computer Architecture用的教材是computer architecture a quantitative approach, 這本書是我自己閱讀的computer organization and design的延續,會進一步明白計算機的架構。VLSI Design這門課用的教材是CMOS VLSI Design a circuits and systems perspective,裡面介紹的怎樣用CMOS設計基本門電路,動態靜態功率怎樣計算,怎樣分析各種因素對性能功耗的影響,setup hold timing violation計算,charge sharing,latchup等對晶元的影響,存儲系統的設計,combination/sequestion電路的設計,VLSI設計流程都需要掌握

第二學期上了VLSI digital signal processing system 和embedded system design的課程。VLSI DSP用的Parhi寫的書VLSI DSP Design and Implementation , 裡面講了很多架構方面的知識,對architecture的開發寫RTL會有用。

除了上課,自己還學習了verilog,有一本書叫 FPGA Prototyping by Verilog Examples,為此自己買了塊FPGA開發板(這個對學生來說其實有點貴),這本書裡面的例子都可以自己用verilog寫出來,然後編譯下載到FPGA板裏,可以用開發板連接其他設備看到效果,挺好玩的。期間還看過一本書叫FPGA Simulation:A Complete Step-by-Step Guide,這本書主要講RTL verification的,但這本書寫得不好,廢話比較多,也缺少讓人練習的例子。中途也看過模電聖經Analysis and Design of Analog Integrated Circuits,這本看起來比較慢,很多東西需要慢慢消化,由於時間不夠只看了一半。但最後只做數電,裡面的知識已經忘光了。後來還用C寫過spice simulatior,算做了一點CAD的東西。

學會了理論知識以後,剩下的就是找機會實踐,工作和學習理論不太一樣,實踐會讓人知道理論知識怎麼用。上學時期運氣比較好,去了一家大公司實習,數電VLSI的後端所有流程都經歷了,剛開始會比較喫力,很多實際碰到的問題會不理解,通過問人,自己鑽研,挺過了這段時期就好了。實習期間學到了怎樣寫timing constrains,auto place之前怎樣放置大的memory array,latch huddling和moving bounds對placement的影響,讀懂timing reports以及怎樣fix timing violations,timing driven routing是怎樣工作的。EDA tool都是可以輸入腳本命令的,會些腳本語言很有用。


推薦閱讀:
相關文章