SDRAM 學習(三)之command

 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設計中有不少細節,數據手冊仍是要多看看,每看一遍感受都是不同的。

學習的過程當中沒人交流,只能靠本身從網上搜、各類嘗試,雖然很艱難,仍是挺開心的。

以上都是我本身的理解,若是有大神發現問題,還請指出,本女子感激涕零!

 

 

原文連接:http://www.cnblogs.com/aslmer/p/6031921.html  

相關文章
相關標籤/搜索