基于FPGA+MIG+AXI4实现DDR3 SDRAM读写操作仿真(附代码+各模块仿真时序图)

前言

一、仿真工程结构

二、Test Bench文件代码

2.图像数据源模块(img_data_gen.v)仿真

2.1全局视角仿真图

2.2局部视角仿真图

3.图像写请求模块(img_write_req_gen.v)仿真

4.图像帧写入模块(frame_write.v)仿真

4.1全局视角仿真图

 4.2局部视角仿真图

4.2.1write_buf

 4.2.2frame_fifo_write

 5.图像通道写仲裁模块(mem_write_arbit.v)仿真(可选,非必须)

 6.AXI主机端读写(aq_axi_master)模块仿真

6.1写部分状态机

6.2读部分状态机

6.3全局视角仿真图

6.4局部视角仿真图

6.4.1写地址通道

 6.4.2写数据通道

 6.4.3写响应通道

6.4.4读地址通道

 6.4.5读数据通道

7.MIG IP模块仿真

 7.1与ddr3相关的信号

 7.2本地接口维护信号

 7.3与读写事务相关信号

 7.4初始化完成、时钟等信号

8.图像帧读出模块(frame_read.v)仿真

8.1全局视角仿真图

 8.2局部视角仿真图

8.2.1read_buf

 8.2.2frame_fifo_read

  9.图像通道读仲裁模块(mem_read_arbit.v)仿真(可选,非必须)

  10.其他部分


前言

        上一篇文章谈到如何利用Xilinx 7系列FPGA实现DDR3 SDRAM的读写操作(详情请参见基于FPGA+MIG+AXI4实现DDR3 SDRAM读写操作(附代码)_春风细雨无声的博客-CSDN博客),大家积极留言或发消息联系希望能用仿真的形式和大家进一步沟通。本篇文章利用第三方软件Modelsim(没有该软件的小伙伴可以联系我获取)对工程中涉及到的各模块进行仿真,给出仿真时序图,帮助大家进一步理解FPGA实现DDR3 SDRAM读写的整个过程。


一、仿真工程结构

        首先建立仿真工程,需要包含Test Bench文件、源文件顶层模块、DDR3模型和连接线延迟等模块,工程结构如图所示。

基于FPGA+MIG+AXI4实现DDR3 SDRAM读写操作仿真(附代码+各模块仿真时序图)_第1张图片

二、Test Bench文件代码

        Test Bench文件是整个工程仿真的第一步,如何用代码来描述Test Bench文件可能是大家比较关心的问题,此处直接附上源码,如下。


`timescale 1ps/100fs



module tb_top_design;





   //***************************************************************************

   // Traffic Gen related parameters

   //***************************************************************************

   parameter SIMULATION            = "TRUE";

   parameter BEGIN_ADDRESS         = 32'h00000000;

   parameter END_ADDRESS           = 32'h00000fff;

   parameter PRBS_EADDR_MASK_POS   = 32'hff000000;



   //***************************************************************************

   // The following parameters refer to width of various ports

   //***************************************************************************

   parameter COL_WIDTH             = 10;

                                     // # of memory Column Address bits.

   parameter CS_WIDTH              = 1;

                                     // # of unique CS outputs to memory.

   parameter DM_WIDTH              = 2;

                                     // # of DM (data mask)

   parameter DQ_WIDTH              = 16;

                                     // # of DQ (data)

   parameter DQS_WIDTH             = 2;

   parameter DQS_CNT_WIDTH         = 1;

                                     // = ceil(log2(DQS_WIDTH))

   parameter DRAM_WIDTH            = 8;

                                     // # of DQ per DQS

   parameter ECC                   = "OFF";

   parameter RANKS                 = 1;

                                     // # of Ranks.

   parameter ODT_WIDTH             = 1;

                                     // # of ODT outputs to memory.

   parameter ROW_WIDTH             = 15;

                                     // # of memory Row Address bits.

   parameter ADDR_WIDTH            = 29;

                                     // # = RANK_WIDTH + BANK_WIDTH

                                     //     + ROW_WIDTH + COL_WIDTH;

                                     // Chip Select is always tied to low for

                                     // single rank devices

   //***************************************************************************

   // The following parameters are mode register settings

   //***************************************************************************

   parameter BURST_MODE            = "8";

                                     // DDR3 SDRAM:

                                     // Burst Length (Mode Register 0).

                                     // # = "8", "4", "OTF".

                                     // DDR2 SDRAM:

                                     // Burst Length (Mode Register).

                                     // # = "8", 

你可能感兴趣的:(FPGA,fpga开发,图像处理)