[ARM微控制器與嵌入式系統] 從晶體管到CPU

從晶體管到CPU

利用電壓副值來代表0和1

利用高電壓代表邏輯1,低電壓代表邏輯0,中間空出一定的區域,既不爲邏輯1,也不爲邏輯0,避免電壓在邊界附近時出現邏輯判斷的錯誤。

高平的定義標準

在嵌入式系統中,最常接觸到的電平標準是TTL電平CMOS電平
如果有了電壓的高和低,如何將其轉換成邏輯的0和1?
例子:
在這裏插入圖片描述
上圖中的繼電器,電流通過吸合,右側電路導通。
在這裏插入圖片描述
上圖是兩個電磁繼電器構成的電路,我們假設output端連接了一個燈,有高電壓燈就亮了,沒有高電壓燈就滅了,即用燈亮爲邏輯1,燈滅爲邏輯0。
上圖的電路,如果inputA和inputB都爲高電壓,則燈亮,輸出邏輯1,其他情況輸出邏輯0。

上圖實際上就是一個與門電路

再舉一個或門電路,如下圖:
在這裏插入圖片描述

CMOS電平

VDD = 3~8V
0 = 0~0.3VDD
1 = 0.7~1VDD

TTL電平

VCC = 5V ± 5%
0 = 0~0.7V
1 = 2.4~5V

在這裏插入圖片描述
非門:
在這裏插入圖片描述
與非門:
在這裏插入圖片描述

與門: 可以由與非門串一個非門組成

或非門
在這裏插入圖片描述

三態門
在這裏插入圖片描述

進一步

異或門:
在這裏插入圖片描述

加法的實現:(半加器
在這裏插入圖片描述
爲什麼是半加器?
因爲沒有考慮進位

思考:如果將兩個半加器放到一起,然後對高位(即與門的輸出)取或。
在這裏插入圖片描述
在這裏插入圖片描述
這樣輸出就成了X、Y、Z相加的結果(高位是C,低位是S)。

抽象一下:

在這裏插入圖片描述
這就是一個全加器

在這裏插入圖片描述
C是進上去的,所以作爲下一步中的Z參與計算,計算得到的S爲該位的輸出,C進到高位,這樣就構成了一個4個bit的二進制加法器,同時,C4的輸出還可以作爲檢驗加法的結果是否溢出。如果C4==1,就說明溢出了

上面是加法的電路,減法如何實現?
C語言中,負數表示爲二進制的補碼,因此,兩個數做減法實際上是加上其二進制的補碼

地址譯碼
在這裏插入圖片描述
只有當輸入A0、A1、A2、A3分別爲1,0,0,1時,輸出S才能等於1,

有什麼用?
利用S的結果進行信號的選擇,控制等。

具體怎麼實現?

如上圖,如果我們要得到地址爲0x1001地址對應的數據,則可以在上圖的輸出S後面接一個三態門,用S作爲控制量,即可實現該地址對應的數據讀取。

2-4譯碼器

在這裏插入圖片描述

利用A、B兩路的數據,得到4路不同的輸出,如果後面接三態門的話,就可以兩個輸入對4路的數據訪問與控制。

學51單片機時,涉及到流水燈效果時,用到了38譯碼器,原理應該是一樣的

組合邏輯是依賴於輸入,有輸入的情況下就會有輸出

時序邏輯電路

時序邏輯電路的輸出不僅取決於輸入,還取決於上一個狀態的輸出值。

舉個例子:

D鎖存器

在這裏插入圖片描述
分析一下上圖:
當輸入C爲0的時候,後面的兩個與門輸出肯定是0,D的輸入值根本不起作用。

當輸入C爲1的時候,先假定q是一個值,進行分析,最終得到上圖中的真值表

鎖存器是基本的時序電路之一,也是最簡單的存儲單元,可以用來存儲數據。

在這裏插入圖片描述

在這裏插入圖片描述

概念CPU

在這裏插入圖片描述

假設概念上有一個上述的CPU
**兩個4bit的二進制數,<數據線> **
**4個1bit的控制線S0、S1、S2、S3 **

圖中的4個運算單元可以執行多種運算,具體採用哪種運算,可以通過S0、S1進行指定,具體的實現可以通過三態門做控制,然後接各種運算。

上面的學習已經實現了:
兩個4bit的二進制數做加減法 <全加器>
兩個4bit的二進制數與、或
兩個4bit的二進制數左移、右移 <D觸發器級聯>

多路開關
通過S2、S3的編碼來指定輸出哪一個單元的運算結果, 具體的實現是通過上面提到的2-4譯碼器,把4個結果中的某一個送出去。
在這裏插入圖片描述

指令集

如果我們把上面的電路與其功能變成一個真值表,如下:
在這裏插入圖片描述
可以看出,一旦電路設計完成,其運算部分就確定了,其功能由S3、S2、S1、S0的排列組合決定。
S0和S1是確定執行什麼樣的運算,S2、S3是挑出來正確的結果做輸出。

這就是一個概念上的4bit位的CPU原型。

彙編語言中,用SUB代表0 0 1 0等

程序的本質就是指令的有序集合

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章