前言
下圖是本案例的功能框圖。
command.v文件對應(yīng)圖中SDRAM指令執(zhí)行模塊,它會從SDRAM接口控制模塊接收指令,然后產(chǎn)生控制信號直接輸出到SDRAM器件來完成所接收指令的動作。如下是該模塊的RTL視圖:
其具體代碼講解如下:
輸入信號INIT_REQ指示的是SDRAM上電等待的24000個時鐘周期,在這期間do_initial信號為高,系統(tǒng)只能發(fā)送NOP命令。
當初始化等待時間結(jié)束do_initial被拉低,首先確認在沒有其他指令進行中時,若有刷新請求,則do_refresh信號拉高。
然后確認在沒有其他指令進行中時,有讀請求時,do_reada信號拉高。
然后確認在沒有其他指令進行中時,有寫請求時,do_writea信號拉高。
然后確認在沒有其他指令進行中時,有預(yù)充電請求時,do_precharge信號拉高。
然后確認在沒有其他指令進行中時,有模式寄存器加載請求時,do_load_mode信號拉高。
當產(chǎn)生自動刷新命令、讀寫命令、預(yù)充電命令和模式加載命令時,系統(tǒng)會通過command_delay來延遲指令的有效執(zhí)行時間,確保指令能完整進行。除開突發(fā)讀/寫的情況,其他每個指令統(tǒng)一延遲8個時鐘周期后再延遲4個周期。
拿預(yù)充電命令舉例:
讀寫命令則是等待64個數(shù)據(jù)連續(xù)讀/寫完后,再延遲4個時鐘周期。拿讀命令舉例:
下面是地址端口、bank選擇和片選信號的處理。在初始化狀態(tài),加載模式寄存器時是通過地址端口對寄存器進行賦值的。在激活操作時,地址端口發(fā)送行地址;在讀或者寫操作時,地址端口發(fā)送列地址。
command.v 模塊里面得到行地址rowaddr和列地址coladdr:
放大地址線SA波形可以看到,在行激活的時候發(fā)送的地址確實是0:
下面是RAS_N、CAS_N、WE_N信號的產(chǎn)生。
因為寫入 SDRAM 的數(shù)據(jù)與從 SDRAM 讀出的數(shù)據(jù)為共用傳輸引腳,為避免存取數(shù)據(jù)相沖,系統(tǒng)里設(shè)計了一個三態(tài)門電路(三態(tài)門電路的設(shè)計參考07-SDRAM控制器的設(shè)計——Sdram_Control.v代碼解析(后續(xù)發(fā)布),通過oe信號控制SDRAM 數(shù)據(jù)接口的輸入和輸出。oe信號的設(shè)計如下:
每次oe信號拉高超過64個時鐘周期,確保數(shù)據(jù)被正確寫入到SDRAM器件當中:
另外,讀命令和寫命令之前要先有激活命令,讀寫命令在激活命令的3個周期后發(fā)出,所以這里用個右移計數(shù)器計數(shù)3個周期:
do_wr信號波形如下:
PS: 本文波形來自文件~sdramcontroloutput_filescommand.stp。
-
控制器
+關(guān)注
關(guān)注
114文章
17106瀏覽量
184273 -
SDRAM
+關(guān)注
關(guān)注
7文章
442瀏覽量
56312 -
接口
+關(guān)注
關(guān)注
33文章
9001瀏覽量
153736 -
指令
+關(guān)注
關(guān)注
1文章
616瀏覽量
36459 -
代碼
+關(guān)注
關(guān)注
30文章
4900瀏覽量
70733
原文標題:05-SDRAM控制器的設(shè)計——command.v代碼解析
文章出處:【微信號:友晶FPGA,微信公眾號:友晶FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
SDRAM控制器的設(shè)計——Sdram_Control.v代碼解析(異步FIFO讀寫模塊、讀寫SDRAM過程)

【開源騷客】《輕松設(shè)計SDRAM控制器》第八講—命令解析模塊講解
SDRAM控制器參考設(shè)計,Lattice提供的VHDL源代碼
使用Verilog實現(xiàn)基于FPGA的SDRAM控制器
SDRAM控制器簡易化設(shè)計

DDR SDRAM控制器參考設(shè)計VHDL代碼
SDRAM控制器的設(shè)計

FPGA讀寫SDRAM的實例和SDRAM的相關(guān)文章及一些SDRAM控制器設(shè)計論文

如何使用FPGA設(shè)計SDRAM控制器

基于SDRAM控制器軟核的Verilog設(shè)計

PIC32系列參考手冊之DDR SDRAM控制器

評論