|
FPGA控制DDR2程序代碼 讀寫數(shù)據(jù)
源程序如下:
- //---------------------------------------------------------------------------
- //-- 文件名 : Project_Ddr2.v
- //-- 作者 : ZIRCON
- //-- 描述 : DDR2讀寫測試模塊
- //-- 修訂歷史 : 2017-01-01
- //---------------------------------------------------------------------------
- `include "Ddr2_Param.v"
- module Project_Ddr2
- (
- /* 時(shí)鐘和復(fù)位信號 */
- CLK_50M,RST_N,
- /* DDR2接口 */
- DDR2_ODT,DDR2_CS_N,DDR2_RAS_N,DDR2_CKE,DDR2_ADDR,DDR2_CLK,
- DDR2_BA,DDR2_CAS_N,DDR2_WE_N,DDR2_CLK_N,
- DDR2_DM,DDR2_DQ,DDR2_DQS
- );
- //---------------------------------------------------------------------------
- //-- 外部端口聲明
- //---------------------------------------------------------------------------
- input CLK_50M; //時(shí)鐘信號
- input RST_N; //復(fù)位信號
- output DDR2_ODT; //DDR2片上終結(jié)信號
- output DDR2_CS_N; //DDR2片選信號
- output DDR2_CKE; //DDR2時(shí)鐘使能信號
- output [ `MEM_ADDRWIDTH-1:0] DDR2_ADDR; //DDR2地址總線
- output [ `MEM_BAWIDTH-1:0] DDR2_BA; //DDR2BANK信號
- output DDR2_RAS_N; //DDR2行地址選擇信號
- output DDR2_CAS_N; //DDR2列地址選擇信號
- output DDR2_WE_N; //DDR2寫使能信號
- output [ `MEM_DMWIDTH-1:0] DDR2_DM; //DDR2數(shù)據(jù)掩膜信號
- inout DDR2_CLK; //DDR2時(shí)鐘信號
- inout DDR2_CLK_N; //DDR2時(shí)鐘反相信號
- inout [ `MEM_DQWIDTH-1:0] DDR2_DQ; //DDR2數(shù)據(jù)總線
- inout [ `MEM_DQSWIDTH-1:0] DDR2_DQS; //DDR2數(shù)據(jù)源同步信號
- //---------------------------------------------------------------------------
- //-- 內(nèi)部端口聲明
- //---------------------------------------------------------------------------
- wire CLK_100M; //時(shí)鐘信號
- wire RST_B; //復(fù)位信號
- wire CLK_25M; //25MHz寫時(shí)鐘
- wire CLK_30M; //30MHz讀時(shí)鐘
- wire user_init_done; //初始化完成信號
- wire user_phyclk; //DDR2 IP核輸出時(shí)鐘,166.7MHz
- wire user_phyrst_n; //DDR2 IP核同步后的復(fù)位信號
- wire user_wren; //寫使能信號
- wire user_wrreq; //寫FIFO請求信號
- wire [12:0] user_wrdata; //寫數(shù)據(jù)總線
- wire user_wrfull; //寫FIFO滿標(biāo)志
- wire user_wrdone; //寫完成標(biāo)志,只有一拍
- wire user_rden; //讀使能信號
- wire user_rdreq; //讀FIFO請求信號
- wire [15:0] user_rddata; //讀數(shù)據(jù)總線
- wire user_rdempty; //讀FIFO空信號
- wire user_rddone; //讀完成標(biāo)志,只有一拍
- //---------------------------------------------------------------------------
- //-- 邏輯功能實(shí)現(xiàn)
- //---------------------------------------------------------------------------
- /* PLL IP核控制模塊 */
- Pll_Control Pll_Control_Init
- (
- .CLK_50M (CLK_50M ), //時(shí)鐘輸入端口
- .RST_N (RST_N ), //復(fù)位輸入端口
- .CLK_100M (CLK_100M ), //100M時(shí)鐘輸出
- .CLK_25M (CLK_25M ), //25M時(shí)鐘輸出
- .CLK_30M (CLK_30M ), //30M時(shí)鐘輸出
- .RST_B (RST_B ) //復(fù)位輸出端口
- );
- /* 封裝了Ddr2 Ip核和Fifo Ip核的DDR2控制器模塊 */
- Fifo_Ddr2_Fifo fifo_ddr2_fifo_inst
- (
- /* 時(shí)鐘和復(fù)位信號 */
- .CLK_DDR2 (CLK_100M ), //時(shí)鐘信號
- .RST_N (RST_B ), //復(fù)位信號
- /* DDR2存儲器接口 */
- .mem_odt (DDR2_ODT ), //DDR2片上終結(jié)信號
- .mem_cs_n (DDR2_CS_N ), //DDR2片選信號
- .mem_cke (DDR2_CKE ), //DDR2時(shí)鐘使能信號
- .mem_addr (DDR2_ADDR ), //DDR2地址總線
- .mem_ba (DDR2_BA ), //DDR2BANK信號
- .mem_ras_n (DDR2_RAS_N ), //DDR2行地址選擇信號
- .mem_cas_n (DDR2_CAS_N ), //DDR2列地址選擇信號
- .mem_we_n (DDR2_WE_N ), //DDR2寫使能信號
- .mem_dm (DDR2_DM ), //DDR2數(shù)據(jù)掩膜信號
- .mem_clk (DDR2_CLK ), //DDR2時(shí)鐘信號
- .mem_clk_n (DDR2_CLK_N ), //DDR2時(shí)鐘反相信號
- .mem_dq (DDR2_DQ ), //DDR2數(shù)據(jù)總線
- .mem_dqs (DDR2_DQS ), //DDR2數(shù)據(jù)源同步信號
- /* DDR2用戶接口 */
- .user_init_done (user_init_done ), //初始化完成信號
- .user_phyclk (user_phyclk ), //DDR2 IP核輸出時(shí)鐘,166.7MHz
- .user_phyrst_n (user_phyrst_n ), //DDR2 IP核同步后的復(fù)位信號
- .user_wrclk (CLK_25M ), //寫數(shù)據(jù)進(jìn)FIFO工作時(shí)鐘
- .user_rdclk (CLK_30M ), //從FIFO讀數(shù)據(jù)工作時(shí)鐘
- .user_wrdone (user_wrdone ), //寫完成標(biāo)志,只有一拍
- .user_rddone (user_rddone ), //讀完成標(biāo)志,只有一拍
- .user_wren (user_wren ), //寫使能信號
- .user_rden (user_rden ), //讀使能信號
- .user_wrfreq (user_wrreq ), //寫FIFO請求信號
- .user_wrffull (user_wrfull ), //寫FIFO滿標(biāo)志
- .user_wrfusedw (), //寫FIFO中的數(shù)據(jù)個(gè)數(shù)
- .user_rdfreq (user_rdreq ), //讀FIFO請求信號
- .user_rdfempty (user_rdempty ), //讀FIFO空信號
- .user_rdfusedw (), //讀FIFO中的數(shù)據(jù)個(gè)數(shù)
- .user_wrdata (user_wrdata ), //寫數(shù)據(jù)總線
- .user_rddata (user_rddata ), //讀數(shù)據(jù)總線
- .user_wrlen (10'd256 ), //寫突發(fā)長度
- .user_rdlen (10'd256 ), //讀突發(fā)長度
- .user_wrheadaddr (25'h0 ), //寫操作首地址
- .user_wrendaddr (25'd25 ), //寫操作尾地址
- .user_rdheadaddr (25'h0 ), //讀操作首地址
- .user_rdendaddr (25'd25 ), //讀操作尾地址
- .user_pingpongen (25'd0 ) //乒乓操作使能信號
- );
- Ddr2_Control Ddr2_Control_Init
- (
- .CLK_25M (CLK_25M ), //時(shí)鐘端口
- .CLK_30M (CLK_30M ), //時(shí)鐘端口
- .RST_B (RST_B ), //復(fù)位端口
- .user_phyclk (user_phyclk ), //DDR2 IP核輸出時(shí)鐘,166.7MHz
- .user_phyrst_n (user_phyrst_n ), //DDR2 IP核同步后的復(fù)位信號
- .user_wren (user_wren ), //寫使能信號
- .user_wrreq (user_wrreq ), //寫FIFO請求信號
- .user_wrdata (user_wrdata ), //寫數(shù)據(jù)總線
- .user_wrfull (user_wrfull ), //寫FIFO滿標(biāo)志
- .user_wrdone (user_wrdone ), //寫完成標(biāo)志,只有一拍
- .user_rden (user_rden ), //讀使能信號
- .user_rdreq (user_rdreq ), //讀FIFO請求信號
- .user_rddata (user_rddata ), //讀數(shù)據(jù)總線
- .user_rdempty (user_rdempty ), //讀FIFO空標(biāo)志
- .user_rddone (user_rddone ), //讀完成標(biāo)志
- .rddata_cnt (rddata_cnt ) //讀數(shù)據(jù)計(jì)數(shù)
- );
- endmodule
復(fù)制代碼
所有資料51hei提供下載:
Project_Ddr2.zip
(52.11 KB, 下載次數(shù): 55)
2018-8-30 20:04 上傳
點(diǎn)擊文件名下載附件
FPGA控制DDR2程序代碼
|
|