SDRAM 學習(三)之command


 command 模塊總述

SDRAM 的 command 模塊的內容包括如下:

1、對初始化請求、配置模式寄存器、讀/寫、刷新、預充電等命令的一個優先級的控制。

2、對命令執行時間進行控制,依據如圖1,紅圈框起來的都是最小值。

                                    圖1

3、將相應的命令進行解碼即轉化成相應的控制總線,轉化依據如圖2:

                                 圖2


 

代碼詳解

以下代碼都是我通過學習別人的代碼,然后按照我自己的理解修改后的,經過驗證是正確的。

1、SDRAM 重要的參數

SDRAM 的容量為 4 * 1 M* 16 bit , 一共有 4 個 bank , 每個 bank 為 12 行、8列。 本次設計 SDRAM 為 順序的突發讀寫模式、TCAS=3,TCL=3 。

我們將這些參數定義到 parameter.h 模塊中,然后通過 `include "parameter.h" 在其他文件中調用這個文件,具體如下。

在command.v 中調用該文件。

                                        圖2

 2、command.v 模塊接口

 

3、命令的優先級

(1) SDRAM在每一刻只有一個指令在執行;

(2) 先到的指令先執行,即:如果刷新請求到來時,其它命令正在執行中,要等到當前命令執行完成后,才能執行刷新指令;

(3) 其它指令和刷新請求同時到來時刷新操作先執行。

 命令優先級代碼:

 初始化命令,可以和上面的代碼融合為1個代碼。

 4、命令執行的延時控制

經過優先級判斷后,要把指令解碼成可控制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,

    

 

4、命令解碼,將命令轉化成控制信號的具體數值。

其中(do_reada| do_writea) 是指行激活

do_rw 是列激活

do_rw =1為讀激活,do_rw =0 為寫激活。

 

片選信號

 

 5、行列地址、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  

 


免責聲明!

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



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