xilinx平台下DDR3映射为VFIFO

2023-11-10

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

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

xilinx平台下DDR3映射为VFIFO 的相关文章

  • Quartus II 安装

    本次介绍使用的 Quartus 版本为 10 1 目前 Quartus II 官网已经没有 13 1 以下版本的安装包 大家可以安装 13 1 以上版本的软件 功能都是大同小异 下载地址 FPGA Software Download Cen
  • SmartFusion从FPGA到ARM(四)——MSS_TIMER定时器的使用

    文章目录 1 定时器资源简介 2 MSS TIMER库函数简介 3 简单的周期性中断 4 自定义产生波形 5 64位定时器的使用 6 单次中断模式 系列教程 SmartFusion从FPGA到ARM系列教程 1 定时器资源简介 SmartF
  • PLL时钟约束

    方法 1 自动创建基时钟和 PLL 输出时钟 例 derive pll clocks 这一方法使您能够自动地约束 PLL 的输入和输出时钟 ALTPLL megafunction 中指定的 所有 PLL 参数都用于约束 PLL 的输入和输出
  • verilog中wire和reg类型的区别

    module counter parameter CNT MAX 25 d24 999 999 input wire sys clk input wire sys rst n output reg led out reg 24 0 cnt
  • 最详细的Vivado安装教程

    V i v a d o 安 装
  • FPGA实战--等精度频率测量

    首先放置效果图 本次试验中采用的是等精度测频率 等精度测频的原理是产生一个1s的高电平 在高电平中对被测方波进行计数 所测得数字即该波形频率 具体等精度测量原理请参考 http www elecfans com d 591858 html
  • 采用Vivado 配置xilinx GTX的SATA设计

    从Vivado开始 配置GTX的时候 多了一个SATA协议支持 但有些小地方还需要自己另外设置 整理了一下 分享给大家 首先打开Transceivers wizard 打开页签 线速率和参考时钟选择 在协议里面选择SATA2或者SATA3
  • xilinx xdma PCIe中断bug

    xilinx xdma PCIe中断存在bug bug1 此中断虽然是msi或者msx中断 但是不中断cpu bug2 此中断不是边沿中断 而是电平中断 在驱动层需要不断地轮训查询中断事件 bug3 此中断持续时间必须长 而且在收到中断应答
  • FPGA Lattice Diamond 开发环境搭建

    FPGA Lattice Diamond 开发环境搭建 Lattice Diamond 软件下载 在浏览器中输入 Lattice 的官网地址 http www latticesemi com 进入官网首页在上方选择产品系列选项 出现如下图所
  • [从零开始学习FPGA编程-38]:进阶篇 -语法-函数与任务

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 目录 前言 第1章 什么是函数Function 1 1 什么是函数 1 2 函
  • VHDL:按钮去抖动(或不去抖动,视情况而定)

    我已阅读其他帖子 但似乎无法修复我的 我是 VHDL 新手 所以我确信这是一个简单的修复 简而言之 按钮没有防抖 代码编译和比特流程序 在测试台中 按下按钮可以工作 但输出 LED 不会改变 在板上 按下按钮会使随机 LED 亮起 我猜是因
  • 异步FIFO设计之格雷码

    目录 二进制转格雷码 格雷码转二进制 相邻的格雷码只有1bit的差异 因此格雷码常常用于异步fifo设计中 保证afifo的读地址 或写地址 被写时钟 或读时钟 采样时最多只有1bit发生跳变 在不考虑路径延时的情况下 因为源数据 读写地址
  • 在 C 中操作 80 位数据类型

    我正在用 C 实现一些加密算法 其中涉及 80 位密钥 特定操作涉及将密钥旋转移位 x 个位数 我已经尝试过 long double 类型 如果我没记错的话 它是 80 位 但这不适用于位移运算符 我能想到的唯一替代方案是使用 10 个元素
  • 异步FIFO设计之格雷码

    目录 二进制转格雷码 格雷码转二进制 相邻的格雷码只有1bit的差异 因此格雷码常常用于异步fifo设计中 保证afifo的读地址 或写地址 被写时钟 或读时钟 采样时最多只有1bit发生跳变 在不考虑路径延时的情况下 因为源数据 读写地址
  • if 语句导致 Verilog 中的锁存推断?

    我正在编写用于合成算法的 Verilog 代码 我对哪些情况可能导致推断锁存器有点困惑 下面是这样的一段代码 虽然它在模拟中工作得很好 但我担心它可能会导致硬件问题 always b1 or b2 b1 map b2 map m1 map
  • 如何在Altera Quartus中生成.rbf文件?

    什么是 rbf 文件以及如何在 Windows 上从 Quartus 输出文件 sof 生成它们 An RBF is a 原始二进制文件例如 它代表原始数据 这些数据将被加载到闪存中 以便在上电时初始化 FPGA A SOF is an S
  • FPGA 有哪些实际应用?

    我对我的程序为一个小型七段显示器提供动力感到非常兴奋 但是当我向不在现场的人展示它时 他们总是说 那么你能用它做什么 我永远无法给他们一个简洁的答案 谁能帮我吗 第一 它们不需要具有易失性存储器 事实上 大厂商 Xilinx Altera
  • 赋值语句中的“others=>'0'”是什么意思?

    cmd register process rst n clk begin if rst n 0 then cmd r lt others gt 0 elsif clk event and clk 1 then cmd r lt end if
  • 从 OpenCV 代码到 FPGA 代码的转换是否比 Matlab 代码更容易? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想做一个关于图像处理的项目 我想知道如果我想在FPGA上实现这个项目 我应该在第一阶段选择Matla
  • 学习 Verilog 的资源 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我是 Verilog 新手 有人可以推荐学习资源 书籍 视频 博客或任何他们有良好个人经验并帮助他们更

随机推荐

  • I2C之知(四)--I2C总线的7bit从机地址 数据传输时序的详细过程

    时钟拉伸 Clock stretching clock stretching通过将SCL线拉低来暂停一个传输 直到释放SCL线为高电平 传输才继续进行 clock stretching是可选的 实际上大多数从设备不包括SCL驱动 所以它们不
  • MVC模式实现简单的访问数据库(JSP+Servlet+JavaBean)

    MVC模式 MVC模式一般由JSP Servlet JavaBean组成 其中JSP用于表示数据 Servlet用于处理客户请求 充当控制器的角色 JavaBean用于数据的存取 其运行机制如下 下面用一个简单的留言板例子来实现一下MVC模
  • exe文件 上传 服务器,域服务器exe文件发布教程.doc

    exe文件的发布 我以 winrar exe 的发布举例 步骤1 在C盘根目录新建一个 soft 目录 并共享该目录 如下图 步骤2 把 winrar exe 软件放到共享文件夹 soft 里面 步骤3 在soft目录里
  • vue中用Element-ui封装表单(form)和表格(table)组件动态渲染数据展示

    老样子 先来个效果图 查询表单数据和表格的列信息以及表格数据都是从后端拿到后自动渲染成下面的格式 一 先创建表格和表单组件 下面的form和table组件 可以直接复制使用的 如果你需要 form vue
  • python 类装饰器的好处_python 装饰器重要在哪

    1 什么是装饰器 要理解什么是装饰器 您首先需要熟悉Python处理函数的方式 从它的观点来看 函数和对象没有什么不同 它们有属性 可以重新分配 def func print hello from func func gt hello fr
  • 在QT的信号槽中使用自定义数据类型

    qt中使用信号槽来处理GUI与后台数据同步是不错的 耗时的任务可以在处理完数据后使用信号通知UI更新 对于qt中的已有类型 可以直接使用 但 多数时候都需要用到自定义类型 如果像内建类型那样使用 编译时正常 但运行时会报错 QObject
  • javax.xml.parsers.FactoryConfigurationError: Provider for javax.xml.parsers.

  • linux 打开.v文件,构建riscv上运行的linux系统

    在qemu上启动linux kernel 总述 最终目标还是要在RTL上跑linux系统 但做这个之前第一步先把系统工具链整清楚很重要 所以先在qemu上把相关的工具链 镜像搞定 为了完全这项任务 我们需要安装几个工具 qemu for r
  • VIM编辑命令

    转载 进入编辑模式 vim命令模式 vim实践 吉米乐享驿站 博客园 cnblogs com 5 5 进入编辑模式 所谓编辑模式就是进入到一个可以编辑文本文档的模式 常规的方式就是按小i进入编辑模式 左下角显示 insert插入 状态 此时
  • Java基础篇——入门

    转眼间这已经是自己工作的第五个年头了 期间做过安卓 做过web 现在又加入了小程序的阵营 可谓是历尽各种坎坷啊 让我不由得想起了 红楼梦 的开篇之句 满纸荒唐言 一把辛酸泪 期间的艰难困苦 实属夸张之感慨 无病呻吟 哈哈 只有自己能够体味啊
  • 语义分割制作自己的数据集——训练集、验证集、测试集

    用于语义分割的VOC数据集格式 语义分割任务voc数据集主要包括JPEGImages 存放原始图像 SegmentationClass 存放label ImageSets Segmentation 存放划分的数据集 包括train txt
  • VS2008, MFC 文件的操作3 - Win32 API 方式 文本方式打开

    接上一节笔记 VS2008 MFC 文件的操作2 C 语言方式 文本方式打开 1 代码 void Cvs2008 SX jiaocheng12View OnFileWritefile TODO 在此添加命令处理程序代码 Win32 API
  • cuda编程学习笔记 第二章 cuda memory management

    应用的性能可能有 75 都花费在内存相关问题上 NVPROF and NVVP 这俩是调试工具 不知道是不是基于CUPTI CUDA Profiler Tools Interface NVPROF是命令行工具 nvvp是可视化工具 nvvp
  • 12、适配器

    文章目录 package com example demo designpattern 又叫包装模式 Wrapper 各种 wrapper bridge 就是适配器模式 jbdc odbc bridge io 字节流字符流转换 角色 tar
  • STM32-ESP8266-12F与PC通信

    1 默认ESP8266的波特率是115200 2 指令及其返回值 3 使用PC的网络调试助手 协议类型选择TCP Server 端口号以80开头 表示TCP协议 如8080 8040等等 IP地址填PC的WI F网口的IP地址 配置完成后点
  • 解决浏览器设置代理IP无法上网的问题

    大家都知道 在当今信息时代 互联网已经成为了我们生活必不可少的一部分 而浏览器作为我们上网的窗口 更是被广泛使用 有时候 我们会遇到一些问题 例如设置了代理IP后无法正常上网 那么该如何解决这个问题呢 别担心 本文将为您一一解答 首先 让我
  • 易优cms:guestbookform 留言表单标签

    guestbookform 留言表单标签 基础用法 名称 guestbookform 功能 留言表单提交 语法 eyou guestbookform type default
  • 计算机组成中的阶符是什么意思,计算机中阶符,阶码,数符,尾数是什么?

    一般地 任一个二进制N 可表示为N 2j S 其中J为二进制数 叫阶码 J如果有正负号的话 正负号就叫阶符 S为纯小数 叫做尾数 数符 指的是N整个数的符号 二进制的 00101000 直接可以转换成16进制的 28 字节是电脑中的基本存储
  • 详解 Android 是如何启动的

    详解 Android 是如何启动的 2016 08 12 唐琪森 安卓开发 javascript void 0 来自 石头铺 微信号 Android Programmer 网站 www woaitqs cc 本文是 Android 系统学习
  • xilinx平台下DDR3映射为VFIFO

    FPGA开发中 数据采集 数据分析场景下需要用对高速ADC数据缓存 FPGA片内RAM无法做到大的容量 基于MIG IP做了个DDR3映射成FIFO的模块 以完成高速 量大的数据缓存应用 背景和选择 part1 官方也提供了类似功能的IP