秦韵 FPGA 转载或原创(二)
高云FPGA GW2AR-18
今天给大家介绍一下sdram,关于sdram的定义、构成原理以及工作原理,我就不详细解释了,这个在百度上搜索一下,估计很多都讲的很详细,我今天只讲一下关于sdram的使用,我呢,是基于高云的云源软件来展开的,因此,用到的基本都是高云的ip,有不熟悉的欢迎参考高云官网。
在高云的官网上可以找到关于sdram控制器的ip核手册,关于每个信号讲的很详细,我在这就简单的引用一下官网的东西,大致解析一下,在ip的基础上,主要介绍一下这个控制器的用法,进一步熟悉高云的软件。
上次简单介绍了一下高云云源软件的使用,基本上可以上手使用,如果对verilog或vhdl语言不熟悉的,请自己研习。
1)打开Gowin software,新建工程,然后点击IP Generator 直接在Memary 文件夹下点SDRAM Controller ,显示sdram 控制器的配置界面,如果使用片内sdram,直接点ok就行了。如果是片外的,根据手册配置地址位宽,数据位宽,完成后就可以点击ok了。贴个完成的图:
关于信号的解释,给大家推荐一下官网的ip user Guide :
IPUG279-1.3_Gowin_SDRAM控制器用户指南.pdf
这里直接截图了,意思简单明了,我也就不做解释了。
2) 给大家分享一个我写的针对ip的控制逻辑module ,可以直接使用,控制漏出的接口进行操作,工程未进行fifo封装,目前只适用同时钟域,若要进行异时钟域操作,可自己进行封装。有需要工程,可留言给我。
// ===========Oooo==========================================Oooo========
// = Copyright (C) 2020-2020 WMP self.
// = All rights reserved.
// =====================================================================
//
// __ __ __
// \ \ / \ / /
// \ \ / /\ \ / /
// \ \/ / \ \/ / [File name ] sdram_ctrl.v
// \ \/ \/ / [Description ] SDRAM Controller
// /\/\ /\/\ [Timestamp ] Thursday Oct 1 13:45:30 2020
// / /\ \ / /\ \ [version ] 1.0.0
// / / \ \/ / \ \
// /_/ \__/ \_\
//
//
// ===========Oooo==========================================Oooo========
// Code Revision History :
// --------------------------------------------------------------------
// Ver: | Author |Mod. Date |Changes Made:
// V1.0 | wmp |10/01/20 |Initial version
// ===========Oooo==========================================Oooo========
`include "sdrc_define.v"
module sdram_ctrl(
//for SDRAM Control
output sdrc_selfrefresh,
output sdrc_power_down,
output reg sdrc_wr_n,
output reg sdrc_rd_n,
output reg [`USER_ADDR_WIDTH-1:0] sdrc_addr,
output reg [`SDRAM_DATA_WIDTH-1:0] sdrc_data,
output [`SDRAM_DQM_WIDTH-1:0] sdrc_dqm ,
output [`SDRAM_ADDR_COLUMN_WIDTH-1:0] sdrc_data_len ,
//for usr interface
input clk,
input rst,
input i_selfrefresh,
input i_power_down,
input i_wd,
input i_rd,
input [`SDRAM_DATA_WIDTH-1:0] i_wr_data,
output [`SDRAM_DATA_WIDTH-1:0] o_rd_data,
input [`SDRAM_ADDR_RWD_WIDTH-1:0] i_wr_addr,
input [`SDRAM_ADDR_RWD_WIDTH-1:0] i_rd_addr,
//from SDRAM Control
input sdrc_init_done,
input sdrc_busy_n,
input sdrc_rd_valid,
input sdrc_wrd_ack,
input [`SDRAM_DATA_WIDTH-1:0] sdrc_data_out
);
3)工程顶层逻辑模块。
// ===========Oooo==========================================Oooo========
// = Copyright (C) 2020-2020 WMP self.
// = All rights reserved.
// =====================================================================
//
// __ __ __
// \ \ / \ / /
// \ \ / /\ \ / /
// \ \/ / \ \/ / [File name ] sdram_ctrl.v
// \ \/ \/ / [Description ] SDRAM Controller
// /\/\ /\/\ [Timestamp ] Thursday Oct 1 13:45:30 2020
// / /\ \ / /\ \ [version ] 1.0.0
// / / \ \/ / \ \
// /_/ \__/ \_\
//
//
// ===========Oooo==========================================Oooo========
// Code Revision History :
// --------------------------------------------------------------------
// Ver: | Author |Mod. Date |Changes Made:
// V1.0 | wmp |10/01/20 |Initial version
// ===========Oooo==========================================Oooo========
`include "sdrc_define.v"
module sdram_top(
input I_clk,
input I_rst_n,
input I_selfrefresh,
input I_power_down,
input I_wrd,
output O_sdram_clk,
output O_sdram_cke,
output O_sdram_cs_n,
output O_sdram_cas_n,
output O_sdram_ras_n,
output O_sdram_wen_n,
output O_sdrc_busy_n,
inout [`SDRAM_DATA_WIDTH-1:0] IO_sdram_dq ,
output [`SDRAM_ADDR_WIDTH-1:0] O_sdram_addr,
output [`SDRAM_BANK_WIDTH-1:0] O_sdram_ba,
output [`SDRAM_DQM_WIDTH-1:0] O_sdram_dqm
// user logic
.......
//
);
- 目前工程处于仿真阶段,抽空下板验证,截图分享上板验证结果,顺便展示sdram.gao的使用。