當前位置:首頁 » 服務存儲 » cpu與存儲器必須要有解碼器嗎
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

cpu與存儲器必須要有解碼器嗎

發布時間: 2022-08-24 09:33:42

A. 在對存儲器晶元進行片選時,全解碼方式、部分解碼方式和線選方式各有何特點

若cpu的定址空間等於存儲器晶元的定址空間,可直接將高低位地址線相連即可,這種方式下,可用單條讀寫指令直接定址,定址地址與指令中的地址完全吻合。
若cpu的定址空間大於存儲器晶元的定址空間,可直接將高低位地址線相連即可,cpu剩餘部分高位地址線,這種方式下,可用單條讀寫指令直接定址,未連接的地址線在指令中可以以0或1出現,即有多個地址對應每個存儲器空間,可在指令中將這些位默認為零。
若cpu的定址空間小於存儲器晶元的定址空間,可將其它io口連接剩餘存儲器高位地址線,定址前,需設置好這些io口。
當存在多片存儲器,且希望節省cpu的io口時,需要外加解碼電路。比如說,存儲器地址線為13根,共8片存儲器,可用74ls138連接cpu的高3位地址線,74ls38的8位輸出分別連接8片存儲器,讀寫時,定址地址與指令中的地址完全吻合。
上一種情況中,若希望簡化外圍電路,也可用其餘埠的8個io分別連接8片存儲的片選,其定址方式與第三種情況類似。

B. 關於CPU的一些知識

CPU又叫中央處理器,是英文單詞Central Processing Unit的縮寫,負責對信息和數據進行運算和處理,並實現本身運行過程的自動化。在早期的計算機當中,CPU被分成了運算器和控 制器兩個部分,後來由於電路集成度的提高,在微處理器問世時,就將它們都集成在一個晶元中了。需要智能控制、大量信息處理的地方就會 用到CPU。
CPU有通用CPU和嵌入式CPU,通用和嵌入式的分別,主要是根據應用模式的不同而劃分的。通用CPU晶元的功能一般比較強,能運 行復雜的操作系統和大型應用軟體。嵌入式CPU在功能和性能上有很大的變化范圍。隨著集成度的提高,在嵌入式應用中,人們傾向於把CPU、 存儲器和一些外圍電路集成到一個晶元上,構成所謂的系統晶元(簡稱為SOC),而把SOC上的那個CPU成為CPU芯核。

現在,指令系統的優化設計有兩個截然相反的方向。一個是增強指令的功能,設置一些功能復雜的指令,把一些原來有軟體實現的常用功能 改用硬體的指令系統來實現,這種計算機成為復雜指令系統計算機。早期Intel的X86指令體系就是一種CISC指令結構。
RISC是Reced Instruction Set Computer的縮寫中文翻譯成精簡指令系統計算機,是八十年代發展起來的,盡量簡化指令功能,只保留那些功能簡單,能在 一個節拍內執行完成的指令,較復雜的功能用一段子程序來實現,這種計算機系統成為精簡指令系統計算機。目前採用RISC體系結構的處理器 的晶元廠商有SUN、SGI、IBM的Power PC系列、DEC公司的Alpha系列、Motorola公司的龍珠和Power PC等等。

介紹一下 MIPS體系。
MIPS是世界上很流行的一種RISC處理器。MIPS的意思是"無內部互鎖流水級的微處理器"(Microprocessor without interlocked piped stages),其機制是盡量利用軟體辦法避免流水線中的數據相關問題。他最早是在80年代初期由斯坦福(Stanford)大學 Hennessy教授領導的研究小組研製出來的。MIPS公司的R系列就是在此基礎上開發的RISC工業產品的微處理器。這些系列產品以為很多打計算機 公司採用構成各種工作站和計算機系統。

指令系統
要講CPU,就必須先講一下指令系統。 指令系統指的是一個CPU所能夠處理的全部指
令的集合,是一個CPU的根本屬性。比如我們現在所用的CPU都是採用x86指令集的,他們都是 同一類型的CPU,不管是PIII、Athlon或Joshua。我們也知道,世界上還有比PIII和Athlon快得多的CPU,比如Alpha,但它們不是用x86指令集 ,不能使用數量龐大的基於x86指令集的程序,如Windows98。之所以說指令系統是一個CPU的根本屬性,是因為指令系統決定了一個CPU能夠運 行什麼樣的程序。
所有採用高級語言編出的程序,都需要翻譯(編譯或解釋)成為機器語言後才能運行,這些機器語言中 所包含的就是一條條的指令。

1、 指令的格式
一條指令一般包括兩個部分:操作碼和地址碼。操 作碼其實就是指令序列號,用來告訴CPU需要執行的是那一條指令。地址碼則復雜一些,主要包括源操作數地址、目的地址和下一條指令的地址 。在某些指令中,地址碼可以部分或全部省略,比如一條空指令就只有操作碼而沒有地址碼。
舉個例子吧,某個指令系統 的指令長度為32位,操作碼長度為8位,地址長度也為8位,且第一條指令是加,第二條指令是減。當它收到一個 「」的指令時,先取出它的前8位操作碼,即00000010,分析得出這是一個減法操作,有3個地址,分別是 兩個源操作數地址和一個目的地址。於是,CPU就到內存地址00000100處取出被減數,到00000001處取出減數,送到ALU中進行減法運算,然後 把結果送到00000110處。
這只是一個相當簡單化的例子,實際情況要復雜的多
2、 指令的分類與定址 方式
一般說來,現在的指令系統有以下幾種類型的指令:
(1)算術邏輯運算指令
算術邏輯運算 指令包括加減乘除等算術運算指令,以及與或非異或等邏輯運算指令。現在的指令系統還加入了一些十進制運算指令以及字元串運算指令等。
(2)浮點運算指令
用於對浮點數進行運算。浮點運算要大大復雜於整數運算,所以CPU中一般還會有專門負責浮點運 算的浮點運算單元。現在的浮點指令中一般還加入了向量指令,用於直接對矩陣進行運算,對於現在的多媒體和3D處理很有用。
(3)位 操作指令
學過C的人應該都知道C語言中有一組位操作語句,相對應的,指令系統中也有一組位操作指令,如左移一位右移 一位等。對於計算機內部以二進制不碼表示的數據來說,這種操作是非常簡單快捷的。
(4)其他指令
上面三種都是 運算型指令,除此之外還有許多非運算的其他指令。這些指令包括:數據傳送指令、堆棧操作指令、轉移類指令、輸入輸出指令和一些比較特 殊的指令,如特權指令、多處理器控制指令和等待、停機、空操作等指令。
對於指令中的地址碼,也會有許多不同的定址 (編址)方式,主要有直接定址,間接定址,寄存器定址,基址定址,變址定址等,某些復雜的指令系統會有幾十種甚至更多的定址方式。
3、 CISC與RISC
CISC,Complex Instruction Set Computer,復雜指令系統計算機。RISC,Reced Instruction Set Computer,精簡指令系統計算機。雖然這兩個名詞是針對計算機的,但下文我們仍然只對指令集進行研究。
(1)CISC 的產生、發展和現狀
一開始,計算機的指令系統只有很少一些基本指令,而其他的復雜指令全靠軟體編譯時通過簡單指令 的組合來實現。舉個最簡單的例子,一個a乘以b的操作就可以轉換為a個b相加來做,這樣就用不著乘法指令了。當然,最早的指令系統就已經 有乘法指令了,這是為什麼呢?因為用硬體實現乘法比加法組合來得快得多。
由於那時的計算機部件相當昂貴,而且速度 很慢,為了提高速度,越來越多的復雜指令被加入了指令系統中。但是,很快又有一個問題:一個指令系統的指令數是受指令操作碼的位數所 限制的,如果操作碼為8位,那麼指令數最多為256條(2的8次方)。
那麼怎麼辦呢?指令的寬度是很難增加的,聰明的設計師們又想出了 一種方案:操作碼擴展。前面說過,操作碼的後面跟的是地址碼,而有些指令是用不著地址碼或只用少量的地址碼的。那麼,就可以把操作碼 擴展到這些位置。
舉個簡單的例子,如果一個指令系統的操作碼為2位,那麼可以有00、01、10、11四條不同的指令。現在 把11作為保留,把操作碼擴展到4位,那麼就可以有00、01、10、1100、1101、1110、1111七條指令。其中1100、1101、1110、1111這四條指令 的地址碼必須少兩位。
然後,為了達到操作碼擴展的先決條件:減少地址碼,設計師們又動足了腦筋,發明了各種各樣的定址方式,如基 址定址、相對定址等,用以最大限度的壓縮地址碼長度,為操作碼留出空間。
就這樣,慢慢地,CISC指令系統就形成了, 大量的復雜指令、可變的指令長度、多種的定址方式是CISC的特點,也是CISC的缺點:因為這些都大大增加了解碼的難度,而在現在的高速硬 件發展下,復雜指令所帶來的速度提升早已不及在解碼上浪費點的時間。除了個人PC市場還在用x86指令集外,伺服器以及更大的系統都早已不 用CISC了。x86仍然存在的唯一理由就是為了兼容大量的x86平台上的軟體。
]:(2)RISC的產生、發展和現狀
1975年,IBM的設計師John Cocke研究了當時的IBM370CISC系統,發現其中占總指令數僅20%的簡單指令卻在程序調用中佔了80% ,而占指令數80%的復雜指令卻只有20%的機會用到。由此,他提出了RISC的概念。
事實證明,RISC是成功的。80年代末,各公司的RISC CPU如雨後春筍般大量出現,占據了大量的市場。到了90年代,x86的CPU如pentium和k5也開始使用先進的RISC核心。
RISC 的最大特點是指令長度固定,指令格式種類少,定址方式種類少,大多數是簡單指令且都能在一個時鍾周期內完成,易於設計超標量與流水線 ,寄存器數量多,大量操作在寄存器之間進行。由於下文所講的CPU核心大部分是講RISC核心,所以這里就不多介紹了,對於RISC核心的設計下 面會詳細談到。
RISC目前正如日中天,Intel的Itanium也將最終拋棄x86而轉向RISC結構。
二、CPU內核結構
好吧 ,下面來看看CPU。CPU內核主要分為兩部分:運算器和控制器。
(一) 運算器
1、 算術邏輯運算單元ALU(Arithmetic and Logic Unit)
ALU主要完成對二進制數據的定點算術運算(加減乘除)、邏輯運算(與或非異或)以及移位操作。在某些CPU中還 有專門用於處理移位操作的移位器。
通常ALU由兩個輸入端和一個輸出端。整數單元有時也稱為IEU(Integer Execution Unit)。我們通常所說的「CPU是XX位的」就是指ALU所能處理的數據的位數。
2、 浮點運算單元FPU(Floating Point Unit)
FPU主要負責浮點運算和高精度整數運算。有些FPU還具有向量運算的功能,另外一些則有專門的向量處理單元。
3、通用寄存器組
通用寄存器組是一組最快的存儲器,用來保存參加運算的操作數和中間結果。
在通用寄存器的設計上,RISC與CISC有 著很大的不同。CISC的寄存器通常很少,主要是受了當時硬體成本所限。比如x86指令集只有8個通用寄存器。所以,CISC的CPU執行是大多數時 間是在訪問存儲器中的數據,而不是寄存器中的。這就拖慢了整個系統的速度。而RISC系統往往具有非常多的通用寄存器,並採用了重疊寄存 器窗口和寄存器堆等技術使寄存器資源得到充分的利用。
對於x86指令集只支持8個通用寄存器的缺點,Intel和AMD的最新 CPU都採用了一種叫做「寄存器重命名」的技術,這種技術使x86CPU的寄存器可以突破8個的限制,達到32個甚至更多。不過,相對於RISC來說 ,這種技術的寄存器操作要多出一個時鍾周期,用來對寄存器進行重命名。
4、 專用寄存器
專用寄存器通常是一些狀 態寄存器,不能通過程序改變,由CPU自己控制,表明某種狀態。

(二) 控制器
運算器只能完成運算,而控 制器用於控制著整個CPU的工作。
1、 指令控制器
指令控制器是控制器中相當重要的部分,它要完成取指令、分析指令等操作,然 後交給執行單元(ALU或FPU)來執行,同時還要形成下一條指令的地址。
2、 時序控制器
時序控制器的作用是為每條 指令按時間順序提供控制信號。時序控制器包括時鍾發生器和倍頻定義單元,其中時鍾發生器由石英晶體振盪器發出非常穩定的脈沖信號,就 是CPU的主頻;而倍頻定義單元則定義了CPU主頻是存儲器頻率(匯流排頻率)的幾倍。
3、 匯流排控制器
匯流排控制器主要用於控制CPU 的內外部匯流排,包括地址匯流排、數據匯流排、控制匯流排等等。
4、中斷控制器
中斷控制器用於控制各種各樣的中斷請求,並根據優先 級的高低對中斷請求進行排隊,逐個交給CPU處理。
(三) CPU核心的設計
CPU的性能是由什麼決定的呢?單純的一個ALU速度在一個CPU中並不起決定性作用,因為ALU的速度都差不多。而一個CPU的性能表現的決 定性因素就在於CPU內核的設計。
1、超標量(Superscalar)
既然無法大幅提高ALU的速度,有什麼替代的方法呢?並行處理的方 法又一次產生了強大的作用。所謂的超標量CPU,就是只集成了多個ALU、多個FPU、多個解碼器和多條流水線的CPU,以並行處理的方式來提高 性能。
超標量技術應該是很容易理解的,不過有一點需要注意,就是不要去管「超標量」之前的那個數字,比如「9路超標量」,不同 的廠商對於這個數字有著不同的定義,更多的這只是一種商業上的宣傳手段。
2、流水線(Pipeline)
流水線是現代RISC核心的一 個重要設計,它極大地提高了性能。
對於一條具體的指令執行過程,通常可以分為五個部分:取指令,指令解碼,取操作數,運算 (ALU),寫結果。其中前三步一般由指令控制器完成,後兩步則由運算器完成。按照傳統的方式,所有指令順序執行,那麼先是指令控制器工 作,完成第一條指令的前三步,然後運算器工作,完成後兩步,在指令控制器工作,完成第二條指令的前三步,在是運算器,完成第二條指令 的後兩部……很明顯,當指令控制器工作是運算器基本上在休息,而當運算器在工作時指令控制器卻在休息,造成了相當大的資源浪費。解決 方法很容易想到,當指令控制器完成了第一條指令的前三步後,直接開始第二條指令的操作,運算單元也是。這樣就形成了流水線系統,這是 一條2級流水線。
如果是一個超標量系統,假設有三個指令控制單元和兩個運算單元,那麼就可以在完成了第一條指令的取址工作後直 接開始第二條指令的取址,這時第一條指令在進行解碼,然後第三條指令取址,第二條指令解碼,第一條指令取操作數……這樣就是一個5級流 水線。很顯然,5級流水線的平均理論速度是不用流水線的4倍。
流水線系統最大限度地利用了CPU資源,使每個部件在每個時鍾周期都 工作,大大提高了效率。但是,流水線有兩個非常大的問題:相關和轉移。
在一個流水線系統中,如果第二條指令需要用到第一條指 令的結果,這種情況叫做相關。以上面哪個5級流水線為例,當第二條指令需要取操作數時,第一條指令的運算還沒有完成,如果這時第二條指 令就去取操作數,就會得到錯誤的結果。所以,這時整條流水線不得不停頓下來,等待第一條指令的完成。這是很討厭的問題,特別是對於比 較長的流水線,比如20級,這種停頓通常要損失十幾個時鍾周期。目前解決這個問題的方法是亂序執行。亂序執行的原理是在兩條相關指令中 插入不相關的指令,使整條流水線順暢。比如上面的例子中,開始執行第一條指令後直接開始執行第三條指令(假設第三條指令不相關),然 後才開始執行第二條指令,這樣當第二條指令需要取操作數時第一條指令剛好完成,而且第三條指令也快要完成了,整條流水線不會停頓。當 然,流水線的阻塞現象還是不能完全避免的,尤其是當相關指令非常多的時候。
另一個大問題是條件轉移。在上面的例子中,如果第 一條指令是一個條件轉移指令,那麼系統就會不清楚下面應該執行那一條指令?這時就必須等第一條指令的判斷結果出來才能執行第二條指令 。條件轉移所造成的流水線停頓甚至比相關還要嚴重的多。所以,現在採用分支預測技術來處理轉移問題。雖然我們的程序中充滿著分支,而 且哪一條分支都是有可能的,但大多數情況下總是選擇某一分支。比如一個循環的末尾是一個分支,除了最後一次我們需要跳出循環外,其他 的時候我們總是選擇繼續循環這條分支。根據這些原理,分支預測技術可以在沒有得到結果之前預測下一條指令是什麼,並執行它。現在的分 支預測技術能夠達到90%以上的正確率,但是,一旦預測錯誤,CPU仍然不得不清理整條流水線並回到分支點。這將損失大量的時鍾周期。所以 ,進一步提高分支預測的准確率也是正在研究的一個課題。
越是長的流水線,相關和轉移兩大問題也越嚴重,所以,流水線並不是越 長越好,超標量也不是越多越好,找到一個速度與效率的平衡點才是最重要的。

1、解碼器(Decode Unit)
這是x86CPU才有的東西,它的作用是把長度不定的x86指令轉換為長度固定的類似於RISC的指令,並交給RISC內核。解碼分為硬體解碼和微解碼 ,對於簡單的x86指令只要硬體解碼即可,速度較快,而遇到復雜的x86指令則需要進行微解碼,並把它分成若干條簡單指令,速度較慢且很復 雜。好在這些復雜指令很少會用到。
Athlon也好,PIII也好,老式的CISC的x86指令集嚴重製約了他們的性能表現。
2、一級緩存 和二級緩存(Cache)
以及緩存和二級緩存是為了緩解較快的CPU與較慢的存儲器之間的矛盾而產生的,以及緩存通常集成在CPU內核, 而二級緩存則是以OnDie或OnBoard的方式以較快於存儲器的速度運行。對於一些大數據交換量的工作,CPU的Cache顯得尤為重要。

C. 關於 CPU中的指令解碼器和預取緩沖器 的作用

關於指令解碼單元:

不管是硬碟上、內存中還是CPU中,指令確實都是以二進制(0、1)方式存儲,
但是二進制存儲的指令並不見得就是CPU能直接處理的指令,比如
匯編語句 mov AX,BX 的二進制機器碼 1000 1011 1100 0011
CPU 核心的運算單元並不知道 1000 1011 1100 0011 是什麼意思,
要通過解碼器才能把這一段機器碼轉換為控制核心電路工作的信號——微碼,
換句話說,就是把二進制的程序代碼(軟體)變為硬體的電路控制信號。

另外,現代 x86 微處理器通常還要額外的解碼電路,把 x86 CISC 指令
動態翻譯成 RISC 指令,然後送到 CPU 的 RISC 核心再翻譯為控制信號。

關於預取緩沖器:

如果不使用這個緩沖器,CPU 每次需要新指令的時候都從內存(或L2緩存)
讀取的話,那麼就得空耗幾百(或L2的幾十)個周期等待這些慢速設備。
L1 數據緩存以及 CPU 內核裡面的指令寄存器隊列 可以以更高的速度運行,
讓 CPU 一旦需要就能在幾個或一個周期內從中取得新指令,從而大大加快
指令連續執行的速度。

D. 如何解決存儲器和CPU之間的時序配合問題,述說其詳細過程

http://blog.21ic.com/user1/3794/archives/2007/40244.html
分享】存儲器與CPU的連接2007-7-19 16:46:00
存儲器與CPU的連接
存儲器與CPU或系統匯流排的連接,這個題目很大。注意到以位元組為單位組織的存儲器是16位寬度、乃至32位寬度的存儲器的基礎,本著由易到難、由淺入深的原則,這里先考慮以位元組為單位組織的存儲器與8位CPU的連接,在下一節介紹16位寬度的存儲器與16位CPU(以8086為例)的連接,在後面的章節再討論32位CPU(以80386為例)的存儲器組織。
在考慮存儲晶元類型時,也是先考慮與CPU連接較為方便的SRAM和ROM,然後再指出DRAM與CPU連接時要特別考慮的地方。
在存儲器與CPU連接時一般要考慮以下幾個問題:
·CPU匯流排的負載能力。
·CPU與存儲器速度的配合問題。
·存儲器的地址空間分配。
·讀/寫控制信號的連接。
·數據線的連接。
·地址線的連接與存儲晶元片選信號的產生。
1.CPU匯流排的負載能力
CPU匯流排的驅動能力有限,通常為一到數個,TTL負載,因此,在較大的系統中需要考慮匯流排驅動。一般做法是,對單向傳送的地址和控制匯流排,可採用三態鎖存器(如74LS373、8282等)和三態單向驅動器(如74LS244)等來加以鎖存和驅動;對雙向傳送的數據匯流排,可採用三態雙向驅動器(如74LS245、8286等)來加以驅動。三態雙向驅動器也稱匯流排收發器或數據收發器。
2.CPU與存儲器速度的配合問題
每一種存儲晶元都有自己固有的時序特性,這在前面已多次講到。在和cPu相連時必須處理好時序的配合問題。處理這個問題應以CPU的時序為基準,從CPU的角度提要求。
例如,存儲晶元讀取時間應小於CPU從發出地址到要求數據穩定的時間間隔;存儲晶元從片選有效到輸出穩定的時間應小於系統自片選有效到cPu要求數據穩定的時間間隔。如果沒有滿足要求的存儲晶元,或者出於價格因素而選用速度較慢的存儲晶元時,則應提供外部電路,以產生READY信號,迫使CPU插入等待時鍾Tw。看一個具體的例子,2114-2的讀取時間最大為200 ns,而cPu要求的從地址有效到數據穩定的時間間隔為150 ns,則不能使用2114—2,可選用比它快的晶元。如果出於價格因素,一定要用2114—2,則需要設計READY產生電路,以便插入Tw。
3.存儲器的地址空間分配
內存通常分為RAM和ROM兩大部分,而RAM又分為操作系統佔用區和用戶區。另外,目前生產的存儲器晶元,單片的容量仍然是有限的,即它的定址空間是有限的,一般要由若干晶元組成一個存儲器。所以,在和CPU連接時需進行存儲器的地址空間分配,即需要事先確定每個晶元(或由「×l位」或「×4位」晶元組成的晶元組)所佔用的地址空間。
4.讀/寫控制信號的連接
總的原則是CPU的讀/寫控制信號分別和存儲器晶元的讀/寫信號輸入端相連。實際上,一般存儲器晶元沒有讀輸入端,是用寫無效時的片選信號兼作讀信號。有的存儲器晶元設有輸出允許()引腳,一般將該引腳和CPU的讀信號相連,以便該片被選中且讀信號有效時將片內數據輸出三態門打開。對於不需要在線編程的ROM晶元,不存在寫信號的連接。

5.數據線的連接
這個問題與存儲器的讀/寫寬度有關,而存儲器讀/寫的最大寬度一般為CPU對外數據匯流排的位數。在考慮存儲器與CPU的數據線連接時,總的原則是:如果選用晶元的晶元字和所要設計的存儲器的讀/寫寬度相同,則直接將它的數據線分別和CPU的數據線相連;如果晶元字的位數小於所要設計的存儲器的讀/寫寬度,則需進行「位擴展」,即用幾片組合在一起,使它們的晶元字位數的總和等於存儲器的讀/寫寬度,將它們的數據線分別和CPU的數據線按對應關系相連。
這里以8位CPU配8位寬度的存儲器為例。若選用「×8位」存儲晶元,則將它的8根數據線分別和CPU的8根數據線相連即可;而選用晶元字不足8位的存儲晶元,則需要用幾片(「×1位」晶元需8片,「×4位」位晶元需2片)才能構成一個8位寬度的存儲器,這時,需將這些晶元的數據線按位的對應關系分別和CPU的8根數據線相連。
有些存儲晶元,數據的輸入和輸出分別緩沖,一位數據設置DIN和DOUT兩個數據線引腳。對於這種晶元,需將一位的DIN和DOUT引腳連起來,再和CPU的一根數據線相連。
6.地址線的連接及存儲晶元片選信號的產生
一個存儲器系統通常需要若干個存儲晶元。為了能正確實現定址,一般的做法是,將cPu或系統的一部分地址線(通常是低位地址線,位數取決於存儲晶元的容量)連到所有存儲晶元,以進行片內定址(存儲晶元內均設有地址解碼器);而用另一部分地址線(高位地址線)進行晶元選擇。存儲器系統設計的關鍵在於如何進行晶元選擇,即如何對高位地址解碼以產生晶元的片選信號,常用以下三種方法:
(1)線選法
用一根地址線直接作一個存儲晶元的片選信號。例如,一台8位微機,有16根地址線,現要配2 KB RAM和2 KB ROM,均選用2 K×8位的晶元,則各需一片。這時可採用一種最簡單的地址選擇方法,如圖3.24所示。將CPU的地址線的低11位(A10~A0)和兩個晶元的地址線分別相連,晶元的片選直接和其他的高位地址線中的一根相連,圖中A15反相後接RAM的,A14反相後接ROM的。這樣,A15、A14為1 0時選中RAM片,為0 1時選中ROM片。
這里分析一下RAM晶元佔用地址空間的情況。未用的地址位(這里是A13~A11)通常取0,即RAM晶元的設計地址空間為8000H~87FFH。將A15、A14固定為1 0,A10一AO作片內定址,當A13~A11取不同的組合時,可形成包括上述設計空間在內的8個區域。除去設計空間外,其他區域是:8800H~8FFFH,9000H~97FFH,…,B800H~BFFFH。由於A13~A11沒有參加解碼,訪問這7個區域中的任何一個單元都會影響到設計空間中相應的單元,因此,這7個區域不得他用。可以認為這些區域也被該RAM晶元所佔用著,稱這些區域為設計空間的重疊區。對於該例中的ROM晶元,同樣也存在7個重疊區,讀者可自行分析。

線選法的優點是簡單、無需外加選擇電路;缺點是不能有效地利用地址空間,也不便於系統的擴充。該方法可用在存儲容量需求小,且不要求擴充的場合,例如單片機應用系統。
(2)全解碼
全部地址線參加解碼,除去進行片內定址的低位地址線外,其餘地址線均參加解碼,以進行片選。例如,一台8位微機,現要求配8 KB RAM,選用2 K×8位的晶元,安排在64 KB地址空間低端的8 KB位置。圖3.25所示為該8 KB RAM與CPU(或系統匯流排)的連接。圖中74Lsl38是3線一8線解碼器。它有3個代碼輸入端c、B、A(A為低位)和8個解碼輸出端Y0~Y7。74LSl38還有3個使能端(或叫允許端)G1、和,第一個為高電平有效,後兩個為低電平有效。只有當它們為l 0 0時,解碼器才進行正常解碼;否則,解碼器不工作,所有的輸出均無效(為高)。表3.5是74LSl38的真值表。此外,常用的3線一8線解碼器還有8205,其輸入/輸出特性和74LS138完全一樣,只是使用了另一組信號名稱。

從圖3.25中可以看到,除片內定址的低位地址線外,高位地址都參與了解碼。根據圖中的接法,當A15~A1l為00000時,YO有效,選中左起第一片;為00001時,Y1有效,選中左起第二片,其他依此類推。
全解碼的優點是可利用全部地址空間,可擴充性好;缺點是解碼電路開銷大。
(3)部分解碼
它是前兩種方法的綜合,即除進行片內定址的低位地址線外,其餘地址線有一部分參加解碼以進行片選。以圖3.26所示為例,這里最高位A15沒有參加解碼。因為A15沒有參加解碼,所以也存在重疊區問題。
部分解碼是界於線選法和全解碼之間的一種方法,其性能也界於二者之間:可定址空間比線選法大,比全解碼小;而解碼電路比線選法復雜,比全解碼簡單。

上面圍繞存儲晶元片選信號的產生,說明了三種解碼方法。這些方法也適用於後面要介紹的I/O埠的定址。

E. 計算機組成原理 cpu和存儲器的連接問題

1)CPU可訪問的最大存儲空間看地址位數地址匯流排18條故2^18
2)CPU可提供數據匯流排8條存儲空間為16KB故要拼湊一個16K*8--->(16K*8)/(4K×4
)=8
3)要求用138解碼器實現地址解碼應該就是3-8解碼器那麼有3根地址線做解碼輸入。
全部用4K×4位的RAM晶元構成,那麼4K=2^12需要12根地址線A11-A0,之前3根就是A14-A12---這里的推算的沒考慮要求其地址范圍為08000H——0BFFFH的。
這里是從低位考慮的。
考慮地址空間必須先把地址從16進制轉成2進制觀察他們「1」最高位的位置然後設計。

F. 內存晶元與CPU連接時,CPU的地址線分成那兩部分,分別有什麼作用

根據所選用的半導體存儲器晶元地址線的多少,把CPU的地址線分為晶元外(指存儲器晶元)地址和晶元內的地址,片外地址經地址解碼器解碼後輸出,作為存儲器晶元的片選信號,用來選中CPU所要訪問的存儲器晶元。片內地址線直接接到所要訪問的存儲器晶元的地址引腳,用來直接選中該晶元中的一個存儲單元。
摘自https://..com/question/504270326.html

G. 在CPU+RAM+ROM的結構中,有哪些地方用到解碼器

如果CPU的數據與地址匯流排復用的情況下,都需要用解碼器,CPU讀RAM,ROM的內容需要解碼器鎖存地址,然後數據匯流排傳回數據信息。如果數據匯流排與地址匯流排是分開的就不需要解碼器了。

H. 存儲器由哪幾部分組成,如何使用

存儲器由存儲體、地址解碼器和控制電路組成。


1)存儲體是存儲數據信息的載體。由一系列存儲單元組成,每個存儲單元都有確定的地址。存儲單元通常按位元組編址,一個存儲單元為一個位元組,每個位元組能存放一個8位二進制數。就像一個大倉庫,分成許多房間,大倉庫相當於存儲體,房間相當於位元組,房間都有編號,編號就是地址。

2)地址解碼器將CPU發出的地址信號轉換為對存儲體中某一存儲單元的選通信號。相當於CPU給出地址,地址解碼器找出相應地址房間的鑰匙。通常地址是8位或1 6位,輸入到地址解碼器,產生相應的選通線,8位地址能產生28=256根選通線,即能選通256位元組。16位地址能產生216=65536=64K根選通線,即能選通64K位元組。當然要產生65536根選通線是很難想像的,實際上它是分成256根行線和256根列線,256 X 256=65536,合起來能選通65536個存儲單元。

3)存儲器控制電路包括片選控制、讀/寫控制和帶三態門的輸入/輸出緩沖電路。

①片選控制確定存儲器晶元是否工作。

②讀/寫控制確定數據傳輸方向;若是讀指令,則將已被選通的存儲單元中的內容傳送到數據匯流排上;若是寫指令,則將數據匯流排上的數據傳送到已被選通的存儲單元中。

③帶三態門的輸入/輸出緩沖電路用於數據緩沖和防止匯流排上數據競爭。數據匯流排相當於一條車流頻繁的大馬路,必須在綠燈條件下,車輛才能進入這條大馬路,否則要撞車發生交通事故。同理,存儲器的輸出端是連接在數據匯流排上的,存儲器中的數據是不能隨意傳送到數據匯流排上的。例如,若數據匯流排上的數據是「1」(高電平5V),存儲器中的數據是「0」(低電平OV),兩種數據若碰到一起就會發生短路而損壞單片機。因此,存儲器輸出埠不僅能呈現「1」和「O」兩種狀態,還應具有第三種狀態「高阻"態。呈「高阻"態時,它們的輸出埠相當於斷開,對數據匯流排不起作用,此時數據匯流排可被其他器件佔用。當其他器件呈「高阻"態時,存儲器在片選允許和輸出允許的條件下,才能將自己的數據輸出到數據匯流排上。

單片機學習需要理論結合實際,最好有自己的單片機開發板輔助,看視頻教程,目前主流的有吳鑒鷹單片機開發板