quartus Ⅱ中DDR2 SDRAM的原理与使用

1. SDRAM功能与原理
SDRAM(Synchronous Dynamic Random Access Memory),同步动态随机存储器。同步是指 Memory工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证存储的数据不丢失,因为SDRAM中存储数据是通过电容来工作的,大家知道电容在自然放置状态是会有放电的,如果电放完了,也就意味着SDRAM中的数据丢失了,所以SDRAM需要在电容的电量放完之前进行刷新;随机是指数据不是线性依次存储,而是自由指定地址进行数据的读写。

2. SDRAM内部结构
SDRAM内部其实是一个存储阵列,大家可以想象一下,如果SDRAM内部不是以阵列的形式存在而是以管道的形式存在,那SDRAM是很难做到随机访问的。阵列就如同一张表格一样,将数据填进去。和表格的检索原理一样,先确定一个行(Row),再确定一个列(Col),我们就可以准确的找到所需要的单元格,这就是内存芯片寻址的基本原理。对于内存,这个单元格可以成为存储单元,那么这个表格(存储阵列)叫什么呢?这就是逻辑Bank (Logic Bank,下文简称Bank).
在这里插入图片描述

3. DDR I与DDRⅡ的区别
DDR 400工作在200Mhz下, 每个时钟周期传递 2 次数据,每次 8位。
相当于 SDRAM在 400Mhz下工作的效率,所以称为DDR 400 内存
DDR 2 667工作在166Mhz下, 每个时钟周期传递 2 次数据,每次 16位。
相当于 SDRAM在 667Mhz下工作的效率,所以称为DDR 2 667 内存
两者带宽不同,数字越大越好,运算速度也越快,电脑使用起来也越快。举个例子:就好象普通马路跟高速公路,哪个路宽,汽车开起来的速度也越快!
尽管DDR2内存采用的DRAM核心速度和DDR的一样,但是我们仍然要使用新主板才能搭配DDR2内存,因为DDR2的物理规格和DDR1是不兼容的。所以,不同的内存,必须选择不同的主板才能与之配套。首先是接口不一样,DDR2的针脚数量为240针,而DDR内存为184针;其次,DDR2内存的VDIMM电压为1.8V,也和DDR内存的2.5V不同。
此外:SD 金手指上有2个缺口 ,DDR1 和 DDR2都只有一个缺口,但是距离不一样.
DDRII 667有更快的主频(就是667MHz),如果主板支持DDRII,前端总线支持667MHz,当然是用它更好。但是,如果主板支持的只是DDR(即第I代的DDR,而不是第II代DDR——DDRII),那么DDRII的内存就根本不能用;或者前端总线频率较低,那么DDRII 667也就不能工作在它的最佳状态上,显得有点浪费了。

4. ALTERA DDRII IP核使用
DDRII SDRAM是第二代双倍速率同步动态RAM。
新建QUARTUSII工程之后,在tool下找到Megawizard plug-in manager,新建自定义宏功能模块 。
在这里插入图片描述
在这里插入图片描述
如上图,注意在interface下选择external memory,DDR2SDRAM,语言选择verilog hdl,输出文件名字填写相应的模块名。
在这里插入图片描述
如上图,输入参考时钟50M,根据自己的实际输入频率填写,此时钟为DDRII软核内部PLL输出时钟。存储器时钟频率根据自己要求填写,以小编的开发板EP4CE15F17为例,此FPGA上跑DDRII的时钟频率为125M-167M。最下面的控制数据速率,分为全速和半速。

全速情况下,DDRII的突发长度为4,半速情况下,DDRII的突发长度为8。

memory preset根据自己的DDRII芯片选择,如果QUARTUS自带的设置中没有,可以自定义,选择modify parameters。
在这里插入图片描述
上述参数必须根据DDRII芯片手册上的参数配置。上述参数中Memory bursrt length决定的该控制器的速率模式是全速还是半速。

然后一直next,到finish,等待生成控制器文件就可以了。
下面给出部分DDRII控制器接口。
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FPGA读写 SDRAM Verilog设计源码Quartus工程文件,SDRAM型号FW9825G6KH-6,SDRAM读写测试: 向SDRAM写入数据,然后将数据读出,并判断读出的数据是否正确,FPGA型号Cyclone4E系列的EP4CE10F17C8,Quartus版本18.0。 module sdram_rw_test( input clk, //FPGA外部时钟,50M input rst_n, //按键复位,低电平有效 //SDRAM 芯片接口 output sdram_clk, //SDRAM 芯片时钟 output sdram_cke, //SDRAM 时钟有效 output sdram_cs_n, //SDRAM 片选 output sdram_ras_n, //SDRAM 行有效 output sdram_cas_n, //SDRAM 列有效 output sdram_we_n, //SDRAM 写有效 output [ 1:0] sdram_ba, //SDRAM Bank地址 output [12:0] sdram_addr, //SDRAM 行/列地址 inout [15:0] sdram_data, //SDRAM 数据 output [ 1:0] sdram_dqm, //SDRAM 数据掩码 //LED output led //状态指示灯 ); //wire define wire clk_50m; //SDRAM 读写测试时钟 wire clk_100m; //SDRAM 控制器时钟 wire clk_100m_shift; //相位偏移时钟 wire wr_en; //SDRAM 写端口:写使能 wire [15:0] wr_data; //SDRAM 写端口:写入的数据 wire rd_en; //SDRAM 读端口:读使能 wire [15:0] rd_data; //SDRAM 读端口:读出的数据 wire sdram_init_done; //SDRAM 初始化完成信号 wire locked; //PLL输出有效标志 wire sys_rst_n; //系统复位信号 wire error_flag; //读写测试错误标志 //***************************************************** //** main code //***************************************************** //待PLL输出稳定之后,停止系统复位 assign sys_rst_n = rst_n & locked; //例化PLL, 产生各模块所需要的时钟 pll_clk u_pll_clk( .inclk0 (clk), .areset (~rst_n), .c0 (clk_50m), .c1 (clk_100m), .c2

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值