基于vivado2019的FDMA及DDR3仿真(AXI接口)
程序员文章站
2022-04-02 20:12:49
基于vivado2019的FDMA及DDR3仿真(AXI接口)前言一、VIVADO自带example建立二、FDMA介绍三、顶层文件的替换及仿真前言之前每次调试内存的代码都要直接下板调试,随着工程越来越大,综合时间太长,十分影响工程进度,所以希望搭建一个能够直接仿真的DDR平台。用VIVADO自带的MIG 的 example案例来修改,完成了米联客的FDMA的仿真平台。一、VIVADO自带example建立首先按照各自开发板上的DDR建立对应的MIG核,这里以米联客的XC7K325tffg9...
基于vivado2019的FDMA及DDR3仿真(AXI接口)
前言
之前每次调试内存的代码都要直接下板调试,随着工程越来越大,综合时间太长,十分影响工程进度,所以希望搭建一个能够直接仿真的DDR平台。 用VIVADO自带的MIG 的 example案例来修改,完成了米联客的FDMA的仿真平台。一、VIVADO自带example建立
首先按照各自开发板上的DDR建立对应的MIG核,这里以米联客的XC7K325tffg900为例。
- 在建立MIG核的时候需要注意,对应的memory type要选对,否则例化的MIG、DDR
modle和后续顶层将无法对应。 - 目前网上博客中大部分mig案例都是APP用户模式,而在工程中常用axi接口的模式,资料并不多,所以博主选择axi接口的mig核。
- 生成MIG核后,右键IP,选择open IP Example Design后即可自动生成官方的MIG控制DDR3 model的工程。我们后续只需要在上面进行修改即可。
二、FDMA介绍
- 这里可能很多初学者会有疑问,为什么有MIG核来控制DDR3,还需要FDMA来在外面包一层。因为用户直接操作AXI接口将很麻烦,如果能够只操作少量的信号就能完成AXI接口层的读写操作,那么将大大减少用户的工作量,所以FDMA就显的十分有必要。
- 下面是各关键信号波形变化,和具体表述
信号 | 作用 | 备注 |
---|---|---|
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的顶层是一一对应的,两者需要同步修改。
本文地址:https://blog.csdn.net/sz_woshishazi/article/details/109236162
上一篇: android studio 相对布局