FPGA的SDRAM操作


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有效才能退出自刷新模式並進入正常操作狀態。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM