SDRAM設計之讀 寫(三)

2021-10-12 05:31:43 字數 1561 閱讀 1151

本篇來記錄下,sdram的讀、寫過程,sdram(同步動態隨機訪問記憶體),所謂的「隨機」,便是指我們每次讀、寫的位址可以是設計者指定的位置。sdram一般結構都會分為幾個bank,每個bank中分成行、列式來管理,使用者可以指定將寫入或者讀出哪個bank、哪一行、哪一列的資料。

以美光的一款sdram mt48lc16m16a2為例,這款晶元共有4個bank,每個bank分成8192行和512列,每個位址可以儲存16bit的資料。

讀、寫的時序過程是非常相似的,先來看下寫入的時序圖:

上圖是突發寫入的一段時序,其實寫入sdram有多種不同的模式,比如說可以單個單個地寫入,也可以使用full page寫入,也可以像上圖那樣突發寫入幾個資料,寫入的資料個數是由我們初始化的時候設定的模式暫存器決定的。

上圖中也有乙個小細節,"write-without auto percharge "當然同時對應的就有"write-with auto percharge ",不同之處呢就在於第一種需要我們在寫操作流程的某個時間(具體時間各種款式的晶元不大一樣)執行一次precharge命令,我一般習慣於在我要寫的資料結束後,滿足twr的情況下,給出precharge命令,當然具體的程式編寫,我會在後面的筆記中詳細說明。

第二種顧名思義的話,就是說整個寫流程中不需要我們手動給出precharge命令,sdram本身會自動進行perecharge。這裡值得思考的是,使用哪種方式寫入,這兩種寫入方式有什麼區別,比如我們做乙個設計,如何決定使用哪種寫入方式…

廢話太多了,來看一下寫時序步驟:

首先執行一次active 命令,同時對位址匯流排a0~a12,bank匯流排複製,設定要寫入資料的bank位址和row(行)位址;

trcd後,給出wrtie命令,同時對位址匯流排a0-a8,進行操作設定要寫入資料的col(列位址),設定a10bit位,設定是否需要自動precharge,與此同時要寫入的第乙個資料也可以給到sdram的資料匯流排了。

依次將待寫入的資料放置到資料匯流排上;

等待twr時間,給出precharge命令;

等待trp時間之後,本次寫入操作就完成了,就可以進行別的操作了;

注:在不要給出特定的命令的時候,需要給出nop命令。

讀操作的過程和寫十分相似,唯一要注意的就是從讀命令給出到資料被sdram將資料放到資料匯流排上,是需要時間的,這個就是我們在模式暫存器設定中設定的潛伏週期,下圖是讀的時序過程:

至此,sdram的幾個核心操作:初始化,重新整理,讀,寫,便簡單介紹完了,但是光知道這些過程是遠遠不夠的,我們需要將這些操作真正運用到sdram上,後面幾篇文章將主要介紹基於fpga的sdram控制器的設計,對於這個控制器來說,我們主要解決的就是重新整理和讀寫之間的排程問題,因為sdram需要不停的進行重新整理,當我們需要寫入或者讀出資料的時候,sdram正在重新整理怎麼辦,當我們寫入或者讀出還沒完成的時候,需要進行重新整理操作了該怎麼辦,這些將會在後面幾篇文章中詳細介紹。

文中如有不當之處,請大家多多指點。。。

SDRAM設計之重新整理(二)

今天來聊一聊關於sdram的重新整理操作,sdram的全稱 同步動態隨機訪問記憶體 synchronous dynamic random access memory 動態就體現於sdram晶元需要每隔特定的時間就需要進行一次重新整理操作,用於保證已經被寫入的資料不丟失。由此可以發現,重新整理操作是很...

SDRAM突發讀寫注意

最近的專案需要在設計乙個sdram控制器,用於儲存一段取樣資料,然後等待上位機下發指令,把資料上報。採用連續突發讀寫模式bl為4,時鐘50mhz。sdram器件型號為mt48lc16m16a2。4m 16 4banks 從上面的資訊我們可以了解到,該sdram的資料匯流排為16bit,行位址有13根...

基於FPGA的SDRAM設計 SDRAM的初始化

基於fpga的sdram設計 sdram的初始化 先引乙個圖說明一下sdram的初始化過程吧,這樣來的直觀一些 這便是sdram在開機時的初始化過程,上電後要有200us的輸入穩定期,在這個時間內不可以對sdram的介面做任何操作 200us以後就是要對所有l bank預充電,再往後給sdram 8...