1 前言
??本文是基于《編碼》、《穿越計算機的迷霧》兩部著作進行讀后整理的記錄性博客敛瓷。對書中較為重要的內(nèi)容進行歸納整理進行二次創(chuàng)作河哑,略去了繁瑣的講述細節(jié),力求簡明扼要风皿。
編碼:一種由若干符號和規(guī)則組成的系統(tǒng)河爹,用來向計算機表述指令。
2 正文
2.1 總線
??在前面介紹自動加法機時桐款,我們針對當時的電路設(shè)備說過咸这,為了簡化電路,針對電路中各個位置的指令控制電路進行了省略魔眨。本文中我們著重解決兩個問題:通過怎樣的方法才能把指令加載到 RAM 中炊苫?怎樣才能把程序的結(jié)果變得可見呢?
??在前面介紹 RAM 陣列時冰沙,我們了解到:RAM 是易失性存儲器——當?shù)綦姷臅r候其中的內(nèi)容就會丟失。所以执虹,長期存儲設(shè)備也是一臺計算機必不可少的部件拓挥,只有這樣,代碼和數(shù)據(jù)才能夠被永久保存袋励,不會因為掉電而丟失重要的數(shù)據(jù)侥啤。
??搭建一臺完整的計算機還需要很多集成電路,這些集成電路都必須掛載(mounted)到電路板上茬故。在一些小型的機器中盖灸,一塊電路板足以容納所有的集成電路,但這種情況并不常見磺芭。我們通常所看到的是另一種情況:計算機中各部件按照功能被分別安裝在兩個或更多的電路板上赁炎。這些電路板之間通過總線(bus)通信。如果對總線做一個簡單的概括钾腺,可以認為總線就是數(shù)字信號的集合徙垫,而這些信號被提供給計算機上的每塊電路板。通常把這些信號劃分為如下四類放棒。
- 地址信號姻报。這些信號是由微處理器產(chǎn)生,通常用來對 RAM 進行尋址操作间螟,當然也可以用來對連接到計算機的其他設(shè)備進行尋址操作吴旋。
- 數(shù)據(jù)輸出信號损肛。這些信號也是由微處理器產(chǎn)生的,用來把數(shù)據(jù)寫入到 RAM 或其他設(shè)備荣瑟。這里特別要注意區(qū)分術(shù)語輸入和輸出治拿,來自微處理器的數(shù)據(jù)輸出信號會變成 RAM 和其他設(shè)備的數(shù)據(jù)輸入信號。
- 數(shù)據(jù)輸入信號褂傀。這些信號是由計算機的其他部分提供的忍啤,并由微處理器讀取。通常情況下仙辟,數(shù)據(jù)輸入信號由 RAM 輸出同波,這就解釋了微處理器是怎樣從內(nèi)存中讀取內(nèi)容的。其實叠国,其他部件也可以給微處理器提供數(shù)據(jù)輸入信號未檩。
- 控制信號。這些信號是多種多樣的粟焊,通常與計算機內(nèi)所用的特定的微處理器相對應(yīng)冤狡。控制信號可以產(chǎn)生于微處理器项棠,也可以由與微處理器通信的其他設(shè)備產(chǎn)生悲雳。比如,當微處理器要把一些數(shù)據(jù)寫入到特定內(nèi)存單元時香追,它所使用的信號就是控制信號合瓢。
??計算機上的各種不同的部件是如何工作的呢?為了能更好地理解透典,讓我們再次回到 20 世紀 70 年代中期去看一看晴楔。想象一下,我們正在為 Altair 設(shè)計電路板峭咒,或者是在為自己設(shè)計的 8080 或 6800 計算機做這樣的事情税弃。我們不僅要考慮為計算機設(shè)計一些存儲器,用鍵盤作為輸入凑队,用電視機作為輸出则果;還要考慮關(guān)上計算機時,如何把存儲器中的內(nèi)容保存下來顽决。如何把這些部件添加到計算機中呢短条?下面就來看看能實現(xiàn)這個功能的各種接口(Interface)。
??現(xiàn)在回想一下前面所介紹的 RAM 陣列才菠,RAM 陣列有地址輸入茸时、數(shù)據(jù)輸入,以及數(shù)據(jù)輸出信號赋访,另外還有一個用來把數(shù)據(jù)寫入存儲器的控制信號可都。RAM 陣列能存放的數(shù)據(jù)的數(shù)量是和地址輸入信號的個數(shù)有關(guān)的缓待,它們之間有著 2 的冪次的關(guān)系。
??20 世紀 70 年代中期渠牲,2102 是用于家用計算機的一款流行的存儲器芯片旋炒。其管腳分布如下圖所示。
??這款芯片與 8080 和 6800 微處理器所采用的技術(shù)相同签杈。它的存儲容量可以達到 1024 位瘫镇,這個數(shù)值可以根據(jù)地址信號(A0~A9)、數(shù)據(jù)輸出(DO)和數(shù)據(jù)輸入(DI)信號(輸入和輸出復(fù)用一個信號線)的數(shù)目計算出來答姥。使用 2102 芯片型號不同铣除,訪問時間(read access time,指從芯片接收到地址信息到輸出有效數(shù)據(jù)所需的時間)也是各有差異鹦付,從 350 ns~1000 ns 不等尚粘。當需要從存儲器中讀取數(shù)據(jù)時,R/(讀/寫)信號置 1敲长;當向芯片中寫入數(shù)據(jù)的時候郎嫁,這個信號要置 0,而且至少要持續(xù) 170~550 ns 的時間祈噪,也是由所使用的 2102 芯片的型號決定的泽铛。
??這里我們不得不提到的一個信號就是 信號,也稱片選信號辑鲤。該信號置 1 時厚宰,芯片不被選中,意思就是說遂填,不會響應(yīng)
信號。
??如果想存儲整個字節(jié)澈蝙,則至少需要 8 個這樣的 2102 芯片吓坚。具體的做法就是,把 8 個芯片對應(yīng)的地址信號灯荧、R/ 及
信號連接起來礁击,如下圖所示。
??實際上逗载,這是一個 1024×8 位的 RAM 陣列哆窿,或者說是容量為 1 KB 的 RAM。
??把存儲器芯片安裝在一塊電路板上厉斟,這是很符合實際的做法挚躯。那么,到底一塊電路板上能安裝多少塊這樣的芯片呢擦秽?我們可以選擇將它們緊密排列在一起码荔,但一般我們不這么做漩勤,更合適的方法是用 32 個芯片組成一個 4 KB 的存儲器。這種為了存儲完整的字節(jié)缩搅,而連接在一起的芯片的集合越败,稱為存儲體(bank)。例如硼瓣,一個 4 KB大小的存儲器板就由 4 個存儲體組成究飞,而每個存儲體又包含 8 個芯片。
??8 位微處理器堂鲤,例如 8080亿傅、6800,有 16 位地址筑累,可用來尋址 64 KB 的存儲空間袱蜡。存儲器板上的 16 位地址信號就有如下所示的功能:
下面詳細解釋一下這 16 位地址信號。A0~A9 直接與 RAM 芯片相連接慢宗;A10 和 A11 用來選擇 4 個存儲體中要被尋址的那一個坪蚁;A12~A15 確定哪些地址申請用這塊存儲器板,換言之镜沽,就是這塊存儲器板響應(yīng)哪些地址敏晤。
??微處理器整個存儲空間的大小是 64 KB,被劃分成 16 個不同的區(qū)域缅茉,每個區(qū)域的大小是 4 KB婚瓜,我們設(shè)計的 4 KB 存儲器板占用了其中一個區(qū)域。這16個區(qū)域劃分情況如下:0000h~0FFFh扳抽、1000h~1FFFh佑淀、...、F000h~FFFFh拇颅。
??在一種稱為比較器(comparator)的電路中奏司,你可以把這個開關(guān)和總線上地址信號的高4位連接起來,就像下面這樣樟插。
??異或(XOR)門電路在兩個輸入端中只有一個是高電平時韵洋,輸出才為高電平;當兩個輸入端同時為低電平或高電平時黄锤,輸出是低電平搪缨。
??例如,如果把 A13 和 A15 對應(yīng)的開關(guān)閉合鸵熟,就意味著讓存儲器板能響應(yīng)存儲器空間 A000h~AFFFh副编。若總線上的地址信號 A12、A13流强、A14 和 A15與開關(guān)上設(shè)置的值相同的話齿桃,四個異或(XOR)門的輸出都是 0惑惶,或非(NOR)門的輸出為 1,如下圖所示短纵。
??接下來我們把 Equal 信號和一個 2-4 譯碼器聯(lián)合起來使用带污,就能為四個存儲體中的每一個都產(chǎn)生一個 信號,便于對存儲體進行選擇香到。具體連接圖如下圖所示鱼冀。
??例如,若想選擇第三個存儲體悠就,把 A10千绪、A11 分別置 0 和 1 就可以了。
[了解] 存儲器
在將存儲體構(gòu)成存儲器時梗脾,可以選擇將存儲體按照矩陣的形式進行排列:
矩陣式排列
要啟用某個存儲體荸型,就可以選擇啟用存儲體所在位置的行線和列線:
單個存儲器
這里的行線和列線對應(yīng)著存儲體的讀寫操作,我們可以利用行線和列線對存儲體進行讀寫炸茧。而針對每個線的操作需要用到一種叫做多路復(fù)用器的設(shè)備瑞妇。
多路復(fù)用
根據(jù)上面的介紹,我們來看一下生活中的存儲設(shè)備:
主板上的內(nèi)存條
單個內(nèi)存條
放大后的內(nèi)存條上的芯片
進一步放大
再放大
3 小結(jié)
??總線篇簡單介紹了處理器如何處理各種接入的設(shè)備梭冠,介紹了系統(tǒng)總線辕狰。文章內(nèi)容僅作了解即可,具體內(nèi)容可以參考《計算機組成原理》控漠,文章對此沒有展開講述蔓倍。為了精簡內(nèi)容刪減了部分較為詳細的書寫,僅作為整理總結(jié)盐捷。