ALU是算術邏輯單元,是CPU中重要的一部分,由於CPU本質上就是不斷重複最簡單的計算。而咱們這一版CPU的ALU部分更爲簡單,是一個只能作加法的ALU。.net
理論部分設計
咱們須要一個能幫咱們進行數學計算的電路設計。一旦打通了這一關,能夠說你已經瞭解了計算機的所有,由於計算機所作的一切,就只有計算,更絕對一點說,計算的一切,也就只有加法。在這裏我作一個大膽的假設,正在閱讀這篇文章的你已經知道了二進制的含義,那如何給本身作一個8位二進制數的加法計算器呢?它大概應該是這個樣子。視頻
其實這不是一個新知識,我相信給你足夠的時間你必定會設計出來,你不妨在此暫停一段時間拿出一張紙試試。咱們先從最簡單的一位數相加開始,如何設計出一個一位數相加的計算器呢?咱們首先應該整理出這樣一張清晰的表,它列出了對每一種可能的輸入狀況所對應的輸出結果,即 0+0=00;0+1=01;1+0=01;1+1=10,這種表叫作真值表。這裏咱們直接將進位也考慮進來。blog
加數A | 加數B | 加和輸出S | 進位輸出C1 |
0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
有了真值表以後,咱們就能夠經過基本的邏輯運算來獲得一個邏輯表達式。運算過程以下:博客
其中,加號(+)表示「或」運算,而輸入項之間省略的乘號則表示「與」運算。咱們選出全部能使結果爲1的輸入項組合,再進行取反操做和與運算,再使每項之間經過或運算相連。對此有疑惑的同窗能夠本身模擬一遍上面的運算過程,大概就能知道爲何要這麼作了。數學
由運算結果咱們得知,和就是異或門,進位就是與門。畫出來就是下面這個樣子,因爲咱們只考慮了向後進位,而沒有考慮前一個數的進位,所以咱們稱這種裝置爲半加器。table
若是將前一個進位考慮進來,只需再多一個半加器就能夠了,至於爲何進位輸出的加和沒有用半加器而是用了一個或門,請暫停一分鐘思考一下。這回咱們已經創建好了一個完美的一位計算器,咱們即可以自豪地稱之爲全加器。二進制
全加器的邏輯實現咱們一樣能夠用上面提到的真值表來完成。下面是全加器的真值表。im
進位輸入C0 | 加數A | 加數B | 進位輸出C1 | 加和輸出S |
0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 1 |
0 | 1 | 0 | 0 | 1 |
0 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 0 | 1 |
1 | 0 | 1 | 1 | 0 |
1 | 1 | 0 | 1 | 0 |
1 | 1 | 1 | 1 | 1 |
對應的邏輯表達式以下:數據
一位計算器作出來以後,8位計算器就只需將全加器逐個拼起來便可,而且再次抽象總體,咱們稱之爲8位加法器。
OK,大功告成。我不知道你此時的感覺如何,不知不覺咱們連續進行了3次抽象(即把以前的器件封裝起來),有沒有深入體會到以前所說的你必須開始習慣這種抽象。每當一個複雜的構造被裝進一個黑盒子裏時,你便不再要考慮裏面的構造了,只要你作到了這一點,這三步的抽象便會是so easy。有了加法計算器,減法也就不是問題了,在本博客中將略去這部份內容,若是有興趣,能夠去了解一下計算機是如何用補碼錶示減法的,以後你會發現,減法就是加法。
實操部分
同8位的寄存器同樣,插在咱們麪包板上的ALU,一樣直接用一個集成電路實現,74LS283,如下爲針腳圖:
將兩個拼一塊兒則就是一個8位的加法器,同以前作的寄存器(兩個)接在一塊兒,輸出到總線端再接一個三態控制,就完成了整個電路。
這個加法器不像以前的寄存器,有控制是否存入數據的信號,它不管如何都直接將加和計算出並從輸出端輸出。咱們開啓clk,手動將寄存器A(紅色燈泡)和B(藍色燈泡)設置幾個數,就會看到ALU輸出加和結果(黃色的燈泡,擠死了。。。)
參考視頻:eater.net