command 模塊總述html
SDRAM 的 command 模塊的內容包括以下:學習
一、對初始化請求、配置模式寄存器、讀/寫、刷新、預充電等命令的一個優先級的控制。spa
二、對命令執行時間進行控制,依據如圖1,紅圈框起來的都是最小值。設計
圖13d
三、將相應的命令進行解碼即轉化成相應的控制總線,轉化依據如圖2:htm
圖2blog
代碼詳解接口
如下代碼都是我經過學習別人的代碼,而後按照我本身的理解修改後的,通過驗證是正確的。內存
一、SDRAM 重要的參數get
SDRAM 的容量爲 4 * 1 M* 16 bit , 一共有 4 個 bank , 每一個 bank 爲 12 行、8列。 本次設計 SDRAM 爲 順序的突發讀寫模式、TCAS=3,TCL=3 。
咱們將這些參數定義到 parameter.h 模塊中,而後經過 `include "parameter.h" 在其餘文件中調用這個文件,具體以下。
在command.v 中調用該文件。
圖2
二、command.v 模塊接口
三、命令的優先級,
(1) SDRAM在每一刻只有一個指令在執行;
(2) 先到的指令先執行,即:若是刷新請求到來時,其它命令正在執行中,要等到當前命令執行完成後,才能執行刷新指令;
(3) 其它指令和刷新請求同時到來時刷新操做先執行。
命令優先級代碼:
初始化命令,能夠和上面的代碼融合爲1個代碼。
四、命令執行的延時控制
通過優先級判斷後,要把指令解碼成可控制SDRAM的信號,同時還要用三個移位寄存器對命令執行的延遲時間進行控制。第一個爲指令延時寄存器,用來保證SDRAM有充足時間完成最終指令。例如,若是命令的執行須要9個時鐘週期的時間(高手進階—終極內存計數指南中說刷新須要9個時鐘週期),則指令延時寄存器command_delay的初值設爲 8 個 1 即「11111111」,同時聲明一個內部信號command_done,做爲指令執行完成的標誌的。在指令執行期間,每個時鐘上升沿到來時,移位寄存器向右移位一次,command_delay[0]的移入command_done,同時「0」 移入最高位command_delay[7]。當command_done爲「0」時,就說明指令的延遲時間已到,即經過command_done的值,就能夠判斷當前指令是否執行完成。要注意的是:移位寄存器的位數和初值,應該根據SDRAM的數據手冊中命令完成須要的時間和系統的時鐘週期來肯定。
觀察 圖1 給出的數據手冊內容得知,命令執行時間最長的是刷新命令至少63ns,咱們時鐘是100Mhz,至少須要7個時鐘週期,所以設置爲''11111111"是合適的,而對於更高工做頻率的SDRAM則須要更多的時鐘週期,只要知足數據手冊要求就行了。
下面我將畫出command_delay = 2‘b11 的時序圖,以便理解。
代碼:
當輸入的指令爲writea和reada指令,行激活到列激活必須知足的時間 TRCD。因此,聲明第二個移位寄存器rw_shift,來計算這兩個指令的附加時間,其工做原理和第一個移位寄存器是同樣的。數據通道oe,即數據輸入、輸出使能信號。對於非頁模式的讀寫來講,oe保持有效的時間取決於突發長度。而且oe有效的起始時間對讀操做和寫操做時不一樣的:讀操做時,oe有效的起始時間取決於CAS延時時間,而對於寫操做時則在寫指令開始時oe就是有效的。
刷新、讀、寫命令還須要一個延時,緣由以下(這都是我本身的理解還請大神指點)
對於非全頁模式,延遲完 9 個時鐘週期後繼續延時 5 個時鐘週期保證命令有充足的時間執行完畢我是這樣理解的,對於非全頁模式的讀來說,須要的最大時間爲
TRCD(3)+TCL(3)+8(突發長度爲8) = 14個時鐘週期。
對於全頁模式則當一頁數據傳輸完成後再延遲 5 個時鐘週期,對於全頁模式的讀操做,Burst_STOP命令發出後,數據不是馬上中止,而是與CL有關,所以須要保護這些數據,進行一個延遲。
全頁模式下ex_write、ex_read 有效時,即正在進行全頁數據傳輸過程當中,當PM_STOP指令來時,則爲0,
四、命令解碼,將命令轉化成控制信號的具體數值。
其中(do_reada| do_writea) 是指行激活
do_rw 是列激活
do_rw =1爲讀激活,do_rw =0 爲寫激活。
片選信號
五、行列地址、bank地址
將總地址的值分開,與 SDRAM 的重要參數保持一致
行列參數,行和列地址共用數據總線
當是單獨的預刷新命令,SA[10]=1是指全部bank預充電
當是do_rwdo_rw==1列激活,SA[10] =1表明執行完讀寫操做就自動刷新,SA[10]=0 的含義則反之,
這裏須要注意的是全頁模式不能設置自動刷新,即不能在全頁模式讀寫完之後自動啓動預刷新。
bank地址
這些都是比較重要的,簡單分析作個總結怕本身忘記。SDRAM設計中有不少細節,數據手冊仍是要多看看,每看一遍感受都是不同的。
學習的過程當中沒人交流,只能靠本身從網上搜、各類嘗試,雖然很艱難,仍是挺開心的。
以上都是我本身的理解,若是有大神發現問題,還請指出,本女子感激涕零!