名称:sdram芯片读写测试设计Verilog代码Quartus AX301开发板
软件:Quartus
语言:Verilog
代码功能:
SDRAM 即同步动态随机存储器,同步是指 Memory 工作需要同步时钟,内部的命令的发送不数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址串行数据读写。因为 SDRAM 具有存取速度大大高于 FLASH 存储器, 且具有读/写的属性, 因此 SDRAM 在系统中主要用于程序的运行空间,大数据的存储及堆栈。
SDRAM 是高速的动态随机存取存储器, 它的同步接口和完全流水线的内部结构使其拥有极大的数据速率, SDRAM 的时钟频率可以达到 100Mhz 以上, 一片 16 位数据宽度的 SDRAM 的读写数据带宽达到 1.6Gbit/s。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在AX301开发板验证,AX301开发板如下,其他开发板可以修改管脚适配:
设计文档:
SDRAM 读写测试实验
1 实验简介
本实验为后续使用 SDRAM 的实验做铺垫,通过循环读写 SDRAM,了解 SDRAM 工作原理,和 SDRAM 控制器的写法,由于 SDRAM 比其他外设复杂,掌握 SDRAM 不是一时之事,但在已有 SDRAM 控制器情况下熟练应用,是后续音频、视频等需要用到 SDRAM 实验的基础。采用 HY57V2562GTR/W9825G6KH/HY57V561620FTP 型号 SDRAM。
2 实验原理
SDRAM 即同步动态随机存储器,同步是指 Memory 工作需要同步时钟,内部的命令的发送不数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址串行数据读写。因为 SDRAM 具有存取速度大大高于 FLASH 存储器,且具有读/写的属性, 因此 SDRAM 在系统中主要用于程序的运行空间,大数据的存储及堆栈。
SDRAM 是高速的动态随机存取存储器, 它的同步接口和完全流水线的内部结构使其拥有极大的数据速率, SDRAM 的时钟频率可以达到 100Mhz 以上, 一片 16 位数据宽度的 SDRAM 的读写数据带宽达到 1.6Gbit/s。
2.1 硬件介绍
开发板设计采用 HY57V2562GTR/W9825G6KH/HY57V561620FTP 型号,容量为的 256Mbit,采用了 54 引脚的 TSOP 封装, 数据宽度都为 16 位, 工作电压为 3.3V,并且采用同步接口方式所有的信号都是时钟信号。
其含有 16 位数据总线, 4 个 Bank。存储架构为 4Banks x 4Mbits x16, 最高的工作频率为 133Mhz。在 PCB 的设计上, 考虑高速信号的数据传输的可靠性, 走线上严格保证等长设计和阻抗控制。
AX301/AX4010 开发板 SDRAM 部分的原理图如下:
2.2 SDRAM 的控制和时序介绍
SDRAM 具有以下几个特点:
(1)采取行列地址复用原则, SDRAM 的地址线在不同的命令下提供不同的地址, 行列地址复用 13 根地址线。
(2)需要定时刷新。
(3)在迚行读写时, 需先激活行。换页 读写时要预充电关闭的行, 然后再激活新的行迚行读写。
(4)SDRAM 正常工作之前配置模式寄存器。
下图为 SDRAM 命令真值表,通过 CKE、CS、RAS、CAS、WE 的不同状态,发出不同的命令。
SDRAM 命令真值表
2.2.1 SDRAM 初始化
AX301/AX4010 开发板上的 SDRAM 的模式寄存器的 A0~A2 位为 SDRAM 读写 Burst 长度的设置; A3 为 Burst 类型,选择连续模式还是交叉模式; A4~A6 为 CAS 数据潜伏期设置;A9 选择工作模 式。
具体说明见下图所示:
部分代码展示:
////////////////////////////////////////////////////////////////////////////////// // The external memory test module writes the address as data and compares // // it to the address // // Author: meisq // // msq@qq.com // // ALINX(shanghai) Technology Co.,Ltd // // heijin // // WEB: http://www.alinx.cn/ // // BBS: http://www.heijin.org/ // // // ////////////////////////////////////////////////////////////////////////////////// // // // Copyright (c) 2017,ALINX(shanghai) Technology Co.,Ltd // // All rights reserved // // // // This source file may be used and distributed without restriction provided // // that this copyright statement is not removed from the file and that any // // derivative work contains the original copyright notice and the associated // // disclaimer. // // // ////////////////////////////////////////////////////////////////////////////////// //================================================================================ // Revision History: // Date By Revision Change Description //-------------------------------------------------------------------------------- //2017/6/28 1.0 Original //*******************************************************************************/ module mem_test #( parameter MEM_DATA_BITS = 32, //external memory user interface data width parameter ADDR_BITS = 23, //external memory user interface address width parameter BUSRT_BITS = 10, //external memory user interface burst width parameter BURST_SIZE = 128 //burst size ) ( input rst, input mem_clk, // external memory controller user interface clock output reg rd_burst_req, // to external memory controller,send out a burst read request output reg wr_burst_req, // to external memory controller,send out a burst write request output reg[BUSRT_BITS - 1:0] rd_burst_len, // to external memory controller,data length of the burst read request, not bytes output reg[BUSRT_BITS - 1:0] wr_burst_len, // to external memory controller,data length of the burst write request, not bytes output reg[ADDR_BITS - 1:0] rd_burst_addr, // to external memory controller,base address of the burst read request
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1350
873