十年前的 ASIC/SoC 設計跟現在的 ASIC/SoC 設計,發生了哪些變化?

1.過去十年,我國的集成電路產業發展應該是是比較快速的,技術日新月異,數字IC從ASIC到SoC的發展,無論是ASIC或者是帶「核」的SoC,相信它們的設計技術跟流程在這十年里應該有所變化,希望前輩們暢所欲言。

2.經過十年的發展,數字IC設計流程裡面的流程大體相似,但是卻又有點區別,比如綜合策略,之前有自頂向下,自底向上,然後發展到ACS(自動晶元綜合)技術。相信工業級界跟科研界也是有區別,希望前輩們能碼一下你們的感覺。

3.無論是工業界還是科研界,應該很少人能夠親身經歷設計規划到工藝製造,每個人應該都是負責自己的工作崗位的一部分,希望大家結合自己的崗位,發表一下自己的見解。


我維護過1997年的ASIC代碼,我來說說幾點比較受衝擊的感受吧。

早期的時候電路設計上是非常走極端的,到處呈現出極簡主義的特點。例如:

1、在晶元里大規模使用latch而不是寄存器以節省面積。

2、在非運算功能的組合電路中大量使用偽隨機數生成器取代加法器或減法器,比如典型的counter電路,由於本質上我們只關心counter的計數周期以及下溢出判斷,而counter是不是從1數到16其實無所謂,於是就有了用偽隨機數生成器代替counter來計數的辦法,只要保證數字不重複地數一圈,數到0就下溢出即可,電路上只需要N個寄存器加一個同或門就夠了,比加法器確實簡單很多,只是用起來很折騰,配置初值要查表,比如你希望counter數個5,正常counter寫個4的初值進去每時鐘減1就可以了,而這種偽隨機數生成電路你要先查表,看一下數5次以後變成0的那個初值應該是多少。

3、最不能忍的就是早期電路規模很小,所以對於地址空間的壓縮簡直令人髮指。那時候系統的地址文檔是把讀寫功能分開的,大部分地址的讀含義和寫含義是完全不同的,也就是說地址利用率幾乎是達到了極致,每個地址都被用上了,只讀寄存器所在的地址一定也可以寫,只是寫功能分配給了另外一個只寫寄存器。一般來說,那時候每個功能的讀寫特性也是高度壓縮的,如果一個功能只需要能寫入就可以生效,那麼它就一定是不可讀的,幾乎很少有同時可寫又可讀的功能,當時的軟體是沒辦法把一個值寫入一個寄存器地址後又讀出來確認是否正確的,因為如果每個寄存器都可以讀寫的話地址就不夠用啦!地址段的劃分也是粒度特別小的,分給某個模塊的地址空間基本都是能用完的。

4、在硬體描述語言出現之前,電路是用門搭的。所以很多歷史悠久的產品都曾經經歷過把電路翻譯成硬體描述語言的過程(甚至有的一開始入錯VHDL的坑,等到Verilog出現後又重新翻譯一次),當時的自動綜合工具還是新鮮事物,功能也比較弱,主要還是靠工程師對電路和時序的準確把握來確保代碼和綜合結果的一致性。但是因為這個時期的工程師對電路的理解還是更加透徹的,所以經常可以見到一些非常規的電路被使用奇怪的表達方式設計出來。

(最近比較忙,有空繼續更)


非常想不通的謎題……

工藝尺寸的縮小代表同樣面積集成了更多的晶體管,而每代晶元總尺寸也是增加的(花費的金錢也是逐代倍增),所以……

但是,為什麼IC工程師數量沒有同比增加?

最後,領導總是補刀,「你們這一代啊,是我見過效率最低的,想當年我一個人XXOO……」


我將從工藝、數字後端、數字前端、驗證、高層次綜合幾個方面進行比較。

大神摩爾鎮樓!

工藝

* 這十年集成電路的發展基本遵循了「摩爾定律」

當價格不變時,集成電路上可容納的元器件的數目,約每隔18-24個月便會增加一倍,性能也將提升一倍。

* 十年前我們還在討論,硅工藝的極限是40nm,還是28nm。
今天我們在討論,硅工藝的極限是不是5nm?

* 十年前我們還在討論,哪種MOS的結構才是未來。

今天FINFET晶體管,已經在16nm已下廣泛使用,我們在討論未來代替它的結構式是管狀晶體管,還是超淺溝道晶體管?

數字後端
* 十年前我們還不考慮晶元走線之間的SI (信號完整性)。
今天SI的影響,變成了影響線延時的主要因素之一。

* 十年前我們還在討論,如何使刻線的尺寸達到更小。

今天我們開發了 double pattern 技術, triple pattern技術,自對準技術,等等。工藝複雜度是之前的很多倍。

*十年前後端設計中,主要的延時還是來自於基本單元。
在今天,14nm,10nm的節點,線上的延時已經佔了總延時的30%以上。

*十年前晶元內部的可靠性檢查還不多。
在今天,ESD (Electro-Static discharge), EM(電子遷移) 等可靠性檢查,成為必須檢查的部分。

*十年前低功耗設計概念剛剛進入大家的視野。

在今天,low power design 已經成為各大公司的標配。在現在性能過剩的時代,大家都在比拼到底誰的功耗更低。

*十年前光刻當中的光衍射效應對於光刻沒有什麼影響。
在今天,光刻檢查(Lithography Friendly Design rules)已經成為了必要的檢查。

數字前端
*十年前,VHDL語言和VERILOG語言還能平分秋色。
現在VERILOG語言的普及率已經遠遠超過VHDL.

*十年前,電路性能只關注兩個指標:時鐘頻率和面積。
在現在,不提供電路功耗就是在耍流氓。

.*十年前,ARM匯流排搞定一切匯流排互連

在現在,異構多核架構的巨大需求使得NoC技術迅速推進並應用。

驗證
*十年前,前端工程師自己就可以手動用verilog驗證。
在現在,驗證工程師比前端工程師還多

高層次綜合

*十年前,硬體描述語言已經成為主流

在現在,高層次綜合已經在xilinx等幾個廠商的領導下,逐步推進

也許未來,Verilog也會跟手動畫圖的方式一樣被淘汰。

當然,以上不是主要內容。最最重要的是,十年後的今天,領導說:」我當年一個人就搞定一顆CPU晶元的60%工作,你們現在的年輕人真是矯情!「。

--------------------------給自己live做個廣告---------------------------

---我們正在進行中的live

從零學習 TCL 腳本 :https://www.zhihu.com/lives/802481845605400576

TCL 腳本:數字 IC 設計應用篇:https://www.zhihu.com/lives/802479838333128704

---我們的專欄

觀芯志:https://zhuanlan.zhihu.com/c_56408722

---往期live

半導體先進工藝的器件結構和挑戰 : https://www.zhihu.com/lives/789127697296019456

你不了解的微電子行業 : https://www.zhihu.com/lives/756215367029772288

初學者在數字 IC 設計學習中易進入的誤區 : https://www.zhihu.com/lives/748851153051066368


簡單來說其實就是隨著硬體軟體化趨勢很明顯。

很多本來需要EE出身的人才能做得了的事情( @Wang Kellen 講得很具體,就是一些電路上的Tricky,Latch的大量使用,摳門的地址線,手工搭門),現在都很容易做,比如隨便一個學過兩個月C的高中生小軟狗看一個禮拜的Verilog手冊和一個禮拜的OpenGL Spec就能在FPGA上做一個GPU了。甚至用SystemC(寫起來和C沒什麼區別)都能輕易做出一個大規模的晶元來。

所以總的來說和北大青鳥已經沒啥區別了。


我是2000年開始寫asic代碼的,用verilog,之前用原圖畫fpga,在清華實驗室,一開始就被告誡別用latch,別用非同步,verilog很好用,有原理圖的基礎就更好理解codeing style。那時候還喜歡用兩個觸發器取緣的電路,去華為移動面試也用了。看過97年前輩代碼,主要是非同步用的太多,時鐘樹不好優化。到了2010年,低功耗是個很重要的東西了,分區gate clock很流行了,後模擬也不流行了,形式驗證很多新東西了,設計驗證綜合越來越複雜,分工越來越細,soc規模越來越大,數字狗只有當螺絲釘了。


Fab的創新比較多,設計方法論上基本沒啥創新。

不僅是這10年,這20年前就基本定了。

不過,隨著10nm尺寸的逼近,或許有些新的設計方法。(動態邏輯、非同步電路等)


1,20年前的原始設計,往往直接就是網表,壓根就沒有RTL。在工藝遷移時,直接就是門級轉換。然後跑模擬確定時序,同時做ECO修正。

2,因為原始設計就是網表,所以會有很多讓人腦洞大開的底層實現。比如latch搭建控制寄存器,狀態機使用RS觸發器,關鍵電路雙沿工作,格雷碼計數器,手寫的clock gate,以及大量的行波時鐘。

3,20年的測試向量,是根據電路功能設計的,然後截取模擬波形製作pattern。那時的fault coverage可能70%就很不錯了。由於電路規模很小,實際的產品合格率還是相當高的。有些極端的台灣公司,甚至不作測試,直接按照110%的量出貨。

數字邏輯設計和20年前相比,最大最根本的變化,在於高級EDA工具的普遍運用,其中最最重要的是Scan。

為什麼這幾條後來運作不下去了呢?

1A,線延時所佔的比重越來越大,門翻譯在時序修正上浪費大量的時間。STA可以提高效率。

1B,由於流水線之間的不平衡,門翻譯造成大量的性能損失。RTL+Synthesis可以改善。

1C,網表上添加功能很難。RTL可以改善。

2A,Scan技術的採用,使得latch、RS-FF、雙沿時鐘被限制使用。

2B,FPGA驗證的需求,使得手寫的clock gate、行波時鐘被限制使用。

2C,晶元越來越便宜,省面積的奇技淫巧被徹底放棄。

3A,設計測試向量,需要大量的模擬時間;而且pattern的質量較差,還浪費測試機台的時間。Scan可以解決。

3B,晶元越來越大,人工pattern的coverage遠遠不夠。Scan可以解決。


變化很多,歸根結底,這些變化是為了應對設計規模增加、設計複雜度增加和工藝尺寸縮小所帶來的挑戰。設計流程和設計方法學都在跟著這些挑戰而變化,數字方面充分體現在EDA軟體的改善或者創新上。


推薦閱讀:

TAG:微電子 | 晶元集成電路 | 微電子工程 | SoC | 晶元設計 |