關注國產芯片事業的你,一定有很多困惑,能讓大國科技舉步維艱的技術,到底是有多難?
其實,芯片這個東西,說難是真難,就拿5nm光刻機來說,10多萬個零部件組成,一個一個數一遍,可能大部分我們現在都不能生產。
可是,芯片說簡單也簡單,從原理上來說,只要你有一定的知識基礎,都能搞清楚。在這一點上還確實是“科技無國界”。至少到現在,相關的書籍、論文等知識都是能夠公開獲取到的,差的主要就是產業經驗和技術實力。
今天,我就和大家一起看看芯片到底有多簡單,本文的目標是科普一些基本數學知識,然后設計一個最簡單的芯片!
芯片的基礎
芯片,作為最重要的半導體產品,實現了特定功能。比如電腦CPU實現了計算、顯示、讀寫內存硬盤數據、接受鼠標鍵盤輸入等等豐富的功能。
那大家有沒有想過,芯片的基礎是什么?
可能有人馬上會想到硅,硅作為半導體材料是芯片的基礎。可是喝水的玻璃杯也有硅呀,它就不值錢,所以硅不是根本基礎。芯片為什么要用硅?是因為要在硅上面制造集成電路!硅的特點是能在很小的面積上集成大量的電路器件。
這么說芯片的基礎是電路?電路有很多種,家里的燈泡和開關也組成一個電路,這和芯片沒啥關系。芯片用到的是邏輯電路。
再試一次,芯片的基礎是邏輯電路?呃,已經很接近了,但是還不是,邏輯電路是做邏輯運算的,邏輯運算也叫布爾代數運算。
所以,芯片的根本基礎是數學!更具體的說是布爾代數!
這個結論一點兒也不奇怪,大家都知道物理學的基礎是數學,就連偉大的物理學家牛頓都和阿基米德、高斯一起并稱世界三大數學家。
布爾代數
了解最基本的布爾代數,你就會知道機器是怎么運算,也就明白了芯片要怎樣設計。
接下來我就介紹一下二進制和布爾代數,下面的內容爭取讓小朋友都能明白。
為什么能讓小朋友都明白呢?因為數學家布爾本人,就沒上過大學,靠自學成才,并在19歲開辦了一所小學,經營了10多年。他認為自己最主要的職業是教師,他的愿望是幫孩子們找到理解和掌握復雜規律的方法。
布爾代數的起源,是希望用數學表達人的邏輯思維。
其中和計算機相關的是幾個重要的布爾運算:
1、與 運算
舉個例子:我喜歡吃烤羊肉串
我們讓A代表燒烤,B代表羊肉串。
則上面的表達變為了:
A和B都是真,做運算的結果才是真。比如,烤牛肉串,就是A=1,B=0,AandB=0。所以我不喜歡烤牛肉串。
2、或 運算
舉個例子:我喜歡吃燒烤或是火鍋。
我們讓A代表燒烤,B代表火鍋。
則上面的表達變成了:
不管是燒烤還是火鍋,只要有一個我就吃,當然兩樣都來更好!
3、非 運算
舉個例子:我不喜歡吃辣。
我們讓A代表辣。
則上面的表達變成了:
4、異或 運算
舉個例子:我最喜歡吃燒烤和冰激凌,但是一起吃會拉肚子。
我們讓A代表燒烤,B代表冰激凌。
則上面的表達變成了:
理解這個運算可能有點兒難,啥意思呢?就是A和B不能一樣,沒有燒烤沒有冰激凌肯定不行,可是一起來也承受不了!
除了上面4種布爾運算,還有與非、或非、異或非運算。從異或運算可以看出,全部的運算都可以由與、或、非運算結合產生。
二進制運算
咱們接著講二進制運算。
二進制就是用0、1表示一切數字,每一位上只能是0和1,到了2就要進位。
比如,十進制的2,用二進制表示就得進位了,變成兩位數10,而十進制3就是11。
二進制是德國數學家萊布尼茨在300多年前發明的,那個時候連計算機的影子還沒有,到底萊布尼茨為啥要發明一個當時根本沒用的二進制,說實話沒人能搞清楚。
說起二進制,不得不說一下我國的八卦,不是到處亂講的那種娛樂圈八卦,而是真正的八卦。
八卦講究的是兩儀生四象,四象生八卦:
看到沒有,很多人認為八卦就是二進制的先驅。兩儀是陰陽,也就是0和1,四象是二進制兩位數,八卦是二進制三位數,而伏羲64卦就是二進制的六位數:
貌似道理還真是一樣,咱們的老祖先當時基于什么發明的八卦,說實話這也搞不清楚。
可有人卻翻出了當時萊布尼茨和一位在北京生活的傳教士的信,來試圖證明萊布尼茨發明二進制是受了中國八卦的啟發,而且很多人都信了這個說法。
實際的過程是這樣的:當時萊布尼茨給這位傳教士寫信,希望他向康熙皇帝介紹二進制,這個傳教士一看,這不就是中國的八卦么,給萊布尼茨回信說了八卦的情況。然后萊布尼茨寫了一篇文章論述二進制在中國的實際應用。
萊布尼茨到底受沒受八卦啟發,都是猜測,就算萊布尼茨受了八卦的啟發,那又怎樣?在萊布尼茨發明二進制的時候,我們的康熙大帝正在打吳三桂呢,我們的現代文明還沒有開化。
所以,關于八卦和二進制的事,我們就當它是八卦好了,咱們接著說二進制計算。
假設有兩個一位的二進制數要相加,那么會有四種可能:
前三種情況不需要進位,后一種情況和S是一個兩位二進制數,所以需要進位,我們單獨設置一個進位標識C。
大家發現沒有,二進制的加法和上面介紹的布爾運算是一樣的:
- 加法的和就是兩個加數的異或運算
- 加法的進位標識就是兩個加數的與運算
我們用布爾運算符做個邏輯圖,就是這樣的:
上面就是一個用布爾運算符表示的半加器,可以進一步表示如下:
為什么叫半加器呢?這是因為計算A+B的時候,沒有考慮上一位有沒有進位的情況,所以這個半加器只能計算二進制數最末一位上的加法。
如果A和B不是末位上的數,那就要考慮前一位的計算結果有沒有進位(Cin是上一位的進位標識,Cout是當前位計算完向上一位的進位情況),會有8種情況:
這個過程可以通過2個半加器和一個或運算來實現:
這就是全加器:
看,我們只用布爾代數的四個運算符,就實現了一位二進制數的加法。
其實,我們只用了三個運算符,因為異或運算可以畫成與、或、非運算的組合,當然這樣太麻煩。
全加器也是一樣,如果我們不怕麻煩,可以細致的畫成異或、與、或運算的組合。
八位二進制加法器
大家看吧,關于計算機的數學也不難。
接下來最神奇的要來了,我們要用剛剛學到的布爾代數知識,設計一個最簡單的芯片。
這是一個能夠進行八位二進制數加法的加法器。
這還是有一些挑戰的,這個加法器,如果做出來也算是一個最簡單的芯片,真的是芯片哦!
這個加法器的輸入是2個八位二進制數:
一個用A表示,八位分別是A[0],......,A[7];
另一個用B表示,八位分別是B[0],......,B[7];
還有一個輸入是進位標識Cin,如果這個加法器單獨使用時,這個輸入始終置0。
輸出是S,八位分別是S[0],......,S[7];
輸出進位標識是Cout。
下面請大家看看,這個加法器到底是什么樣子:
這就是一個用8個全加器構成的八位二進制加法器,神奇不神奇?
我們沒有添加任何其他的東西,就是剛剛學過的全加器,如果大家有興趣,可以把每個全加器用2個半加器和一個或運算符展開。
進一步可以再把每個半加器用異或運算符和與運算符展開,不知道哪位讀者有興趣,反正用手畫,我是會崩潰的。
而這一切,在芯片設計的時候,都是由EDA軟件來完成。
后續工作
到此,我們已經在邏輯上設計了一個功能最簡單的八位二進制加法芯片。
為什么要說是邏輯上呢?因為到目前為止,我們還沒有用到任何電路知識。所涉及的全部是布爾代數知識,所以這個芯片是邏輯上可行,但是還無法制造。
那怎么做出實際能用的芯片呢?
首先我們需要有和上面布爾運算符對應的電子元件,實現同樣的功能。然后按照設計把這些元件連接起來。這樣就有了實際的電路,這種電路就叫門電路。實現了上面布爾運算的元件就叫門元件。
最終,我們要在硅片上面制作出這種門元件,這樣就在硅片上面實現了門電路,也就是集成電路。
最后,再把這個集成電路切割下來,把輸入輸出引腳做好,然后封裝,一個完整的芯片就產生了!
所有這些后續的工作,我都會在接下來的文章一點兒一點兒和大家一起學習!
如果您對我的文章感興趣,歡迎關注我!
謝謝!