FPGA实现DDR高速读写(2)

FPGA实现DDR高速读写(2)

在完成IP核申请后需要对IP进行仿真,看看DDR的读写工作的基本原理。在进行代码仿真前需要对DDR SDRAM的基础架构和工作机制进行了解,然后对DDR进行仿真。

一、DDR功能框图
FPGA实现DDR高速读写(2)_第1张图片上图就是SDRAM芯片的其中一个型号的功能框图。上面的功能框图里可以知道主要由输入输出IO口控制、模式寄存器、存储阵列、写入/读出控制、写入缓冲FIFO这几部分组成。
对于DDR我们首先需要知道他的存储阵列的大小。SDRAM的地址线是分时复用的,也就是说他的行地址和列地址线是复用的,SDRAM的容量计算方式为:
SDRAM容量= 数据位宽x 存储单元数量(行地址x 列地址x Bank数)
从上面这个图我们可以知道这个芯片有行地址13位,列地址10位,总共有8个bank,数据位宽为16位。因此芯片是64M×16的,也就是有64M的存储深度数据位宽为16位。
输出IO控制,这个部分是对SDRAM的IO口的终端电阻进行配置,对IO口进行上拉或者下拉进行配置。
写入/读出控制是对从存储阵列内的数据读出进行控制。主要是把数据从64位转换乘16位。
写入缓冲FIFO是对输入的数据进行缓存,也有起到跨时钟有处理的一个作用。
模式寄存器这个是对SDRAM功能和模式进行控制,我们进行初始化、读写以及刷新等操作都是通过对模式寄存器配置来实现的。
目前SDRAM的硬件设计已经很成熟了,基本上按照官方推荐的方式进行设计就很少出现问题,这里就不多描述。在进行数据读写时SDRAM主要进行上电初始化、刷新操作、读操作、写操作这几个状态。SDRAM状态转换如图所示(各个厂家控制方式和状态转移基本一致):
FPGA实现DDR高速读写(2)_第2张图片首先是上电初始化过程:SDRAM上电后必须要以预定义的方式进行操作,不符合规定时序的操作会导致SDRAM初始化不成功。上电过程相对于读写操作是独立的,因此芯片首先要保证初始化正确,初始化时序如下图:
FPGA实现DDR高速读写(2)_第3张图片这个时序需要注意的一点是在Vref电平拉高后需要至少保持200us的空闲。然后进行一次PRE操作和两次REF操作,然后等待至少200个CLK即完成上电初始化。初始化过程再IP核内已经完成,我们了解这个过程对硬件的调试核后续读写控制代码的编写有很大的帮助。
刷新操作:SDRAM需要定时的进行刷新,实质就是对存储阵列电容进行充电,来保证存入的数据的准确,如果超出规定时间未进行刷新,会导致电容放电存储的信息消失。刷新时间间隔与芯片的制造有关,数据手册中有着明确的刷新时间要求,如每行刷新时间最大间隔是64ms,每个bank有8192行,则每一行刷新时间是7.8125us(64ms, 8192-cycle refresh)。
在整个状态转换控制过程中刷新状态的优先级是较高的,优先于读写操作,若在读写过程中需要刷新,则应结束当前的读写操作,进行刷新,刷新完成后再继续进行读写操作。刷新操作时序如下图:
FPGA实现DDR高速读写(2)_第4张图片
在进行读合写操作前需要进行ACTIVATE操作。这个操作是激活读或者写对应bank的行。这个操作比较简单,就是几个时序的操作。
FPGA实现DDR高速读写(2)_第5张图片
读操作的实现:

IDLE状态到WRITE状态:

  1. 在IDLE状态需要先给ACT命令激活某一行,此时处于Active状态;

  2. 在Active状态之后,会自动进入Bank active状态;

  3. 在Bank active状态后,给一次Read命令,就可以进入读状态了,这时就可以实现数据的读出。

4)再次给出Read命令,就可以实现数据的连续读出。
FPGA实现DDR高速读写(2)_第6张图片
上图是数据的突发连续读出模式,数据是4突发传输,其中RL是从读命令写入的数据读出的延时周期数,这个是在模式寄存器中进行设置。在两个读命令之间的时间间隔Tccd,这个时间间隔需要满足。实质上读操作实现并不复杂,只需要按照时序要求即可。
写操作和读操作状态的转移是类似的,连续写入时序如下图:
FPGA实现DDR高速读写(2)_第7张图片在上面的时序图中各个状态的命令command是由状态寄存器来进行配置的,状态寄存器的配置是进行读写的关键步骤,状态寄存器如下图:
FPGA实现DDR高速读写(2)_第8张图片
通过上面的描述,可以对SDRAM的工作有一个大致的了解,这对SDRAM的控制有着很大的帮助。

二、SDRAM的仿真

上个文章完成了IP的申请和例化,根据前面说的SDRAM基本的知识,对DDR进行仿真。Xilinx官方提供的仿真代码需要去仔细的看,这样才能更加充分的理解SDRAM的底层控制逻辑。代码工程架构如下图:
FPGA实现DDR高速读写(2)_第9张图片
仿真代码如图
FPGA实现DDR高速读写(2)_第10张图片
运行simulate,得到仿真波形如下图:
FPGA实现DDR高速读写(2)_第11张图片
通过上面完成了SDRAM模块IP核的仿真。

你可能感兴趣的:(FPGA,DDR)