-
基于
FPGA
的
DDR
内存条的控制研究与设计
发布
:
2010-7-09
07:00
|
作者
:
——
|
来源
:
电子工程世界
|
查看
:
41
次
TAG:
DDR
内存条
1
内存条的工作原理
DDR
内存条是由多颗粒的
DDR
SDKAM
芯片互连组成,
DDR <
/p>
SDRAM
是双数据率同步动
态随机存储
器的缩写。
DDR
SDRAM
采用双
数据速率接口,也就是在时钟的正沿或负沿都需要对数
据进行采样。
在本设计中采用的内存是
hynix
公司的
lGB
的
HYMD564M646CP6-J
。
内存条的工作原
理与单颗粒内存芯片的工作原
理一样,主要的控制信号以及控制信号完成的主要功能如表
1
所
示。
以上的控制信号及地址信号都是由差分时钟信号中
CK
的正沿触发。
DDR
SDRAM
必须按
照一定的工作模式来完成初始化,完成初始化后才能进入到读写过程。
DDR
SDRAM
的控制流程如
p>
图
1
所示。
初始化
的过程为:
(1)
上电后,延时
200
us
等待时钟稳定,然后将
CKE
拉高
,执行一次
N
OP
或者
DESELECT
操作。
(2)
执行一次
precharge
all
操作。
(3)
设置扩展模式寄存器
(
BAl
为低电平
BA0
为高电平
)
使能
DLL
。
p>
(4)
设置模式寄存器
(BAl
,
BA0
均为低电平
)<
/p>
复位
DLL
。
(
5)
执行一次
pre-ch
arge
all
指令。
(6)
< br>再经过
2
个自刷新
(Auto
refresh)
指令后再次设置模式寄存器设置操作模式。<
/p>
(7)
延
时
20
0
个周期才能进行读操作。
DDR
S
DRAM
的扩展模式寄存器和模式寄存器的定义如图
2
和图
3
所示。
完成初
始化后进入图
1
中的
IDEL
状态,此时可以进行读写操作。在进行写操作时,首先
要进入
Row
active
状态,此时选中要操作的<
/p>
bank
与
row
。然后执行
NOP
操作等待
tRCD
的时间后
可以进入写状态。
2
内存条电路设计
由于
DDR
SDRAM
采用的时钟频率较高,
加上
DDRSDRAM
的数据率为时钟速率的两倍,
DDR
SDR
AM
对时钟质量的要求很高,必须保证时钟上升沿的时间小于
5
%的时钟周期。
DDR
SD
RAM
的数据线与相对应的数据采样信号
(DQ
S)
的长度要尽量相等,来保证数据的采样窗口尽量要大
一些。
由于信号质量要求高,我们将所有的信号线都采用微电线和带状线来传输。使用
FPGA
和内
存条的
IBIS
< br>模型进行仿真来保证设计中信号的完整性,我们将信号分为
3
类,第一类,由
FPGA
到
DDR
SDRAM
的时钟差分信号;第二类,由
FPGA
到
DDR
SDRAM
p>
的控制线;第三类,
FPGA
与
DDR
SDRAM
之间的双向传输线。对三类<
/p>
IBIS
模型的
herperlinx<
/p>
仿真如图
4
:
通过仿真我们可以确定
3
类信号线中带状线和微带线板厚,铜厚,以及信号线的线宽,线
长等参数。
3
FPGA
对
DDR
SDRAM
的控制
本设计中使用的
< br>FPGA
是
ALTERA
公司的
cyclone
II
系列的
EP2C20F484C6
。对内存条
的工作模
式设置为
BL=4
,
CL=3
,如图
7
为
FPGA<
/p>
对
DDR
SD-
RAM
的控制模块框图。
其中,
C
lkin
为外部输入的时钟信号,
为了使
FPGA
到
DDR
SDRAM
p>
的两对时钟信号的质
量尽量好,使用
FPG
A
内部的两个锁相环输出差分时钟信号。为了保证锁相环输出的两路差分信号
相位一致,
在设计
PCB
时我们使晶振输出到
FPGA
两个
PL
L
输入的布线距离相等,
为了保证两个锁
相环输出信号到达
DDR
SDRAM
接口时相位一致,由
FPGA
锁相环输出到
< br>DDR
SDRAM
的接口布
线
长度相等。
控制模块采用的工作模式是按照图
2
所示的状态来跳转,上
电以后首先是对
DDR
SDRA
M<
/p>
进行初始化,初始化完成以后就可以进出等待工作的状态。此时刷新计数器开始计数,等待
7
.
8
us
后给出刷新请求,在空闲状态时
(IDEL)
< br>刷新请求的优先级最高,响应刷新请求后执行
REFR-ESH
< br>指令同时复位刷新计数器。初始化后如果
FIF00
的读
空标志为
O
说明
FIF00
中有数据,此时可以进
入到写状态。由于采用的是
BL=4
的工作状态,写操作每次都写入
4
个
64
位的数。所以,我们将输
入
的数据进行并位成
256
位的数,每次写操作只需要从
FIF00
中读出一个
256
< br>位的数。假设我们采
用
1OOMHz
的时钟,每写
4
个
64
位的数大概需要
10
个时钟周期。如果输入的数据
位宽为
16
位,
那么由外部传给
FPGA
的数据率要小于
160
MHz
。写操作完成的时候进入空闲状态,等待刷新标志
< br>或者读空标志。读的时候需要等待系统发出读命令
(read)
< br>,然后进入读状态,读出的数据由
Ddrout[1
27
:
O]
送到
F
IF01
和
FIF02
中。通过控制<
/p>
FIF01
和
FIF02
的写请求信号来实现将数据分别写入。读
的时候
BL=
4
每次读出
4
个
64
位数,
执行一次读操作大约需要
10
个时钟周期。
如果输出的数据位宽
为
16
位,
那么数据由
FPGA
向外传输的速率要小于
160
MHzo
控制模块在读写内存条的时候控制数
据模块
来实现数据率为时钟速度的两倍,
数据模块使用两个时钟一个是系统时钟一个是
2
倍的系统时
钟。
因为
DDR
SDRAM
的控制相对复杂,我们可以使用内存条的
vefilog
模型,通过对内存条
的
vefilog
仿真,我们可以知道自己程序的正确性,图
8
为
modelsim
中的仿真波形。如果仿真过程
正
确,我就可以对程序进行编译,布局布线,然后下载到
FPGA
中,由于布局布线的延时,输出的
信号波形与仿真波形不一致,此时,可以通过调整
p>
FPGA
内部的锁相环来调整时序,实现对内存条
< br>的控制。
4
结束语
-
-
-
-
-
-
-
-
-
上一篇:开利19l冷水机组操作中英文对照和故障信息
下一篇:并联电容器装置设计规范