名称: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