基于 Xilinx VIVADO 2018.3 调用的 DDR3 IP 核(Memory Interface Generator, MIG 7 Series),针对 Xilinx 定义的 app 接口(Naive),设计读写模块状态机,并用 Verilog 进行实现。
读写状态机设计
我们设计的读写测试模块预期要实现的功能:
(1)写入一定量的数据(可设置,默认 512 个)到 DDR3,写入地址从 0 开始。
(2)从地址 0 开始读取之前写入 DDR3 的数据,同时判断读、写数据是否一致。
(3)循环上两个步骤,即写、读、写、读 …
因此,状态机很简单,我们可以设置如下 4 个状态,其状态转移规则如上图所示。
IDLE:初始状态,等 MIG IP 核初始化完成后跳转到写数据状态 WRITE。
WRITE:写数据状态,在这个状态向 MIG IP 核写入一定量的数据(测试为 512 个)。当写入最后一个数据时,同步跳转到等待状态 WAIT。
WAIT:过渡状态,仅维持一个时钟周期。
READ:读数据状态,在这个状态从 MIG IP 核读取一定量的数据(测试为 512 个)。当读取最后一个数据时,同步跳转到初始状态 IDLE。开始新一轮的写、读过程。
在 Xilinx 定义的 app 接口(Naive)模式下,DDR3 写数据的时候有三种场景,本次测试使用写命令与写数据发生在同一时钟周期这一场景,这样代码编写会简单很多,但相应的会牺牲一点点效率(不会造成多大的影响)。