SDRAM控制器設計(4)自動重新整理 自重新整理操作

2021-10-05 19:37:37 字數 2259 閱讀 9402

ps: 重新整理&預充電

重新整理操作與預充電中重寫的操作一樣,都是用s-amp先讀再寫。但為什麼有預充電操作還要進行重新整理呢?因為預充電是對乙個或所有l-bank中的工作行操作,並且是不定期的,而重新整理則是有固定的週期,依次對所有行進行操作,以保留那些久久沒有經歷重寫的儲存體中的資料。但與所有l-bank預充電不同的是,這裡的行是指所有l-bank中位址相同的行,而預充電中各l-bank中的工作行位址並不一定是相同的。

重新整理操作分為兩種:自動重新整理(auto refresh,簡稱ar)與自重新整理(self refresh,簡稱sr)。

不論是何種重新整理方式,都不需要外部提供行位址資訊,因為這是乙個內部的自動操作。

下圖為sdram 自動重新整理時序圖

將重新整理操作以任務的形式進行表示,便於在主狀態機的多個地方執行該任務。由於重新整理過程時序很明確,重新整理任務的實現也採用線性序列機方法實現。

首先將重新整理過程中幾個需要操作傳送命令的時刻進行本地引數表示

//自動重新整理操作任務,採用線性序列機方法

localparam ref_pre_time = 1'b1,

ref_ref1_time = ref_pre+1,

ref_ref2_time = ref_pre+ref_ref+1,

ref_end = ref_pre+ref_ref*2;

對重新整理過程中時鐘進行計數

//自動重新整理過程時間計數器

always@(posedge clk or negedge rst_n)

begin

if(!rst_n)

ref_cnt <= 16'd0;

else if(ref_cnt == ref_end)

ref_cnt <= 16'd0;

else if(ref_req || ref_cnt>1'b0)

ref_cnt <= ref_cnt + 16'd1;

else

ref_cnt <= ref_cnt;

end

//自動重新整理操作,線性序列機

task auto_ref;

begin

case(ref_cnt)

ref_pre_time:begin

command <= c_pre; //預充電

sa[10] <= 1'b1;

endref_ref1_time:begin

command <= c_aref; //自動重新整理

endref_ref2_time:begin

command <= c_aref; //自動重新整理

endref_end:begin

ff <= 1'b1;//退出任務標誌位,1:退出任務;0:啟動任務

command <= c_nop;

enddefault:

command <= c_nop;

endcase

endendtask

最後,對重新整理操作完成和重新整理過程進行標誌,可用於其他訊號的產生

//一次重新整理操作完成標誌位

always@(posedge clk or negedge rst_n)

begin

if(!rst_n)

ref_opt_done <= 1'b0;

else if(ref_cnt == ref_end)

ref_opt_done <= 1'b1;

else

ref_opt_done <= 1'b0;

end//一次突發寫操作過程狀態標識訊號

reg ref_opt;

always@(posedge clk or negedge rst_n)

begin

if(!rst_n)

ref_opt <= 1'b0;

else if(ref_req == 1'b1)

ref_opt <= 1'b1;

else if(ref_opt_done == 1'b1)

ref_opt <= 1'b0;

else

ref_opt <= ref_opt;

end

**略

FPGA之SDRAM控制器設計(二)

fpga之sdram控制器設計 二 重新整理 這次要來解決上次留下來的重新整理問題,在100us後首先要經過兩次重新整理才進行模式暫存器設定。這顆sdram晶元需要每隔64ms對8192行 列位址10 位,行位址13位 的每乙個儲存電容進行一次重新整理,因為不重新整理電充會洩露電流導致儲存資訊丟失。...

儲存控制器和SDRAM

start.檔案 equ mem ctl base,0x48000000 命令用於把常量值設定為可以在文字段中使用的符號 equ sdram base,0x30000000 類似於c語言中 define 0x48000000 bwscon,0x30000000 bank6 text global s...

SDRAM控制器新增讀寫FIFO

在原來控制器的基礎上新增了讀寫fifo,對資料進行快取,從而解決了原控制器在某些時刻讀寫被忽略掉 比如重新整理請求和寫請求同時到來 導致資料的儲存和讀寫出現遺漏 其中,sdram control 模組的寫使能wr 和讀使能rd 是分別通過判斷寫fifo 模組和讀fifo 模組中所儲存的資料量來決定的...