存儲器和匯流排實驗實驗原理
① 內存條存儲數據的原理
內存的存儲原理
內存,英文名為RAM(Random Access Memory),全稱是隨機存取存儲器。主要的作用就是存儲代碼和數據供CPU在需要的時候調用。但是這些數據並不是像用木桶盛水那麼簡單,而是類似圖書館中用有格子的書架存放書籍一樣,不但要放進去還要能夠在需要的時候准確的調用出來,雖然都是書但是每本書是不同的。對於內存等存儲器來說也是一樣的,雖然存儲的都是代表0和1的代碼,但是不同的組合就是不同的數據。讓我們重新回到書和書架上來。
如果有一個書架上有10行和10列格子(每行和每列都有0~9編號),有100本書要存放在裡面,那麼我們使用一個行的編號和一個列的編號就能確定某一本書的位置。如果已知這本書的編號36,那麼我們首先鎖定第3行,然後找到第6列就能准確的找到這本書了。
在內存中也是利用了相似的原理現在讓我們回到內存上,對於它而言數據匯流排是用來傳入數據或者傳出數據的。因為存儲器中的存儲空間是如果前面提到的存放圖書的書架一樣通過一定的規則定義的,所以我們可以通過這個規則來把數據存放到存儲器上相應的位置,而進行這種定位的工作就要依靠地址匯流排來實現了。
對於CPU來說,內存就像是一條長長的有很多空格的「線」,每個空格都有一個唯一的地址與之相對應。如果CPU想要從內存中調用數據,它首先需要給地址匯流排發送地址數據定位要存取的數據,然後等待若干個時鍾周期之後,數據匯流排就會把數據傳輸給CPU。當地址解碼器接收到地址匯流排送來的地址數據之後,它會根據這個數據定位CPU想要調用的數據所在的位置,然後數據匯流排就會把其中的數據傳送到CPU。
CPU在一行數據中每次知識存取一個位元組的數據。會到實際中,通常CPU每次需要調用64bit或者是128bit的數據(單通道內存控制器為64bit,雙通道為128bit)。如果數據匯流排是64bit的話,CPU就會在一個時間中存取8個位元組的數據,因為每次還是存取1個位元組的數據,64bit匯流排將不會顯示出來任何的優勢,工作的效率將會降低很多。這也就是現在的主板和CPU都使用雙通道內存控制器的原因。
② 簡述SRAM,DRAM型存儲器的工作原理
個人電腦的主要結構:
顯示器
主機板
CPU
(微處理器)
主要儲存器
(記憶體)
擴充卡
電源供應器
光碟機
次要儲存器
(硬碟)
鍵盤
滑鼠
盡管計算機技術自20世紀40年代第一台電子通用計算機誕生以來以來有了令人目眩的飛速發展,但是今天計算機仍然基本上採用的是存儲程序結構,即馮·諾伊曼結構。這個結構實現了實用化的通用計算機。
存儲程序結構間將一台計算機描述成四個主要部分:算術邏輯單元(ALU),控制電路,存儲器,以及輸入輸出設備(I/O)。這些部件通過一組一組的排線連接(特別地,當一組線被用於多種不同意圖的數據傳輸時又被稱為匯流排),並且由一個時鍾來驅動(當然某些其他事件也可能驅動控制電路)。
概念上講,一部計算機的存儲器可以被視為一組「細胞」單元。每一個「細胞」都有一個編號,稱為地址;又都可以存儲一個較小的定長信息。這個信息既可以是指令(告訴計算機去做什麼),也可以是數據(指令的處理對象)。原則上,每一個「細胞」都是可以存儲二者之任一的。
算術邏輯單元(ALU)可以被稱作計算機的大腦。它可以做兩類運算:第一類是算術運算,比如對兩個數字進行加減法。算術運算部件的功能在ALU中是十分有限的,事實上,一些ALU根本不支持電路級的乘法和除法運算(由是使用者只能通過編程進行乘除法運算)。第二類是比較運算,即給定兩個數,ALU對其進行比較以確定哪個更大一些。
輸入輸出系統是計算機從外部世界接收信息和向外部世界反饋運算結果的手段。對於一台標準的個人電腦,輸入設備主要有鍵盤和滑鼠,輸出設備則是顯示器,列印機以及其他許多後文將要討論的可連接到計算機上的I/O設備。
控制系統將以上計算機各部分聯系起來。它的功能是從存儲器和輸入輸出設備中讀取指令和數據,對指令進行解碼,並向ALU交付符合指令要求的正確輸入,告知ALU對這些數據做那些運算並將結果數據返回到何處。控制系統中一個重要組件就是一個用來保持跟蹤當前指令所在地址的計數器。通常這個計數器隨著指令的執行而累加,但有時如果指令指示進行跳轉則不依此規則。
20世紀80年代以來ALU和控制單元(二者合成中央處理器,CPU)逐漸被整合到一塊集成電路上,稱作微處理器。這類計算機的工作模式十分直觀:在一個時鍾周期內,計算機先從存儲器中獲取指令和數據,然後執行指令,存儲數據,再獲取下一條指令。這個過程被反復執行,直至得到一個終止指令。
由控制器解釋,運算器執行的指令集是一個精心定義的數目十分有限的簡單指令集合。一般可以分為四類:1)、數據移動(如:將一個數值從存儲單元A拷貝到存儲單元B)2)、數邏運算(如:計算存儲單元A與存儲單元B之和,結果返回存儲單元C)3)、條件驗證(如:如果存儲單元A內數值為100,則下一條指令地址為存儲單元F)4)、指令序列改易(如:下一條指令地址為存儲單元F)
指令如同數據一樣在計算機內部是以二進制來表示的。比如說,10110000就是一條Intel
x86系列微處理器的拷貝指令代碼。某一個計算機所支持的指令集就是該計算機的機器語言。因此,使用流行的機器語言將會使既成軟體在一台新計算機上運行得更加容易。所以對於那些機型商業化軟體開發的人來說,它們通常只會關注一種或幾種不同的機器語言。
更加強大的小型計算機,大型計算機和伺服器可能會與上述計算機有所不同。它們通常將任務分擔給不同的CPU來執行。今天,微處理器和多核個人電腦也在朝這個方向發展。
超級計算機通常有著與基本的存儲程序計算機顯著區別的體系結構。它們通常由者數以千計的CPU,不過這些設計似乎只對特定任務有用。在各種計算機中,還有一些微控制器採用令程序和數據分離的哈佛架構(Harvard
architecture)。
③ 匯流排系統實驗報告
微型計算機的匯流排結構
Bub(匯流排) Interface(介面) Socket(插座) Slot(插槽) Port(埠)
匯流排——是一組能為多個部件服務的公共信息傳送線路,是計算機各部件之間的傳送數據、地址和控制信息的公共通路,它能分時地發送與接收各部件的信息。
採用結構在系統設計、生產、使用和維護上有很多優越性:
(1)採用結構設計方法,簡化了系統設計。
(2)便於生產與之兼容的硬體板卡和軟體。
(3)便於系統的擴充和升級。
(4)便於故障診斷和維護,也降低了成本。
匯流排的主要參數
匯流排分類:
數據匯流排(Data Bus)-用於傳輸數據的。
地址匯流排(Address Bus)-用於傳輸地址信息的。
控制匯流排(Contron Bus)-用於傳輸控制信號、時鍾信號的狀態信息的。
1、匯流排的帶寬(MB/s)
——指的是單位時間內匯流排上可傳送的數據量,即每秒傳送多少MB位元組的最大穩態數據傳輸率。
2、匯流排的位寬(bit)
——指的是匯流排一次能同時傳送的數據位數,即常說的32位、64位等匯流排寬度。匯流排位寬越大傳輸率越大。
3、匯流排的工作時鍾頻率
——匯流排分為:CPU內部使用的內部匯流排和CPU對外聯系的外部匯流排。
外部匯流排又稱為系統匯流排。眾多的功能部件要正常的動作,必須有一個統一的指揮,這個就是時鍾信號。
控制匯流排的時鍾信號頻率稱為匯流排的工作時鍾頻率。內部匯流排頻率就是常說的內頻,而外部匯流排頻率就是外頻。
匯流排帶寬=匯流排位寬*匯流排工作頻率/8
註:(匯流排帶寬、匯流排位寬、匯流排工作時鍾頻率的關系,就像速公路上的車流量、公路車道數目、車輛行駛速度的關系)
實驗1 進程管理1. 實驗目的(1) 加深對進程概念的理解,明確進程和程序的區別。(2) 進一步認識並發執行的實質。(3) 分析進程爭用資源的現象,學習解決進程互斥的方法。(4) 了解Linux系統中進行通信的基本原理。2. 實驗預備內容(1) 閱讀Linux的sched.d源碼文件,加深對進程管理的理解。(2) 閱讀Linux的fork.c源碼文件,分析進程的創建過程。3. 實驗內容(1) 進程的創建編寫一段程序,使用系統調用fork()創建兩個子進程。當此程序運行時,在系統中有一個父進程和兩個子進程活動。讓每一個進程在屏幕上顯示一個字元;父進程顯示字元"a",子進程分別顯示"b"和"c"。試觀察記錄屏幕上的顯示結果,並分析原因。〈程序〉#include〈stdio.h〉Main(){int p1,p2;while((p1 == fork()) == -1); /*創建子進程p1*/if (p1 == 0) /*子進程創建成功*/putchar('b');else{while((p2 == fork())) == -1); /*創建子進程p2*/if (p2 == 0) /*子進程創建成功*/putchar('c'); /*父進程執行*/else putchar('a');}}〈運行結果〉bca(有時出現bac等)分析:從進程並發執行來看,輸出bac,acb等情況都有可能。原因:fork()創建進程所需的時間要多於輸出一個字元的時間,因此在主進程創建進程2的同時,進程1就輸出了'b',而進程2和主程序的輸出次序是有隨機性的,所以會出現上述結果。(2) 進程的控制修改已編寫的程序,將每個進程的輸出有單個字元改為一句話,在觀察程序執行時屏幕上出現的現象,並分析其原因。如果在程序中使用系統調用lockf()來給每個進程加鎖,可以實現進程之間的互斥,觀察並分析出現的現象。〈程序1〉#include〈stdio.h〉main(){int p1,p2,i;while((p1 == fork()) == -1); /*創建子進程p1*/if (p1 == 0) /*子進程創建成功*/for(i=0;iprintf("sun %d/n",i);else{while((p2 == fork())) == -1); /*創建子進程p2*/if (p2 == 0) /*子進程創建成功*/for(i=0;iprintf("earth %d/n",i);elsefor(i=0;iprintf("moon %d/n",i);}}〈運行結果〉sun...earth...moon...moon...或sun...earth...sun...earth...moon...等分析:由於函數printf()輸出的字元串之間不會被中斷,因此,字元串內部的字元順序輸出時不變。但是,由於進程並發執行時的調度順序和父子進程的搶占處理機問題,輸出字元串的順序和先後隨著執行的不同而發生變化。這類似列印單字元的結果。〈程序2〉#include〈stdio.h〉main(){int p1,p2,i;while((p1 == fork()) == -1); /*創建子進程p1*/if (p1 == 0){lockf(1,1,0);for(i=0;iprintf("sun %d/n",i);lockf(1,0,0);}else{while((p2 == fork())) == -1);if (p2 == 0){lockf(1,1,0);for(i=0;iprintf("earth %d/n",i);lockf(1,0,0);}else{lockf(1,1,0);for(i=0;iprintf("moon %d/n",i);lockf(1,1,,0);}}}〈運行結果〉sun...earth...moon...moon...或sun...earth...sun...earth...moon...等與未上鎖的情況大致相同,也是隨著執行時間的不同,輸出結果的順序有所不同。分析:因為上述程序執行時,不同進程之間不存在共享臨界資源問題,所以,加鎖與不加鎖效果相同。(3) 軟中斷通信編制一段程序,使用系統調用fork()創建兩個子進程,再用系統調用signal()讓父進程撲捉鍵盤上來的中斷信號(即按Del鍵),當撲捉到中斷信號後,父進程用系統調用kill()向兩個子進程發出信號,子進程撲捉到信號後,分別輸出下列信息後終止:child process 1 is killed by parent!child process 2 is killed by parent!父進程等待兩個子進程終止後,輸出以下信息後終止:parent process is killed!〈程序〉#include〈stdio.h〉#include〈signal.h〉#include〈unistd.h〉void waiting(),stop();int wait_mark;main(){int p1,p2,i;while((p1 == fork()) == -1); /*創建子進程p1*/if (p1 > 0){while((p1 == fork == -1);if(p2 > 0){wait_mark = -1;signal(SIGINT,stop); /*接收'Del'信號,並轉stop*/waiting(0);kill(p1,16); /*向p1發中斷信號16*/kill(p2,17); /*向p1發中斷信號17*/wait(0); /*同步*/wait(0);printf("parent process is killed! \n");exit(0);}else{wait_mark = -1;signal(17,stop);waiting();lockf(stdout,1,0);printf("child process 2 is killed by parent! \n");lockf(stdout,0,0);exit(0);}}else{wait_mark = -1;signal(16,stop);waiting();lockf(stdout,1,0);printf("child process 1 is killed by parent! \n");lockf(stdout,0,0);exit(0);}}void waiting(){while (wait_mark != 0);}void stop(){wait_mark = 0;}〈運行結果〉child process 1 is killed by parent!child process 2 is killed by parent!parent process is killed!分析:上述程序中,使用函數signal()都放在一段程序的前面部位,而不是在其他接收信號處。只是因為signal()的執行只是為進程指定信號量16或17的作用,以及分配相應的與stop()過程鏈接的指針。從而,signal()函數必須在程序前面部分執行。
④ 存儲器和匯流排實驗中為什麼要拔掉DJ8與J02這條線,不拔可不可以為什麼
這個不拔的話,是不可以的,感覺這個情況還是比較疼不咱的
⑤ 計算機組成原理實驗。有人會嗎急需……謝謝了!
我有這樣的實驗報告
⑥ 存儲器的原理是什麼
存儲器講述工作原理及作用
介紹
存儲器(Memory)是現代信息技術中用於保存信息的記憶設備。其概念很廣,有很多層次,在數字系統中,只要能保存二進制數據的都可以是存儲器;在集成電路中,一個沒有實物形式的具有存儲功能的電路也叫存儲器,如RAM、FIFO等;在系統中,具有實物形式的存儲設備也叫存儲器,如內存條、TF卡等。計算機中全部信息,包括輸入的原始數據、計算機程序、中間運行結果和最終運行結果都保存在存儲器中。它根據控制器指定的位置存入和取出信息。有了存儲器,計算機才有記憶功能,才能保證正常工作。計算機中的存儲器按用途存儲器可分為主存儲器(內存)和輔助存儲器(外存),也有分為外部存儲器和內部存儲器的分類方法。外存通常是磁性介質或光碟等,能長期保存信息。內存指主板上的存儲部件,用來存放當前正在執行的數據和程序,但僅用於暫時存放程序和數據,關閉電源或斷電,數據會丟失。
2.按存取方式分類
(1)隨機存儲器(RAM):如果存儲器中任何存儲單元的內容都能被隨機存取,且存取時間與存儲單元的物理位置無關,則這種存儲器稱為隨機存儲器(RAM)。RAM主要用來存放各種輸入/輸出的程序、數據、中間運算結果以及存放與外界交換的信息和做堆棧用。隨機存儲器主要充當高速緩沖存儲器和主存儲器。
(2)串列訪問存儲器(SAS):如果存儲器只能按某種順序來存取,也就是說,存取時間與存儲單元的物理位置有關,則這種存儲器稱為串列訪問存儲器。串列存儲器又可分為順序存取存儲器(SAM)和直接存取存儲器(DAM)。順序存取存儲器是完全的串列訪問存儲器,如磁帶,信息以順序的方式從存儲介質的始端開始寫入(或讀出);直接存取存儲器是部分串列訪問存儲器,如磁碟存儲器,它介於順序存取和隨機存取之間。
(3)只讀存儲器(ROM):只讀存儲器是一種對其內容只能讀不能寫入的存儲器,即預先一次寫入的存儲器。通常用來存放固定不變的信息。如經常用作微程序控制存儲器。目前已有可重寫的只讀存儲器。常見的有掩模ROM(MROM),可擦除可編程ROM(EPROM),電可擦除可編程ROM(EEPROM).ROM的電路比RAM的簡單、集成度高,成本低,且是一種非易失性存儲器,計算機常把一些管理、監控程序、成熟的用戶程序放在ROM中。
3.按信息的可保存性分類
非永久記憶的存儲器:斷電後信息就消失的存儲器,如半導體讀/寫存儲器RAM。
永久性記憶的存儲器:斷電後仍能保存信息的存儲器,如磁性材料做成的存儲器以及半導體ROM。
4.按在計算機系統中的作用分
根據存儲器在計算機系統中所起的作用,可分為主存儲器、輔助存儲器、高速緩沖存儲器、控制存儲器等。為了解決對存儲器要求容量大,速度快,成本低三者之間的矛盾,目前通常採用多級存儲器體系結構,即使用高速緩沖存儲器、主存儲器和外存儲器。
能力影響
從寫命令轉換到讀命令,在某個時間訪問某個地址,以及刷新數據等操作都要求數據匯流排在一定時間內保持休止狀態,這樣就不能充分利用存儲器通道。此外,寬並行匯流排和DRAM內核預取都經常導致不必要的大數據量存取。在指定的時間段內,存儲器控制器能存取的有用數據稱為有效數據速率,這很大程度上取決於系統的特定應用。有效數據速率隨著時間而變化,常低於峰值數據速率。在某些系統中,有效數據速率可下降到峰值速率的10%以下。
通常,這些系統受益於那些能產生更高有效數據速率的存儲器技術的變化。在CPU方面存在類似的現象,最近幾年諸如AMD和 TRANSMETA等公司已經指出,在測量基於CPU的系統的性能時,時鍾頻率不是唯一的要素。存儲器技術已經很成熟,峰值速率和有效數據速率或許並不比以前匹配的更好。盡管峰值速率依然是存儲器技術最重要的參數之一,但其他結構參數也可以極大地影響存儲器系統的性能。
影響有效數據速率的參數
有幾類影響有效數據速率的參數,其一是導致數據匯流排進入若干周期的停止狀態。在這類參數中,匯流排轉換、行周期時間、CAS延時以及RAS到CAS的延時(tRCD)引發系統結構中的大部分延遲問題。
匯流排轉換本身會在數據通道上產生非常長的停止時間。以GDDR3系統為例,該系統對存儲器的開放頁不斷寫入數據。在這期間,存儲器系統的有效數據速率與其峰值速率相當。不過,假設100個時鍾周期中,存儲器控制器從讀轉換到寫。由於這個轉換需要6個時鍾周期,有效的數據速率下降到峰值速率的 94%。在這100個時鍾周期中,如果存儲器控制器將匯流排從寫轉換到讀的話,將會丟失更多的時鍾周期。這種存儲器技術在從寫轉換到讀時需要15個空閑周期,這會將有效數據速率進一步降低到峰值速率的79%。表1顯示出針幾種高性能存儲器技術類似的計算結果。
顯然,所有的存儲器技術並不相同。需要很多匯流排轉換的系統設計師可以選用諸如XDR、RDRAM或者DDR2這些更高效的技術來提升性能。另一方面,如果系統能將處理事務分組成非常長的讀寫序列,那麼匯流排轉換對有效帶寬的影響最小。不過,其他的增加延遲現象,例如庫(bank)沖突會降低有效帶寬,對性能產生負面影響。
DRAM技術要求庫的頁或行在存取之前開放。一旦開放,在一個最小周期時間,即行周期時間(tRC)結束之前,同一個庫中的不同頁不能開放。對存儲器開放庫的不同頁存取被稱為分頁遺漏,這會導致與任何tRC間隔未滿足部分相關的延遲。對於還沒有開放足夠周期以滿足tRC間隙的庫而言,分頁遺漏被稱為庫沖突。而tRC決定了庫沖突延遲時間的長短,在給定的DRAM上可用的庫數量直接影響庫沖突產生的頻率。
大多數存儲器技術有4個或者8個庫,在數十個時鍾周期具有tRC值。在隨機負載情況下,那些具有8個庫的內核比具有4個庫的內核所發生的庫沖突更少。盡管tRC與庫數量之間的相互影響很復雜,但是其累計影響可用多種方法量化。
存儲器讀事務處理
考慮三種簡單的存儲器讀事務處理情況。第一種情況,存儲器控制器發出每個事務處理,該事務處理與前一個事務處理產生一個庫沖突。控制器必須在打開一個頁和打開後續頁之間等待一個tRC時間,這樣增加了與頁循環相關的最大延遲時間。在這種情況下的有效數據速率很大程度上決定於I/O,並主要受限於DRAM內核電路。最大的庫沖突頻率將有效帶寬削減到當前最高端存儲器技術峰值的20%到30%。
在第二種情況下,每個事務處理都以隨機產生的地址為目標。此時,產生庫沖突的機會取決於很多因素,包括tRC和存儲器內核中庫數量之間的相互作用。tRC值越小,開放頁循環地越快,導致庫沖突的損失越小。此外,存儲器技術具有的庫越多,隨機地址存取庫沖突的機率就越小。
第三種情況,每個事務處理就是一次頁命中,在開放頁中定址不同的列地址。控制器不必訪問關閉頁,允許完全利用匯流排,這樣就得到一種理想的情況,即有效數據速率等於峰值速率。
第一種和第三種情況都涉及到簡單的計算,隨機情況受其他的特性影響,這些特性沒有包括在DRAM或者存儲器介面中。存儲器控制器仲裁和排隊會極大地改善庫沖突頻率,因為更有可能出現不產生沖突的事務處理,而不是那些導致庫沖突的事務處理。
然而,增加存儲器隊列深度未必增加不同存儲器技術之間的相對有效數據速率。例如,即使增加存儲器控制隊列深度,XDR的有效數據速率也比 GDDR3高20%。存在這種增量主要是因為XDR具有更高的庫數量以及更低的tRC值。一般而言,更短的tRC間隔、更多的庫數量以及更大的控制器隊列能產生更高的有效帶寬。
實際上,很多效率限制現象是與行存取粒度相關的問題。tRC約束本質上要求存儲器控制器從新開放的行中存取一定量的數據,以確保數據管線保持充滿。事實上,為保持數據匯流排無中斷地運行,在開放一個行之後,只須讀取很少量的數據,即使不需要額外的數據。
另外一種減少存儲器系統有效帶寬的主要特性被歸類到列存取粒度范疇,它規定了每次讀寫操作必須傳輸的數據量。與之相反,行存取粒度規定每個行激活(一般指每個RAS的CAS操作)需要多少單獨的讀寫操作。列存取粒度對有效數據速率具有不易於量化的巨大影響。因為它規定一個讀或寫操作中需要傳輸的最小數據量,列存取粒度給那些一次只需要很少數據量的系統帶來了問題。例如,一個需要來自兩列各8位元組的16位元組存取粒度系統,必須讀取總共32位元組以存取兩個位置。因為只需要32個位元組中的16個位元組,系統的有效數據速率降低到峰值速率的50%。匯流排帶寬和脈沖時間長度這兩個結構參數規定了存儲器系統的存取粒度。
匯流排帶寬是指連接存儲器控制器和存儲器件之間的數據線數量。它設定最小的存取粒度,因為對於一個指定的存儲器事務處理,每條數據線必須至少傳遞一個數據位。而脈沖時間長度則規定對於指定的事務處理,每條數據線必須傳遞的位數量。每個事務處理中的每條數據線只傳一個數據位的存儲技術,其脈沖時間長度為1。總的列存取粒度很簡單:列存取粒度=匯流排寬度×脈沖時間長度。
很多系統架構僅僅通過增加DRAM器件和存儲匯流排帶寬就能增加存儲系統的可用帶寬。畢竟,如果4個400MHz數據速率的連接可實現 1.6GHz的總峰值帶寬,那麼8個連接將得到3.2GHz。增加一個DRAM器件,電路板上的連線以及ASIC的管腳就會增多,總峰值帶寬相應地倍增。
首要的是,架構師希望完全利用峰值帶寬,這已經達到他們通過物理設計存儲器匯流排所能達到的最大值。具有256位甚或512位存儲匯流排的圖形控制器已並不鮮見,這種控制器需要1,000個,甚至更多的管腳。封裝設計師、ASIC底層規劃工程師以及電路板設計工程師不能找到採用便宜的、商業上可行的方法來對這么多信號進行布線的矽片區域。僅僅增加匯流排寬度來獲得更高的峰值數據速率,會導致因為列存取粒度限制而降低有效帶寬。
假設某個特定存儲技術的脈沖時間長度等於1,對於一個存儲器處理,512位寬系統的存取粒度為512位(或者64位元組)。如果控制器只需要一小段數據,那麼剩下的數據就被浪費掉,這就降低了系統的有效數據速率。例如,只需要存儲系統32位元組數據的控制器將浪費剩餘的32位元組,進而導致有效的數據速率等於50%的峰值速率。這些計算都假定脈沖時間長度為1。隨著存儲器介面數據速率增加的趨勢,大多數新技術的最低脈沖時間長度都大於1。
選擇技巧
存儲器的類型將決定整個嵌入式系統的操作和性能,因此存儲器的選擇是一個非常重要的決策。無論系統是採用電池供電還是由市電供電,應用需求將決定存儲器的類型(易失性或非易失性)以及使用目的(存儲代碼、數據或者兩者兼有)。另外,在選擇過程中,存儲器的尺寸和成本也是需要考慮的重要因素。對於較小的系統,微控制器自帶的存儲器就有可能滿足系統要求,而較大的系統可能要求增加外部存儲器。為嵌入式系統選擇存儲器類型時,需要考慮一些設計參數,包括微控制器的選擇、電壓范圍、電池壽命、讀寫速度、存儲器尺寸、存儲器的特性、擦除/寫入的耐久性以及系統總成本。
選擇存儲器時應遵循的基本原則
1、內部存儲器與外部存儲器
一般情況下,當確定了存儲程序代碼和數據所需要的存儲空間之後,設計工程師將決定是採用內部存儲器還是外部存儲器。通常情況下,內部存儲器的性價比最高但靈活性最低,因此設計工程師必須確定對存儲的需求將來是否會增長,以及是否有某種途徑可以升級到代碼空間更大的微控制器。基於成本考慮,人們通常選擇能滿足應用要求的存儲器容量最小的微控制器,因此在預測代碼規模的時候要必須特別小心,因為代碼規模增大可能要求更換微控制器。目前市場上存在各種規模的外部存儲器器件,我們很容易通過增加存儲器來適應代碼規模的增加。有時這意味著以封裝尺寸相同但容量更大的存儲器替代現有的存儲器,或者在匯流排上增加存儲器。即使微控制器帶有內部存儲器,也可以通過增加外部串列EEPROM或快閃記憶體來滿足系統對非易失性存儲器的需求。
2、引導存儲器
在較大的微控制器系統或基於處理器的系統中,設計工程師可以利用引導代碼進行初始化。應用本身通常決定了是否需要引導代碼,以及是否需要專門的引導存儲器。例如,如果沒有外部的定址匯流排或串列引導介面,通常使用內部存儲器,而不需要專門的引導器件。但在一些沒有內部程序存儲器的系統中,初始化是操作代碼的一部分,因此所有代碼都將駐留在同一個外部程序存儲器中。某些微控制器既有內部存儲器也有外部定址匯流排,在這種情況下,引導代碼將駐留在內部存儲器中,而操作代碼在外部存儲器中。這很可能是最安全的方法,因為改變操作代碼時不會出現意外地修改引導代碼。在所有情況下,引導存儲器都必須是非易失性存儲器。
可以使用任何類型的存儲器來滿足嵌入式系統的要求,但終端應用和總成本要求通常是影響我們做出決策的主要因素。有時,把幾個類型的存儲器結合起來使用能更好地滿足應用系統的要求。例如,一些PDA設計同時使用易失性存儲器和非易失性存儲器作為程序存儲器和數據存儲器。把永久的程序保存在非易失性ROM中,而把由用戶下載的程序和數據存儲在有電池支持的易失性DRAM中。不管選擇哪種存儲器類型,在確定將被用於最終應用系統的存儲器之前,設計工程師必須仔細折中考慮各種設計因素。
⑦ 存儲器的基本結構原理
存儲器單元實際上是時序邏輯電路的一種。按存儲器的使用類型可分為只讀存儲器(ROM)和隨機存取存儲器(RAM),兩者的功能有較大的區別,因此在描述上也有所不同
存儲器是許多存儲單元的集合,按單元號順序排列。每個單元由若干三進制位構成,以表示存儲單元中存放的數值,這種結構和數組的結構非常相似,故在VHDL語言中,通常由數組描述存儲器
結構
存儲器結構在MCS - 51系列單片機中,程序存儲器和數據存儲器互相獨立,物理結構也不相同。程序存儲器為只讀存儲器,數據存儲器為隨機存取存儲器。從物理地址空間看,共有4個存儲地址空間,即片內程序存儲器、片外程序存儲器、片內數據存儲器和片外數據存儲器,I/O介面與外部數據存儲器統一編址
存儲器是用來存儲程序和各種數據信息的記憶部件。存儲器可分為主存儲器(簡稱主存或內存)和輔助存儲器(簡稱輔存或外存)兩大類。和CPU直接交換信息的是主存。
主存的工作方式是按存儲單元的地址存放或讀取各類信息,統稱訪問存儲器。主存中匯集存儲單元的載體稱為存儲體,存儲體中每個單元能夠存放一串二進制碼表示的信息,該信息的總位數稱為一個存儲單元的字長。存儲單元的地址與存儲在其中的信息是一一對應的,單元地址只有一個,固定不變,而存儲在其中的信息是可以更換的。
指示每個單元的二進制編碼稱為地址碼。尋找某個單元時,先要給出它的地址碼。暫存這個地址碼的寄存器叫存儲器地址寄存器(MAR)。為可存放從主存的存儲單元內取出的信息或准備存入某存儲單元的信息,還要設置一個存儲器數據寄存器(MDR)
⑧ 存儲器的工作原理是什麼
動態讀寫存貯器(DRAM),以其速度快、集成度高、功耗小、價格低在微型計算機中得到極其廣泛地使用。但動態存儲器同靜態存儲器有不同的工作原理。它是靠內部寄生電容充放電來記憶信息,電容充有電荷為邏輯1,不充電為邏輯0。欲深入了解動態RAM的基本原理請點擊。 動態存儲器有多種系列,如61系列、37系列、41系列、21系列等。圖示為2164晶元的引腳圖。將滑鼠指向相應引腳可看到其對引腳功能。它是一個64K 1bit的DRAM晶元,將8片並接起來,可以構成64KB的動態存儲器。
每片只有一條輸入數據線,而地址引腳只有8條。為了形成64K地址,必須在系統地址匯流排和晶元地址引線之間專門設計一個地址形成電路。使系統地址匯流排信號能分時地加到8個地址的引腳上,藉助晶元內部的行鎖存器、列鎖存器和解碼電路選定晶元內的存儲單元,鎖存信號也靠著外部地址電路產生。
當要從DRAM晶元中讀出數據時,CPU 首先將行地址加在A0-A7上,而後送出RAS 鎖存信號,該信號的下降沿將地址鎖存在晶元內部。接著將列地址加到晶元的A0-A7上,再送CAS鎖存信號,也是在信號的下降沿將列地址鎖存在晶元內部。然後保持WE=1,則在CAS有效期間數據輸出並保持。
當需要把數據寫入晶元時,行列地址先後將RAS和CAS鎖存在晶元內部,然後,WE有效,加上要寫入的數據,則將該數據寫入選中的存貯單元。
由於電容不可能長期保持電荷不變,必須定時對動態存儲電路的各存儲單元執行重讀操作,以保持電荷穩定,這個過程稱為動態存儲器刷新。PC/XT機中DRAM的刷新是利用DMA實現的。首先應用可編程定時器8253的計數器1,每隔1⒌12μs產生一次DMA請求,該請求加在DMA控制器的0通道上。當DMA控制器0通道的請求得到響應時,DMA控制 器送出到刷新地址信號,對動態存儲器執行讀操作,每讀一次刷新一行。
只讀存貯器(ROM)有多種類型。由於EPROM和EEPROM存貯容量大,可多次擦除後重新對它進行編程而寫入新的內容,使用十分方便。尤其是廠家為用戶提供了單獨地擦除器、編程器或插在各種微型機上的編程卡,大大方便了用戶。因此,這種類型的只讀存貯器得到了極其廣泛的應用。7. RAM的工作時序
為保證存儲器准確無誤地工作,加到存儲器上的地址、數據和控制信號必須遵守幾個時間邊界條件。
圖7.1—3示出了RAM讀出過程的定時關系。讀出操作過程如下:
欲讀出單元的地址加到存儲器的地址輸入端;
加入有效的選片信號CS;
在 線上加高電平,經過一段延時後,所選擇單元的內容出現在I/O端;
讓選片信號CS無效,I/O端呈高阻態,本次讀出過程結束。
由於地址緩沖器、解碼器及輸入/輸出電路存在延時,在地址信號加到存儲器上之後,必須等待一段時間tAA,數據才能穩定地傳輸到數據輸出端,這段時間稱為地址存取時間。如果在RAM的地址輸入端已經有穩定地址的條件下,加入選片信號,從選片信號有效到數據穩定輸出,這段時間間隔記為tACS。顯然在進行存儲器讀操作時,只有在地址和選片信號加入,且分別等待tAA和tACS以後,被讀單元的內容才能穩定地出現在數據輸出端,這兩個條件必須同時滿足。圖中tRC為讀周期,他表示該晶元連續進行兩次讀操作必須的時間間隔。
寫操作的定時波形如圖7.1—4所示。寫操作過程如下:
將欲寫入單元的地址加到存儲器的地址輸入端;
在選片信號CS端加上有效電平,使RAM選通;
將待寫入的數據加到數據輸入端;
在 線上加入低電平,進入寫工作狀態;
使選片信號無效,數據輸入線回到高阻狀態。
由於地址改變時,新地址的穩定需要經過一段時間,如果在這段時間內加入寫控制信號(即 變低),就可能將數據錯誤地寫入其他單元。為防止這種情況出現,在寫控制信號有效前,地址必須穩定一段時間tAS,這段時間稱為地址建立時間。同時在寫信號失效後,地址信號至少還要維持一段寫恢復時間tWR。為了保證速度最慢的存儲器晶元的寫入,寫信號有效的時間不得小於寫脈沖寬度tWP。此外,對於寫入的數據,應在寫信號tDW時間內保持穩定,且在寫信號失效後繼續保持tDH時間。在時序圖中還給出了寫周期tWC,它反應了連續進行兩次寫操作所需要的最小時間間隔。對大多數靜態半導體存儲器來說,讀周期和寫周期是相等的,一般為十幾到幾十ns。
ddr一個時鍾周期內穿2次數據
ddr2一個時鍾周期傳4次
所以相同頻率下ddr2的帶寬是ddr的2倍
⑨ 存儲器的工作原理
這里只介紹動態存儲器(DRAM)的工作原理。
動態存儲器每片只有一條輸入數據線,而地址引腳只有8條。為了形成64K地址,必須在系統地址匯流排和晶元地址引線之間專門設計一個地址形成電路。使系統地址匯流排信號能分時地加到8個地址的引腳上,藉助晶元內部的行鎖存器、列鎖存器和解碼電路選定晶元內的存儲單元,鎖存信號也靠著外部地址電路產生。
當要從DRAM晶元中讀出數據時,CPU首先將行地址加在A0-A7上,而後送出RAS鎖存信號,該信號的下降沿將地址鎖存在晶元內部。接著將列地址加到晶元的A0-A7上,再送CAS鎖存信號,也是在信號的下降沿將列地址鎖存在晶元內部。然後保持WE=1,則在CAS有效期間數據輸出並保持。
當需要把數據寫入晶元時,行列地址先後將RAS和CAS鎖存在晶元內部,然後,WE有效,加上要寫入的數據,則將該數據寫入選中的存貯單元。
由於電容不可能長期保持電荷不變,必須定時對動態存儲電路的各存儲單元執行重讀操作,以保持電荷穩定,這個過程稱為動態存儲器刷新。PC/XT機中DRAM的刷新是利用DMA實現的。首先應用可編程定時器8253的計數器1,每隔1⒌12μs產生一次DMA請求,該請求加在DMA控制器的0通道上。當DMA控制器0通道的請求得到響應時,DMA控制器送出到刷新地址信號,對動態存儲器執行讀操作,每讀一次刷新一行。