本篇博文非原創,是整理了網上的各家之言與一體,為自己以后方便查詢所用。如有冒犯請告之。
1.Precharge與Refresh的區別?
plj:兩者都是對存儲單元的電容進行充電、回寫。但差異在於:
Precharge是對(一個或所有Bank)的所有工作行(active row)操作,並且是隨機的,被操作工作行的地址在各Bank中不一相同。
Refresh是對所有行依次操作,且是有固定周期的,被操作行在各Bank中均相同。
2.AutoRefresh與SelfRefresh的區別?
plj:AutoRefresh是user依照指定周期發給芯片的刷新命令
SelfRefresh是芯片內部邏輯發給自己的刷新命令
無論何種Refresh均不需要提供地址,它是芯片內部的自動操作。
3.R/W帶與不帶Auto Precharge的區別?
plj:帶AutoPrecharge時:在R時,芯片自動在(最后一個有效輸出數據)前(CL-1)個時鍾時產生Precharge命令。
在W時,芯片自動在(最后一個有效輸出數據)后(Twr)時間產生Precharge命令。
不帶AutoPrecharge時,需要user在上述時刻自己產生Precharge命令。
4.CL參數只有效於Read操作。
5. 每個Bank中只能有一個Row處於active狀態,且可以進行R/W。
如果想操作同Bank中的另外一個Row,必須使用Precharge關閉當前工作Row,然后再active目的Row,這樣才能R/W
6. 每個Bank均active一個Row,依次在各個Bank間操作Row,這樣避免R/W時消耗的多余時鍾周期,可以提高數據傳輸帶寬
1.正常Read時的Precharge
Auto_Precharge和手動Precharge都在最后一個有效數據(LVD)前CL-1個時鍾上升沿發出
2. 手動Precharge終結Read
手動Precharge在最后一個有效數據(LVD)前CL-1個時鍾上升沿發出
3.手動Burst Terminate終結Read
Burst Terminate在最后一個有效數據(LVD)前CL-1個時鍾上升沿發出
4.正常Write時的Precharge
Auto_Precharge和手動Precharge都在最后一個有效數據(LVD)后tWR/tDPL時間的時鍾上升沿發出
5. 手動Precharge終結Write
手動Precharge在最后一個有效數據(LVD)后tWR/tDP時間的時鍾上升沿發出
或者在Precharge同時使能DQM屏蔽掉同時刻寫入的數據
6.手動Burst Terminate終結Write
Burst Terminate在最后一個有效數據(LVD)后1個時鍾上升沿發出
7.Burst Terminate與手動Precharge在終結Read/Write中的區別?
帶AutoPrecharge的R/W過程中,禁止使用BT和手動Precharge命令。
Burst Terminate適用於 全頁R/W、不帶AutoPrecharge的突發R/W
1.SDRAM的burst mode
SDRAM是一種命令型動作的設備,就算讀寫資料只有一個也要先下命令才可以用,為了增加工作效率,就產生了一種傳送一個命令,寫多個數據的模式,這就是burst mode。
burst mode是一種利用內部列地址發生器來工作的高速讀寫模式,只要設置最開始的列地址,后面的地址就可以通過內部的列地址發生器來自動生成。
2.為什么要做precharge動作?
關閉正在作用的SDRAM bank,算是一種結束命令,后面可以下新的命令。我想這是和SDRAM內部管理有關。(這是從網上查到的,感覺不夠詳細,也不太理解)
3.自動刷新功能?
動態存儲器(Dynamic RAM)都存在刷新問題。這里主要采用自動刷新方式,每隔一段時間向SDRAM發一條刷新命令。
4.SDRAM的地址線
在我們一般用的什么SRAM啊,PSRAM啊,RAM啊,一般而言都是有多少根地址線,然后可以算出尋址空間,比如有11根地址線,那尋址空間就是2的11次方減1。但是SDRAM是分列地址和行地址的,行、列地址線是復用的,所以有時候我們看到說尋址空間有多大多大,但是看看地址線怎么就那么幾根啊,呵呵。SDRAM一般還有2根BANK的線,分成4個BANK,在有的處理器的SDRAM控制模塊中,這兩根線可能映射到地址線的某兩根去。一般芯片常按照以下方式寫芯片的配置,比如4Meg x 4 x 16,那這個芯片就是256Mbits。其中16指數據線是16根,中間一個4是只分4個BANK, 每個BANK是4Meg。
5.SDRAM的初始化
SDRAM上電后使用前必須要經過一段初始化操作才可以使用。這個操作過程是標准的過程。這個過程如下
- precharge
- auto-refresh
- Load Mode Register
- Normal Read/Write
在上電后輸入初始化命令之前,最少要100us延遲(這個其實很容易滿足,呵呵)。
在輸入precharge命令后,因為必須是對所有BANK進行Precharge,所以A10這個管腳要設置成高,因此在Precharge后面要做一個讀的操作,這個操作最主要的是在SDRAM的尋址空間里設置的地址必須是A10是高的。
在輸入Auto-refresh命令后,一般要跟幾句空操作或者讀什么之類的,反正要達到延遲的目的,以使得SDRAM有時間來完成refresh。
之后就是要設置SDRAM的模式寄存器,這個寄存器里一般設置了burst長度,CAS,burst類型,操作模式,還有是設置SDRAM是工作在單個讀寫操作還是burst操作下。而這個寄存器的設置也是通過地址線來設置的,所以在發出Load Mode Register命令后要做一個操作可是使得在SDRAM的地址線上出線的值就是你要設置的值。這里很有必要提醒的一下的是,這個操作是8位的操作,切記切記。
設置完模式寄存器后就進入正常操作模式。
實際上具體的操作要跟選用的處理器的SDRAM控制模塊相結合來設置。對於這些初始化命令比較直觀的理解就是拿邏輯分析儀來分析。
在這里需要提醒一下CAS這個參數很重要。還有SDRAM必須要刷新的,因此刷新頻率可以按照手冊算出來的,但是設置的高一點也是可以的。常常SDRAM都有工作頻率,但是也可以工作在低一點的頻率上,比如PC133的,你工作到100也是可以的,設置基本不需要修改。
6.基本讀寫操作
SDRAM的基本讀操作需要控制線和地址線相配合地發出一系列命令來完成。先發出BANK激活命令(ACTIVE),並鎖存相應的BANK地址(BA0、BA1給出)和行地址(A0~A12給出)。BANK激活命令后必須等待大於tRCD(SDRAM的RAS到CAS的延遲指標)時間后,發出讀命令字。CL(CAS延遲值)個工作時鍾后,讀出數據依次出現在數據總線上。在讀操作的最后,要向SDRAM發出預充電(PRECHARGE)命令,以關閉已經激活的頁。等待tRP時間(PRECHARGE)命令,以關閉已經激活的頁。等待tRP時間(PRECHAREG命令后,相隔tRP時間,才可再次訪問該行)后,可以開始下一次的讀、寫操作。SDRAM的讀操作只有突發模式(Burst Mode),突發長度為1、2、4、8可選。
SDRAM的基本寫操作也需要控制線和地址線相配合地發出一系列命令來完成。先發出BANK激活命令(ACTIVE),並鎖存相應的BANK地址(BA0、BA1給出)和行地址(A0~A12給出)。BANK激活命令后必須等待大於tRCD的時間后,發出寫命令字。寫命令可以立即寫入,需寫入數據依次送到DQ(數據線)上。在最后一個數據寫入后延遲tWR時間。發出預充電命令,關閉已經激活的頁。等待tRP時間后,可以展開下一次操作。寫操作可以有突發寫和非突發寫兩種。突發長度同讀操作。
7.其他
我們有時候看到有的原理圖上數據線有倒過來接的,其實這個無所謂的,反過接,寫進去的就是反的,但是讀出又反了一下,反反兩次正好沒反。
延伸一下到DDR,其實DDR就是SDRAM外面加了一個烏龜殼。因此初始化是一樣的。當然DDR一是多了一個把時鍾頻率反相的時鍾,因此有2個相位差180度的時鍾。這兩個一般都是用同一個時鍾源產生,一致性會比較好。還有多了2個DQS,這個也是一個時序要求,一般CPU的控制模塊都有設置好了。如果你使用的CPU不含有控制模塊,那用FPGA去做一個控制模塊的話,那就要好好研究時序了。
在有些處理器的控制模塊中,由於EMI的設置,地址線映射關系復雜,因此推算會比較麻煩,一般如果沒有什么映射的話,還是很容易操作的。
刷新操作分為兩種:自動刷新(Auto Refresh,簡稱AR)與自刷新(Self Refresh,簡稱SR)。不論是何種刷新方式,都不需要外部提供行地址信息,因為這是一個內部的自動操作。
對於AR, SDRAM內部有一個行地址生成器(也稱刷新計數器)用來自動的依次生成行地址。由於刷新是針對一行中的所有存儲體進行,所以無需列尋址,或者說CAS在RAS之前有效。所以,AR又稱CBR(CAS Before RAS,列提前於行定位)式刷新。由於刷新涉及到所有L-Bank,因此在刷新過程中,所有L-Bank都停止工作,而每次刷新所占用的時間為9個時鍾周期(PC133標准),之后就可進入正常的工作狀態,也就是說在這9 個時鍾期間內,所有工作指令只能等待而無法執行。64ms之后則再次對同一行進行刷新,如此周而復始進行循環刷新。顯然,刷新操作肯定會對SDRAM的性能造成影響,但這是沒辦法的事情,也是DRAM相對於SRAM(靜態內存,無需刷新仍能保留數據)取得成本優勢的同時所付出的代價。
SR則主要用於休眠模式低功耗狀態下的數據保存,這方面最著名的應用就是STR(Suspend to RAM,休眠掛起於內存)。在發出AR命令時,將CKE置於無效狀態,就進入了SR模式,此時不再依靠系統時鍾工作,而是根據內部的時鍾進行刷新操作。在SR期間除了CKE之外的所有外部信號都是無效的(無需外部提供刷新指令),只有重新使CKE有效才能退出自刷新模式並進入正常操作狀態。