2020-10-02

秦韵 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
	.......
	//
);
  1. 目前工程处于仿真阶段,抽空下板验证,截图分享上板验证结果,顺便展示sdram.gao的使用。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值