【從零開始自制CPU之學習篇07】最簡單的ALU—全加器


  ALU是算術邏輯單元,是CPU中重要的一部分,因為CPU本質上就是不斷重復最簡單的計算。而我們這一版CPU的ALU部分更為簡單,是一個只能做加法的ALU。

 

理論部分

  我們需要一個能幫我們進行數學計算的電路設計。一旦打通了這一關,可以說你已經了解了計算機的全部,因為計算機所做的一切,就只有計算,更絕對一點說,計算的一切,也就只有加法。在這里我做一個大膽的假設,正在閱讀這篇文章的你已經知道了二進制的含義,那如何給自己做一個8位二進制數的加法計算器呢?它大概應該是這個樣子。

  其實這不是一個新知識,我相信給你足夠的時間你一定會設計出來,你不妨在此暫停一段時間拿出一張紙試試。我們先從最簡單的一位數相加開始,如何設計出一個一位數相加的計算器呢?我們首先應該整理出這樣一張清晰的表,它列出了對每一種可能的輸入情況所對應的輸出結果,即 0+0=00;0+1=01;1+0=01;1+1=10,這種表叫做真值表。這里我們直接將進位也考慮進來。

加數A 加數B 加和輸出S 進位輸出C1
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1

  有了真值表之后,我們就可以通過基本的邏輯運算來得到一個邏輯表達式。運算過程如下:

  其中,加號(+)表示“或”運算,而輸入項之間省略的乘號則表示“與”運算。我們選出所有能使結果為1的輸入項組合,再進行取反操作和與運算,再使每項之間通過或運算相連。對此有疑惑的同學可以自己模擬一遍上面的運算過程,大概就能知道為什么要這么做了。

  運算結果我們得知,就是異或門進位就是與門。畫出來就是下面這個樣子,由於我們只考慮了向后進位,而沒有考慮前一個數的進位,因此我們稱這種裝置為半加器

 

  如果將前一個進位考慮進來,只需再多一個半加器就可以了,至於為什么進位輸出的加和沒有用半加器而是用了一個或門,請暫停一分鍾思考一下。這回我們已經建立好了一個完美的一位計算器,我們便可以自豪地稱之為全加器

  全加器的邏輯實現我們同樣可以用上面提到的真值表來完成。下面是全加器的真值表。

進位輸入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,以下為針腳圖:

    

  • A1-A4:加數A
  • B1-B4:加數B
  • C0:進位輸入
  • S1-S4:加和輸出
  • C4:進位輸出

  將兩個拼一起則就是一個8位的加法器,同之前做的寄存器(兩個)接在一起,輸出到總線端再接一個三態控制,就完成了整個電路。

  這個加法器不像之前的寄存器,有控制是否存入數據的信號,它無論如何都直接將加和計算出並從輸出端輸出。我們開啟clk,手動將寄存器A(紅色燈泡)和B(藍色燈泡)設置幾個數,就會看到ALU輸出加和結果(黃色的燈泡,擠死了。。。)

     

 

參考視頻:eater.net


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM