總線模型
如果把CPU看作“帝都”,存儲器看作是“衛(wèi)城”,它們之間要互通往來,就必然要修建道路,而這條道路又可以不斷延伸分支,將很多城市串連起來。這樣,城市兩兩之間便均可通行。這條“道路”就是總線!如圖1.11所示。(這些被串連起來的“城市”就猶如振南后面要講到的“CPU外設”)。
圖1.11 總線的結(jié)構模型
好,現(xiàn)在CPU與存儲器之間的這條通路有了。此時,CPU如果要讀取存儲器中地址為addr位置上的一個字節(jié),該如何作呢?這個過程主要分三步:(是不是想起了“把大象裝冰箱總共分幾步?”)
CPU首先告訴存儲器要讀取的地址;
等待存儲器將相應地址上的數(shù)據(jù)取出來;
CPU將數(shù)據(jù)取走。
更為形象地說明如圖1.12所示。
圖1.12 CPU訪問存儲器的主要過程
仔細想一下,這個過程的實現(xiàn)其實涉及幾個問題:CPU如何將地址給存儲器?CPU如何知道存儲器已將數(shù)據(jù)準備好?CPU又如何將數(shù)據(jù)取走?……總結(jié)起來,主要是地址和數(shù)據(jù)的傳輸,以及它們之間的協(xié)調(diào)與控制。為了解決這一問題,我們提出了這一模型,請看圖1.13。
圖1.13 CPU與存儲器之間的總線模型(讀數(shù)據(jù))
圖中所看到的連線就是實實在在的用于傳輸二進制信號(0或1)的導線。CPU首先將地址輸出到地址總線上(很顯然地址線的數(shù)量決定了CPU可以尋址的空間范圍),然后再將RD信號置為0(RD平時為1),告訴存儲器地址已經(jīng)給出,請準備好數(shù)據(jù)并將其輸出到數(shù)據(jù)總線上(數(shù)據(jù)線的數(shù)量決定了CPU的數(shù)據(jù)吞吐量,這也是衡量CPU位數(shù)的標準,51單片機是8位單片機,則它每次只能讀到一個字節(jié)的數(shù)據(jù),ARM是32位的,所以它可以一次性讀取一個字)。CPU對數(shù)據(jù)總線進行讀取,再將RD信號置1,整個過程便完成了。
那CPU如何向存儲器寫入數(shù)據(jù)呢?其實道理是一樣的,如圖1.14所示。
圖1.14 CPU與存儲器之間的總線模型(寫數(shù)據(jù))
仍然是由CPU先給出地址,再向數(shù)據(jù)總線給出要寫入的數(shù)據(jù),然后將WR信號置0,告訴存儲器地址與數(shù)據(jù)已經(jīng)就緒,請予以處理。最后將WR信號置1即可。
綜上所述,CPU中有三大總線:地址總線、數(shù)據(jù)總線與控制總線。這一模型最終如圖1.15所示。
圖1.15 CPU與存儲器之間的總線模型
如果我們把CPU訪存過程中,各總線信號上的電平隨時間變化的示意圖畫出來的話,它將是這樣的,如圖1.16所示。
圖1.16 CPU總線操作的時序圖
上圖就是CPU總線操作的時序圖(Timing Digram)。它是描述接口時序與信號協(xié)議最為直觀的形式??炊畷r序圖是我們學習電子和單片機技術,使用C語言正確編寫底層驅(qū)動程序的根本基礎。