5、論存儲器組織
先前我們學習了鎖存器,8位鎖存器圖如下:
簡化圖如下:
假如現在我們只有一個燈泡,我們想用一個輸入和一個輸出來存儲這8位輸入、輸出8位。
我們就需要增加3個開關,因為3個二進制可以表達8個數,正好對應了我們的8位。
要實現的效果圖如下:
在標註這是什麽裝置?的裝置中,其實是一個“8-1選擇器”,其簡化圖如下:
我們所要達到的真值表的目的是:
輸入 | 輸出 | ||
S2 | S1 | S0 | Q |
0 | 0 | 0 | D0 |
0 | 0 | 1 | D1 |
0 | 1 | 0 | D2 |
0 | 1 | 1 | D3 |
1 | 0 | 0 | D4 |
1 | 0 | 1 | D5 |
1 | 1 | 0 | D6 |
1 | 1 | 1 | D7 |
8-1選擇器主要有:三個反向器、八個4端口輸入與門、一個8端口輸入或門,系統的組織結構如下圖:
可以分別把S0 S1 S2對應一個值帶進去看看工作原理是什麽。下面是電路結構圖:
現在我們已經走完一半了,就差輸入端了。
其實解決問題的思路有很大的相似,無非是我們想利用開關和數據輸入來控制寫入端,哪個是可寫的。
而圖中的這款器件,我們叫做3-8譯碼器。
3-8譯碼器輸出的端口共有8個,在任何時刻,譯碼器只會有一個鎖存器的輸出位1,其余均為0.每一個輸出端的結果都是由S0、S1、S2這三個信號的排列組合決定的。而數據的輸出和輸入一致,如下圖所示:
譯碼器邏輯表如下:
輸入 | 輸出 | |||||||||
S2 | S1 | S0 | O7 | O6 | O5 | O4 | O3 | O2 | O1 | O0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | Data |
0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | Data | 0 |
0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | Data | 0 | 0 |
0 | 1 | 1 | 0 | 0 | 0 | 0 | Data | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 0 | 0 | Data | 0 | 0 | 0 | 0 |
1 | 0 | 1 | 0 | 0 | Data | 0 | 0 | 0 | 0 | 0 |
1 | 1 | 0 | 0 | Data | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 1 | 1 | Data | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
將8個鎖存器加入到電路就形成了完整的系統:
譯碼器和選擇器具有相同的選擇信號,上圖中,這三個信號一起被稱為地址端口。
這種配置下的鎖存器在有的資料中也被稱為讀/寫存儲器(read/write memory),但更普遍的叫法是隨機訪問存儲器(Random Access Memory),或RAM。可以認為我們討論的這種存儲器是可存儲8個獨立比特的RAM,它的簡化結構圖如下:
之所以被稱為隨機訪問存儲器,是因為讀寫操作很自由,我們只需要改變地址及相關的輸入,就可以從8個鎖存器中讀出或寫入需要的數據。相比於其他的順序型存儲器,這種存儲器在使用時有一定的限制,如果想要讀取地址為101的數據,必須先把地址為100的數據讀取出來。
將RAM進行特殊的配置可形成RAM陣列(Array),我們所討論的這種RAM陣列以8X1的方式組織起來的。陣列以1比特作為存儲單位,共存儲8個單位的數據。所以這個RAM陣列中能存儲的位數等於8與1的乘積。
RAM陣列組合形式多種多樣。比如我們可以通過共享地址的方式可以把兩個8X1的RAM陣列連接起來,如下圖:
我們把這兩個8X1的RAM陣列的地址和輸出分別都看成一個整體,這樣就得到了一個8X2的RAM的RAM陣列,如下圖:
這個RAM陣列可存儲的二進制數依然是8個,但是每個數位寬為2位。
我們還可以把兩個8X1的RAM陣列看做是兩個鎖存器,使用一個2-1選擇器和一個1-2譯碼器就可以把它們按照單個鎖存器連接方式進行集成,電路圖如下:
“選擇”端之所以連接到譯碼器和選擇器,主要作用是在兩個8X1 RAM陣列中選擇一個,本質上它扮演了第4根地址線的角色。因此這種結構實質上是一種16X1的RAM陣列,如下圖:
上圖中的RAM陣列存儲容量為16個單位,每個單位占1位。
RAM陣列的存儲容量與其地址輸入端的數量有直接的聯系。在沒有地址輸入端的情況下(只有1位鎖存器和8位鎖存器的情況下),只能存儲1個單位的數據;當存在1個地址輸入端時,可以存儲兩個單位的數據;在有兩個地址輸入端時,可以存儲4個單位的數據;有3個地址輸入端時,可以存儲8個單位的數據;有4個地址輸入端時,可以存儲16個單位的數據。我們可以把它們之間的關系歸納成如下等式:
RAM陣列的存儲容量=2地址輸入端個數
那為何不搭建一個大規模的RAm陣列呢?就像下面這樣:
上面的RAM陣列可存儲8192個比特的信息,每8個比特為一組,共分為1024個組。因為2的10次方恰好時1024,所以地址端口共有10個輸入端口。電路還包括8位的數據輸入端和8位數據輸出端。(1KB=1024B)
而更多的時候,我們用到的地址數如下:
因為16正好可以用兩個字節進行尋址(64K)
5、論存儲器組織