xilinx平台下DDR3映射为VFIFO

FPGA开发中,数据采集、数据分析场景下需要用对高速ADC数据缓存,FPGA片内RAM无法做到大的容量,基于MIG IP做了个DDR3映射成FIFO的模块,以完成高速、量大的数据缓存应用。

背景和选择

part1

官方也提供了类似功能的IP:AXI Virtual FIFO Controller,如果你需要多通道,该方案倒是比较不错,最大可支持到8个通道,但是容量嘛,支持情况如下图,Note注意到,每个通道最大也就32MB(8192*4K)的容量,这个在某些场合就不适用了。

part2

换个路子试试,找了个 AXI Memory Mapped to Stream Mapper,mm2s是不是能满足应用呢?贴出overview的一段谷歌翻译,好像我会错意了,该模块要成对使用,并且把地址什么的也压到AXIS接口去了,看来不是我们想要的。

AXI内存映射到流映射器IP(axi_mm2s_mapper)的功能是将AXI4内存映射(AXI4-MM)事务封装到一对AXI4-Stream(AXI4-S)接口上。这允许使用面积通常较小,频率更快的AXI4-S组件,并允许系统设计具有更大的灵活性。 AXI内存映射到流映射器IP旨在与成对使用,一对将AXI4-MM事务转换为AXI4-Stream事务,另一半以相反的操作执行以扩展AXI4-S事务到AXI4-MM事务。 AXI4-MM写地址,读地址和写数据通道映射到一个AXI4-S主接口,而读数据和写响应通道映射到一个AXI4-S从接口。通过及时复用两个AXI4-S接口,它们可以一起承载五个AXI4-MM通道。


VFIFO特性说明

  • 通道数:1
  • 接口 AXI Stream (不支持Last、 Keep)
  • FIFO容量:1GB(DDR3容量)
  • 输入输出异步时钟:支持
  • 测试平台:黑金开发板AX7z035
  • 开发环境:vivado19.1

DDR3带宽的计算

内存带宽计算公式:带宽=内存核心频率×内存总线位数×倍增系数

6400MB = 200 X 4 X8

内存时序

这个带宽能不能达到,内存时序没做细研究,对我来说够用了。映射成VFIFO,读写时序切换带宽也略有损失,如果比较要求高的话可以提高busrt_length,后面会提及。

 

设计框图

  1. match_fifo(**X**)
    • 用于位宽适配,DDR3端的位宽为256bit,目前接口采用的128,使用时可根据需求对其进行修改,位宽修改是通过AXI4-Stream Data Width Converter实现的;里面的FIFO位宽采用256bit,与DDR端相匹配;
  2. mem_manager
    • 内存管理主要实现了读写地址管理,读写控制。实现方式Ring,循环缓冲区;
  3. mem_burst
    • DDR3 native接口控制,实现burst模式的读写,读写长度受限于match_fifo的长度;
  4. ddr3
    • mig核实现的片外内存访问。

实现描述

DDR3映射为VFIFO,并采用AXI2-stream的接口封装形式,方便与设计的端逻辑标准接入。如果对LAST、KEEP信号有需求的用户,可以对数据做帧头、帧尾封装,以适应具体需求。

VFIFO实现方式:将内存看做buffer,通过读写地址的控制,实现了循环缓冲区,并增加了empty、half_full、full信号,用于外部使用。其中DDR3的控制采用native接口(AXI4-MM接口还是比较复杂的),采用burst的模式,这样可以减轻状态切换的频次,进而增加了读写带宽。

mem_manager 读写控制,burst_length单次传输长度为FIFO的一半,当输入端match_fifo内的数据长度 > burst_length时,触发写do_tx输入给manager,当输入端match_fifo内的数据长度<burst_length时,触发do_rx信号输入给manager,并且根据产生的empty、full信号,进而控制读写逻辑和读写地址。

如果修改busrt_length,首先注意两点,1、确保读写切换过程中match_fifo不被填满,保证数据不丢失。2、FPGA内部RAM资源有限、增加长度势必考虑整个工程的BRAM使用情况。

小提示:

AXIS FIFO的实际长度>=设计参数的长度。这个很好理解,每个BRAM块的大小为18K或36K,为了保证你设计的长度,BRAM容量块肯定>=设计容量,xilinx IP对其是全使用的。这就造成仿真下与实际应用中,FIFO填满时长度不一致的情况,要以实际测试的为准。

联系方式:1174316744@qq.com

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bitQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值