基于vivado的FDMA及DDR3仿真(AXI接口)

时间:2024-04-12 14:06:56

前言

之前每次调试内存的代码都要直接下板调试,随着工程越来越大,综合时间太长,十分影响工程进度,所以希望搭建一个能够直接仿真的DDR平台。 用VIVADO自带的MIG 的 example案例来修改,完成了米联客的FDMA的仿真平台。

一、VIVADO自带example建立

首先按照各自开发板上的DDR建立对应的MIG核,这里以米联客的XC7K325tffg900为例。
基于vivado2019的FDMA及DDR3仿真(AXI接口)

  • 在建立MIG核的时候需要注意,对应的memory type要选对,否则例化的MIG、DDR
    modle和后续顶层将无法对应。
  • 目前网上博客中大部分mig案例都是APP用户模式,而在工程中常用axi接口的模式,资料并不多,所以博主选择axi接口的mig核。

基于vivado2019的FDMA及DDR3仿真(AXI接口)

  • 生成MIG核后,右键IP,选择open IP Example Design后即可自动生成官方的MIG控制DDR3 model的工程。我们后续只需要在上面进行修改即可。

二、FDMA介绍

  • 这里可能很多初学者会有疑问,为什么有MIG核来控制DDR3,还需要FDMA来在外面包一层。因为用户直接操作AXI接口将很麻烦,如果能够只操作少量的信号就能完成AXI接口层的读写操作,那么将大大减少用户的工作量,所以FDMA就显的十分有必要。
  • 下面是各关键信号波形变化,和具体表述

基于vivado2019的FDMA及DDR3仿真(AXI接口)

信号 作用 备注
w_fdma_locked 表示开始一个package写时的状态 这里指发送1024个数据之间
axi_awvalid 表示主机允许刷新地址线上的地址 这里只保持一个周期的脉冲
w_cycle_flag 表示axi在进行写的时候 这里除去了last信号拉高的时间
axi_awaddr 表示写地址 ——
axi_wvalid 表示写数据有效 只在w_cycle_flag高且last为低时有效
w_word_cnt 以一次突发长度为最大值记写数据个数 ——
wr_data_cnt 以一个package为最大值记写数据个数 ——
axi_wlast 表示每一个突发结束的最后一个数据 ——
w_next 代表能成功读写的时候 ——

三、顶层文件的替换及仿真

  • 有了FDMA的顶层和官网实例模板后就可以开始移植了,只需要将example_top换成FDMA的顶层即可,这里需要注意FDMA的复位信号需要从MIG核的ui_clk_sync_rst端口出来,其表示ui_clk稳定状态,否则会影响FDMA一直无法正常工作。
  • 除此之外,还需要注意每个MIG核对应的tb的顶层是一一对应的,两者需要同步修改。