SDRAM的所有操作同步與時鍾。根據時鍾上升沿控制管腳和地址輸入的狀態,可以產生多種輸入命令。
SDRAM的初始化
SDRAM的初始化過程如上圖,但是要具體到操作,還要更具體的來講:
(1)200US的延時,只要用一個時鍾計數器,等待期間發送NOP命令即可;
(2)所有L-BANK的預充電,根據我看到的資料,說只要給出一個預充電的命令,保持一個時鍾周期即可,然后
再回到空操作的命令(NO Operation);
(3)8個刷新周期,第個刷新周期大約為6個時鍾周期,有的資料也說是9個周期,所以在發出刷新的命令后要等待
6個時鍾周期,期間回到空操作狀態,然后再次刷新;
(4)模式寄存器的設置(MRS),
以上為模式寄存器設置的設置碼,設置好即可,等待一兩個時鍾周期。下圖為HY57V641620HG中對模式
寄存器設置后,等待時鍾的要求,為一個或兩個時鍾,
SDRAM讀寫操作
初始化之后就進入了讀寫操作狀態,無論是讀還是寫都要先寫入行有效命令。
(1)寫入行有效命令,
從上圖我們可以看出,行有效的寫入與CS和L-Bank的地址線信號是同時寫入的,同時,寫信號
為高電平。
(2)tRCD延時
在寫入行有效和列有效之間,要有一段延稱之為tRCD延時(#RAC to #CAS Delay),這是根據
芯片存儲陣列電子元件響應時間(從一種狀態到另一種狀態的變化過程)所制定的延時。在延時期間發
送空操作命令。如下圖;
上圖為HY57V641620HG芯片資料里給出tRCD延時參數。
(3)讀寫操作
經過tRCD延時之后,就開始讀寫操作了。下圖為讀寫操作過程,只是#WE不同而已,讀寫操作命令和
地址信號同時發出。
(4)只是在CAS命令發出后,仍要經過一定時間才能有數據輸出,這段時間被定義為CL(CAS Latency
CAS潛伏期),由於CL只在讀取時出現,所以CL又被稱為讀取潛伏期。(CL又分成兩部分,一是CAS觸發后,在存儲體
中晶體管的反應時間會造成數據不會與CAS在同一上升沿觸發,肯定要延后至少一個時鍾周期;二是數據觸發后傳向S-AMP
但要經過一段准備時間才能保證信號的發送強度,也需要一個周期,這段時間被稱為tAC(Access Time from CLK,時鍾
觸發后的訪問時間))所以在發出讀操作命令之后,還要有一個延時,如下圖
(5)在讀完之后要進行預充電,即要等待tRP時間,下圖為HY57V641620HG芯片資料里給出tRP延時參數
(6)在數據寫入SDRAM之后,也要有一個延時,再預充電,下下圖為HY57V641620HG芯片資料里給出
數據寫入之后和預充電的延時。此后才能再輸入其它的命令。
(7)自刷新的處理,SDRAM公認每64ms要刷新一次,而64M的SDRAM共有4096行,那么64ms/4096約
為15us,即每15us刷新一行,在這里的刷新的初始化的刷新是一樣延時。
除了自刷新命令外,所有命令都是默認CKE有效。
行激活命令選擇處於空閑狀態存儲體的任意一個行,使之進入准備讀/寫狀態。從體激活
到允許輸入讀/寫命令的間隔時鍾節拍數取決於內部特征延時和時鍾頻率。
2---預充電
在進行完讀寫之后,如果要對同一L—BANK的另一行進行尋址,就要將原來有效的行關閉。
重新發送行/列地址,L—BANK關閉現有的工作行,准備打開新行的操作就是預充電,預充電命
令可以作用於單個體也可以作用於所有體(通過所有體預充電命令)對於猝發寫操作必須保證在
寫入預充電命令前,寫操作已經完成。並使用DQM禁繼續寫入數據。
自:預充電是在打開新的行之前的操作,在發出預充電命令之后,要經過一段時間才能 允許發送RAS
行有效命令打開新的工作行,這個間隔被稱為tRP(Precharge command Period,預充電有效周期)
3---自動預充電
如果在猝發讀或猝發寫命令中,A10/AP位置為“1”,在猝發讀寫操作完成后自動附加一個預
充電動作。
4----猝發讀
猝發讀命令允許某個體中的一行被激活后,連續讀出若干個數據。第一個數據會在指定的CAS延時節拍后
出現在數據線上,這個指定的節拍就是CAS的潛伏期(CL),以后個時鍾節拍最會輸出一個新的數據。猝發讀操
作結束后數據總線呈高阻態,可以在適當的節拍上再次發出猝發讀命令使數據線上保持沒有空隙。猝發讀
操作可以被同體或不同體的新的猝發讀/寫命令或同一體的預充電命令及猝發停止命令中止。
上圖指定CL為2,BL為4。
5---猝發寫
與猝發讀命令類似,第一個寫數據與猝發寫命令同時在數據線給出,以后每個時鍾節拍給出一個新的數據,
輸入緩沖在猝發數據量滿足要求后停止接受數據。猝發寫操作可以被猝發讀/寫命令或DQM數據輸入屏蔽命令和
預充電命令或猝發停止命令中止。
6---寫命令
列尋址信號與寫命令是同時發出的。WE有效時,就是寫命令。
7---讀命令
讀取命令與列地址一塊發出,WE#無效時,就是讀命令,
在發送列讀寫命令時必須要與行有效命令有一個間隔 ,這個間隔被定義為tRCD,即RAS to CAS Delay
以時鍾周期數為單位。在CAS命令發出后,仍要經過一定時間才能有數據輸出,這段時間被定義為CL(CAS Latency
CAS潛伏期),由於CL只在讀取時出現,所以CL又被稱為讀取潛伏期。(CL又分成兩部分,一是CAS觸發后,在存儲體
中晶體管的反應時間會造成數據不會與CAS在同一上升沿觸發,肯定要延后至少一個時鍾周期;二是數據觸發后傳向S-AMP
但要經過一段准備時間才能保證信號的發送強度,也需要一個周期,這段時間被稱為tAC(Access Time from CLK,時鍾
觸發后的訪問時間))
8---數據輸入
數據寫入的操作也是在tRCD之后進行的,但此時沒有CL,數據信號由控制端發出,輸入時芯片無需做任何調校,可以與CAS
同時發送,即寫入延時為0,不過,數據並不是即時地寫入存儲電容,因為選通三極管(和讀時一樣)與電容的充電必須有一段
時間,所以數據的真正寫入需要一定的周期,這段時間就是寫回周期(tWR)同時也因為寫回周期的存在,使預充電操作延后
。
9---刷新操作
刷新操作與預充電中重寫的操作是一樣的,都是用S-AMP先讀再寫。但因為預充電是對一個或所有L-BANK中的工作行操作,並且
是不定期的,而刷新則是有固定的周期,依次對所有行進行操作,保留那些久久沒經歷重寫的存儲體中的數據。但與所有L-BANK
預充電不同的是,這里的行是指所有L-BANK中地址相同的行,而預充電中各L-BANK中的工作行地址並不是一定是相同的。
刷新分為自動刷新AR和自我刷新SR,不論是何種刷新方式,都不需要外部提供行地址信息,因為這是一個內部的自動操作。
10---數據掩膜(Data I/O Mask 簡稱DQM)
通過DQM,內在可以控制I/O端口取消哪些輸出或輸入的數據。在讀取時,被屏蔽的數據仍然會從存儲體傳出,只是在“掩碼邏輯單元”
處被屏蔽,在讀取時DQM發出兩個時鍾周期后生效,而在寫入時,DQM與寫入命令一樣是立即生效。
讀取時數據掩碼操作,DQM在兩個周期后生效,突發周期的第二筆數據被取消。
當DQM為高電平時有效,猝發周期的第二筆數據被取消。
(參考:高手進階,終極內在技術指南——完整進階版)
**************************************************************************************
**************************************************************************************
1、模式寄存器設置(MRS)
SDRAM上有一個模式寄存器,用戶通過它來設置突發長度、突發類型,讀潛伏期。上電后必須對它進行設置來初始化器件,
這個命令只有在所有的bank都處於空閑時才可以發送,且CKE在該命令發送之前,必須至少保持一個時鍾周期的高電平。這
個命令的發送是在RAS、CAS、CS、WE為低電時鍾的上長沿觸發,
且數據口設置為輸入。數據寫入模式寄存器需要兩個時鍾,這寫時間任何命令都不能被發送。
注:所有的bank
2、行有效
空閑bank的任意一行都可以通過一個激活命令來激活。激活命令的初始化是通過激活CS,RAS
和使CAS、WE無效,並和bank地址和行地址在同一個時鍾的上升沿觸發。一旦一個行有效命令
被發送到對應所選擇的bank的地址,被選的bank離開空閑狀態,進入行有效狀態,於是,行地址
被鎖存,對應的行被選擇,行內的數據被選定並被送到讀出放大器,用作以后的讀寫操作。再經過
最少的tRCD時間的延時后,突發讀/寫命令才能被發送,不同的BANK可以同時被激活。當激活另
一個BANK時,需要最小的tRRD延時。如果一個BANK已經激活就不能再發送行激活命令,同樣,
如果SDRAM處在掉電模式、自刷新、自動刷新狀態(tRC),和時鍾懸浮狀態行激活命令也不能被發送。
讀BANK
這個命令用來對激活的行進行突發讀數據,這個命令的開始時通過激活CS,CAS(拉低),並把
WE拉高,在時鍾的上升沿觸發的,經過CAS潛伏期后,數據開始有效,突發長度和潛伏期是在模式寄
存器中設置的,突發讀可以由突發停止命令來控制,在突發長度的末尾,數據輸出會變為高阻,並且BANK
會重新行有效狀態。
寫BANK
寫命令是把CS、CAS和WE拉低,並賦上列地址,在同一時鍾的上升沿觸發,第一個數據可以和寫命令
和列地址在同一時鍾鍾被輸入,突發寫長度也是在MRS中設置的。
預充電(PRECHARGE)
這個命令是通過邏輯塊地址對邏輯塊進行預充電,預充電過程是把#CS,#RAS,#WE拉低,同時把AP和塊地址一起送出,
當AP為高時,所有的BANK通過預充電命令進行充電;當AP為低時,
只有被塊地址選中的邏輯塊進行預充電。在預充電命令被發出后,需要經過最小的tRP延時之后,
才能再次激活邏輯塊。經過tRP延時之后,邏輯塊進行空閑狀態。
注:在突發寫之后,要經過tDPL延時才能執行,預充電命令,當·#CAS潛伏期為2和3時,
tDPL = 1CLK;
自動預充電(AUTO PRECHARGE)
自動預充電是給激活的邏輯塊進行充電,並且不需要預充電命令,一個讀/寫與自動預刷新是在
一個tRAS周期之內完成的。自動預刷新是和讀/寫命令在同一個時鍾的上升沿發送的。如果讀/
寫伴隨AP為高電平,那么在一個讀/寫周期后邏輯塊將進入空閑狀態。伴隨有自動預刷新的讀/寫
是不能被另一個讀/寫、預充電和突發停止命令所終止的。所以在伴有自動刷新的讀寫期間這些
命令是禁止的。
刷新操作分為兩種:自動刷新(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有效才能退出自刷新模式並進入正常操作狀態。