當前位置:首頁 » 服務存儲 » 簡述存儲器的兩種解碼結構
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

簡述存儲器的兩種解碼結構

發布時間: 2022-06-07 00:15:31

1. 存儲器晶元中地址解碼的方式有幾種,分別說明它們的特點

  1. 若CPU的定址空間等於存儲器晶元的定址空間,可直接將高低位地址線相連即可,這種方式下,可用單條讀寫指令直接定址,定址地址與指令中的地址完全吻合。

  2. 若CPU的定址空間大於存儲器晶元的定址空間,可直接將高低位地址線相連即可,CPU剩餘部分高位地址線,這種方式下,可用單條讀寫指令直接定址,未連接的地址線在指令中可以以0或1出現,即有多個地址對應每個存儲器空間,可在指令中將這些位默認為零。

  3. 若CPU的定址空間小於存儲器晶元的定址空間,可將其它IO口連接剩餘存儲器高位地址線,定址前,需設置好這些IO口。

  4. 當存在多片存儲器,且希望節省CPU的IO口時,需要外加解碼電路。比如說,存儲器地址線為13根,共8片存儲器,可用74LS138連接CPU的高3位地址線,74LS38的8位輸出分別連接8片存儲器,讀寫時,定址地址與指令中的地址完全吻合。

  5. 上一種情況中,若希望簡化外圍電路,也可用其餘埠的8個IO分別連接8片存儲的片選,其定址方式與第三種情況類似。

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

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


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」兩種狀態,還應具有第三種狀態「高阻"態。呈「高阻"態時,它們的輸出埠相當於斷開,對數據匯流排不起作用,此時數據匯流排可被其他器件佔用。當其他器件呈「高阻"態時,存儲器在片選允許和輸出允許的條件下,才能將自己的數據輸出到數據匯流排上。

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

3. 在存儲器的內部結構中,解碼器的作用是

在存儲器的內部結構中,解碼器的作用是?簡單講,編譯器就是將「一種語言(通常為高級語言)」翻譯為「另一種語言(通常為低級語言)」的程序。一個現代編譯器的主要工作流程:源代碼 (source code) → 預處理器 (preprocessor) → 編譯器 (compiler) → 目標代碼 (object code) → 鏈接器 (Linker) → 可執行程序 (executables)
高級計算機語言便於人編寫,閱讀交流,維護。機器語言是計算機能直接解讀、運行的。編譯器將匯編或高級計算機語言源程序(Source program)作為輸入,翻譯成目標語言(Target language)機器代碼的等價程序。源代碼一般為高級語言 (High-level language), 如Pascal、C、C++、Java、漢語編程等或匯編語言,而目標則是機器語言的目標代碼(Object code),有時也稱作機器代碼(Machine code)。
對於C#、VB等高級語言而言,此時編譯器完成的功能是把源碼(SourceCode)編譯成通用中間語言(MSIL/CIL)的位元組碼(ByteCode)。最後運行的時候通過通用語言運行庫的轉換,編程最終可以被CPU直接計算的機器碼(NativeCode)。
中文名
編譯器
外文名
Compiler
別稱
解碼器
表達式
源代碼→預處理器 → 編譯器 → 目標代碼
提出者
葛麗絲·霍普

4. 半導體存儲器晶元的解碼驅動方式有幾種

兩種:解碼法,線選法。
其中,解碼法,還可分成:全解碼、部分解碼。
他們回答的,都不對。

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

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

6. 單片機的存儲器結構

通過上面的實驗我們已經知道:一盞燈亮或者說一根線的電平的高低,能代表兩種狀態:0和1。實際上這就是一個二進制位,因此我們就把一根線稱之為一「位」,用BIT表示。

什麼是位元組:
  一根線能表於0和1,兩根線能表達00,01,10,11四種狀態,也就是能表於0到3,而三根能表達0-7,計算機中常常用8根線放在一起,同時計數,就能表過到0-255一共256種狀態。這8根線或者8位就稱之為一個位元組(BYTE)。不要問我為什麼是8根而不是其它數,因為我也不知道。(計算機世界是一本人造的世界,不是自然界,很多事情你無法問為什麼,只能說:它是一種規定,大家在以後的學習過程中也要注意這個問題)

存儲器的工作原理:

1、存儲器構造

   存儲器就是用來存放數據的地方。它是利用電平的高低來存放數據的,也就是說,它存放的實際上是電平的高、低,而不是我們所習慣認為的1234這樣的數字,這樣,我們的一個謎團就解開了,計算機也沒什麼神秘的嗎。

 

 

 
圖2

 
圖3

  讓我們看圖2。單片機裡面都有這樣的存儲器,這是一個存儲器的示意圖:一個存儲器就象一個個的小抽屜,一個小抽屜里有八個小格子,每個小格子就是用來存放「電荷」的,電荷通過與它相連的電線傳進來或釋放掉,至於電荷在小格子里是怎樣存的,就不用我們操心了,你能把電線想像成水管,小格子里的電荷就象是水,那就好理解了。存儲器中的每個小抽屜就是一個放數據的地方,我們稱之為一個「單元」。

 

 

  有了這么一個構造,我們就能開始存放數據了,想要放進一個數據12,也就是00001100,我們只要把第二號和第三號小格子里存滿電荷,而其它小格子里的電荷給放掉就行了(看圖3)。可是問題出來了,看圖2,一個存儲器有好多單元,線是並聯的,在放入電荷的時候,會將電荷放入所有的單元中,而釋放電荷的時候,會把每個單元中的電荷都放掉,這樣的話,不管存儲器有多少個單元,都只能放同一個數,這當然不是我們所希望的,因此,要在結構上稍作變化,看圖2,在每個單元上有個控制線,我想要把數據放進哪個單元,就給一個信號這個單元的控制線,這個控制線就把開關打開,這樣電荷就能自由流動了,而其它單元控制線上沒有信號,所以開關不打開,不會受到影響,這樣,只要控制不一樣單元的控制線,就能向各單元寫入不一樣的數據了,同樣,如果要某個單元中取數據,也只要打開對應的控制開關就行了。

2、存儲器解碼
  那麼,我們怎樣來控制各個單元的控制線呢?這個還不簡單,把每個單元元的控制線都引到集成電路的外面不就行了嗎?事情可沒那麼簡單,一片27512存儲器中有65536個單元,把每根線都引出來,這個集成電路就得有6萬多個腳?不行,怎麼辦?要想法減少線的數量。我們有一種辦法稱這為解碼,簡單介紹一下:一根線能代表2種狀態,2根線能代表4種狀態,3根線能代表幾種,256種狀態又需要幾根線代表?8種,8根線,所以65536種狀態我們只需要16根線就能代表了。

(圖4)

3、存儲器的選片及匯流排的概念
   至此,解碼的問題解決了,讓我們再來關注另外一個問題。送入每個單元的八根線是用從什麼地方來的呢?它就是從計算機上接過來的,一般地,這八根線除了接一個存儲器之外,還要接其它的器件,如圖4所示。這樣問題就出來了,這八根線既然不是存儲器和計算機之間專用的,如果總是將某個單元接在這八根線上,就不好了,比如這個存儲器單元中的數值是0FFH另一個存儲器的單元是00H,那麼這根線到底是處於高電平,還是低電平?豈非要打架看誰歷害了?所以我們要讓它們分離。辦法當然很簡單,當外面的線接到集成電路的管腳進來後,不直接接到各單元去,中間再加一組開關(參考圖4 )就行了。平時我們讓開關關閉著,如果確實是要向這個存儲器中寫入數據,或要從存儲器中讀出數據,再讓開關接通就行了。這組開關由三根引線選擇:讀控制端、寫控制端和片選端。要將數據寫入片中,先選中該片,然後發出寫信號,開關就合上了,並將傳過來的數據(電荷)寫入片中。如果要讀,先選中該片,然後發出讀信號,開關合上,數據就被送出去了。注意圖4,讀和寫信號同時還接入到另一個存儲器,但是由於片選端不一樣,所以雖有讀或寫信號,但沒有片選信號,所以另一個存儲器不會「誤會」而開門,造成沖突。那麼會不一樣時選中兩片晶元呢?只要是設計好的系統就不會,因為它是由計算控制的,而不是我們人來控制的,如果真的出現同時出現選中兩片的情況,那就是電路出了故障了,這不在我們的討論之列。

7. 存儲器的基本結構原理

存儲器單元實際上是時序邏輯電路的一種。按存儲器的使用類型可分為只讀存儲器(ROM)和隨機存取存儲器(RAM),兩者的功能有較大的區別,因此在描述上也有所不同
存儲器是許多存儲單元的集合,按單元號順序排列。每個單元由若干三進制位構成,以表示存儲單元中存放的數值,這種結構和數組的結構非常相似,故在VHDL語言中,通常由數組描述存儲器

結構
存儲器結構在MCS - 51系列單片機中,程序存儲器和數據存儲器互相獨立,物理結構也不相同。程序存儲器為只讀存儲器,數據存儲器為隨機存取存儲器。從物理地址空間看,共有4個存儲地址空間,即片內程序存儲器、片外程序存儲器、片內數據存儲器和片外數據存儲器,I/O介面與外部數據存儲器統一編址

存儲器是用來存儲程序和各種數據信息的記憶部件。存儲器可分為主存儲器(簡稱主存或內存)和輔助存儲器(簡稱輔存或外存)兩大類。和CPU直接交換信息的是主存。
主存的工作方式是按存儲單元的地址存放或讀取各類信息,統稱訪問存儲器。主存中匯集存儲單元的載體稱為存儲體,存儲體中每個單元能夠存放一串二進制碼表示的信息,該信息的總位數稱為一個存儲單元的字長。存儲單元的地址與存儲在其中的信息是一一對應的,單元地址只有一個,固定不變,而存儲在其中的信息是可以更換的。
指示每個單元的二進制編碼稱為地址碼。尋找某個單元時,先要給出它的地址碼。暫存這個地址碼的寄存器叫存儲器地址寄存器(MAR)。為可存放從主存的存儲單元內取出的信息或准備存入某存儲單元的信息,還要設置一個存儲器數據寄存器(MDR)