有了8位寄存器,有了解碼器,我們現在就可以去搞一個內存啦。不過,我們現在胃口大了,不能再搞1個8位寄存器了,我們想搞個256個8位寄存器,也就是2^8 byte。
根據前面的分析,我們知道,需要8位地址線來實現2^8個狀態。前面我們已經看到,解碼器已經有點小複雜了,現在搞一個解碼器,輸出有256根線,想想就害怕,還是算了吧,必須要想別的轍。
一個很簡單想法就是拆分,把8位地址線拆成兩個4位地址線,這樣只需要兩個解碼器即可,這個複雜程度就可以接受了,如下圖所示,主要包括三個部分:兩個解碼器,一個8位寄存器,寄存器的輸出分成兩路,分別作為解碼器的輸入。
兩個解碼器的組合,就可以得到一個矩陣,矩陣大小為16x16,這樣矩陣中的每一個點代表一個8位寄存器,每個點都可以通過縱、橫兩個坐標來唯一的表示,其中橫坐標由寄存器前四位確定,縱坐標由寄存器的後四位確定,示意圖如下:
這樣每個8位寄存器的坐標都可以確定了。當然,光有坐標還不夠,我們還需要對每個寄存器進行「寫」和「讀」的操作,因此,每個寄存器還要加入這兩個輸入端,具體怎麼實現先不管,大致樣子如下:
當然,能夠控制「讀」和「寫」的操作外,還需要讀寫的數據,這個也不難實現,把每個寄存器都連到「總線」上。
好了,我們有了大概的內存的樣子,我們需要來考慮細節了:每個寄存器是怎麼和地址線、「讀」「寫」使能線以及總線連接在一起的?
我們把上圖中紅色圈內的一個寄存器打開,看看裡面是如何實現的:
如果只聚焦每個byte的連接方式:
裡面包含三個與門,我們來分別解讀一下每個與門代表的意思:
第一個與門:vertical grid line和horizontal grid line就是前面所說的縱坐標和橫坐標,通過與門的形式輸出,代表的意思就是縱坐標和橫坐標都是高電平時,該寄存器才被選中,才能進行下一步的操作;
第二個與門:第一個輸入是與門輸出,也就是代表該寄存器是否被選中,第二個輸入時s「寫」信號,兩個輸入「與」之後連接到該寄存器,表示該寄存器被選中,並可以對該寄存器進行「寫」操作;
第三個與門:第一個輸入第一個與門輸出,第二個輸入時e「讀」信號,兩個輸入「與」之後連接到該寄存器,表示該寄存器被選中,並可以對該寄存器進行「讀」操作;
同時,該寄存器通過總線與其他設備交換數據。
把每一個寄存器都按照此方式連接,就可以得到一個256 byte的內存。抽象如下:
可以採用總線的形式進行抽象:
我們把這種內存稱之為Random Access Memory,簡稱RAM,也就是隨機訪問存儲器。為什麼是隨機訪問呢?——因為地址可以是隨機的,內存中的任何寄存器都可以以任何順序進行訪問,不存在先後依存關係。
#總線# #電子線路# #硬體工程師# #量子計算機作業系統#