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

  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,如下爲針腳圖:

    

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

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

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

     

 

參考視頻:eater.net

相關文章
相關標籤/搜索