基于Xilinx XDMA 的PCIE通信

2023-11-16

基于Xilinx XDMA 的PCIE通信

概述:
  想实现基于FPGA的PCIe通信,查阅互联网各种转载…基本都是对PCIe的描述,所以想写一下基于XDMA的PCIe通信的实现(PCIe结构仅做简单的描述(笔记),了解详细结构移至互联网)。实践实践!!!

说明:
参考文档:
PCI Express Base Specification Revision 3.0
PCI Express Base Specification Revision 5.0
pg195-pcie-dma
PCI Express体系结构导读

环境:Vivado2019.2。

第一篇:基于Xilinx XDMA 的PCIE通信
第二篇:基于XDMA 的PCIE读写DDR

直通☛ 200页+ FPGA/IC秋招面试笔试题


一、读写BRAM实例

读写文件:

1、PC通过CMD执行以下命令,将 pc2fpga.bin 文件下的4096Byte写入FPGA 起始地址为0x00000000:

xdma_rw.exe h2c_0 write 0x0000000 -b -f pc2fpga.bin -l 4096

pc2fpga.bin文件内容如下所示:
在这里插入图片描述
PC通过CMD执行以下命令(TX):
在这里插入图片描述
FPGA数据接收(RX):
在这里插入图片描述

2、PC通过CMD执行以下命令,从FPGA读取4096Byte写入到PC的 fpga2pc.bin 文件里:

xdma_rw.exe c2h_0 read 0x0000000 -b -f fpga2pc.bin -l 4096

PC通过CMD执行以下命令(RX):
在这里插入图片描述
观察在cmd访问的文件夹下,接收并创建了fpga2pc.bin文件,大小为4KB
在这里插入图片描述
接收到的数据fpga2pc.bin 如下所示:
在这里插入图片描述

FPGA端正在上传的数据(TX):
在这里插入图片描述
FPGA上传的数据是怎么产生的?
PC端接收到的数据是FPGA提前写入BRAM的数据,当PC下发读取指令时即读取的为BRAM的数据,那我们BRAM提前写入的是什么呢?提前通过RTL代码将一下数据写入BRAM0。
在这里插入图片描述
则BRAM中的数据为:

0 1 2 3 4 5 6 7 8 9 a b c d e f
00h 00 00 00 00 04 04 04 04 08 08 08 08 0c 0c 0c
10h 10 10 10 10 14 14 14 14 18 18 18 18 1c 1c 1c
20h 20 20 20 20 24 24 24 24 28 28 28 28 2c 2c 2c

再对比读回来的数据,无误。

读写数据:

3、PC通过CMD执行以下命令,写32Byte

0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e 0x1f

的数据到FPGA:

xdma_rw.exe h2c_0 write 0x0000008  -l 32 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e 0x1f

PC端 cmd输入(TX):
在这里插入图片描述
FPGA数据接收(RX):
在这里插入图片描述

4、PC通过CMD执行以下命令,读取32Byte的数据到PC:

xdma_rw.exe c2h_0 read 0x0000000  -l 32

PC端 cmd输入(RX):
在这里插入图片描述
FPGA正在上传的数据(TX):
在这里插入图片描述

2.5.2 BAR空间的访问

对应的是对BAR_PORT的操作。

在这里插入图片描述

1、PC通过CMD执行以下命令,通过PCIe BAR空间将4Byte数据映射到AXI_Lite寄存器:

xdma_rw.exe control write 0x08 -l 32 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e 0x1f

PC端 cmd输入(TX):
在这里插入图片描述

FPGA接收的数据(RX):
在这里插入图片描述

2、PC通过CMD执行以下命令,PCIe BAR空间访问AXI_Lite寄存器读取4Byte的数据:

xdma_rw.exe user read 0x08 -l 4

PC端 cmd输入(RX):
在这里插入图片描述
观察接收到FPGA返回的数据为0x08080808.
观察FPGA正在上传的数据(TX):
在这里插入图片描述
无误。

二、读写DDR实例

1、PC通过CMD执行以下命令,将 pc2fpga.bin 文件下的4096Byte写入DDR起始地址为0x00000000:

xdma_rw.exe h2c_0 write 0x0000000 -b -f pc2fpga.bin -l 4096

pc2fpga.bin文件内容如下所示:
在这里插入图片描述
PC通过CMD执行以下命令(TX):
在这里插入图片描述
验证数据是否写入DDR,我们通过逻辑代码进行DDR数据的读取:
从地址0000_0000h读取大小为4096Byte的数据。
在这里插入图片描述
观察源文件其实就是斜坡数据。
在这里插入图片描述

观察第一个256bit数据为:
在这里插入图片描述
最后一个256bit数据为:
在这里插入图片描述
在PC CMD端输入以下指令也读取DDR数据,与用户读取的数据进行对比,无误。

xdma_rw.exe c2h_0 read 0x0000000  -l 4096

CMD读取的数据:
在这里插入图片描述
在这里插入图片描述

2、通过VIO输入地址和数据大小,进行相应的DDR数据读取。
从地址0000_0080读取64Byte的数据,即512bit数据。
在这里插入图片描述

对比PC端读取DDR0000_0080读取64Byte的数据,一样的✌
在这里插入图片描述

3、FPGA端通过VIO实现从DDR任意地址,任意地址大小数据的读取。
user_raddr:通过VIO写入要读取DDR数据的地址。
user_rsize:通过VIO写入要读取DDR数据的大小(单位为Byte)。
user_rexe:点击一次,执行一次读操作。
请添加图片描述

5.2 BAR空间的访问

1、PC通过CMD执行以下命令,通过PCIe BAR空间将4Byte数据映射到AXI_Lite寄存器:

xdma_rw.exe control write 0x08 -l 32 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e 0x1f

PC端 cmd输入(TX):
在这里插入图片描述

FPGA接收的数据(RX):
在这里插入图片描述

2、PC通过CMD执行以下命令,PCIe BAR空间访问AXI_Lite寄存器读取4Byte的数据:

xdma_rw.exe user read 0x08 -l 4

PC端 cmd输入(RX):
在这里插入图片描述
观察接收到FPGA返回的数据为0x08080808.
观察FPGA正在上传的数据(TX):
在这里插入图片描述
无误。

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

基于Xilinx XDMA 的PCIE通信 的相关文章

  • MIPI D-PHY介绍(二) FPGA

    MIPI D PHY介绍 二 FPGA 随着移动设备的广泛普及 MIPI D PHY作为其最主要的物理层标准之一 被越来越多地使用在各种嵌入式系统中 本文将详细介绍MIPI D PHY的工作原理和在FPGA设计中的实现方法 MIPI D P
  • 【FPGA入门】第八篇、FPGA驱动VGA实现动态图像移动

    目录 第一部分 实现效果 第二部分 动态VGA显示的原理 1 将动态显示的区域提前进行赋值 2 图像块的移动是每张图片叠加后的效果 3 如何实现图像块位置的改变 第三部分 系统结构和驱动波形 1 系统的Top down结构 2 图像块移动的
  • PLL时钟约束

    方法 1 自动创建基时钟和 PLL 输出时钟 例 derive pll clocks 这一方法使您能够自动地约束 PLL 的输入和输出时钟 ALTPLL megafunction 中指定的 所有 PLL 参数都用于约束 PLL 的输入和输出
  • J-Link仿真器与JTAG和SWD下载与接线

    目录 1 JTAG 1 1JTAG今天被用来主要的三大功能 1 2JTAG引脚 1 3可选引脚 2 SWD 2 1 SWD引脚 2 2 可选择引脚 2 3 JTag和SWD模式引脚定义 3 J Link仿真器 4 IAR与MDK配置两种下载
  • Verilog HDL——分频 计数

    分频 计数 module traffic Clk 50M Rst Clk30 Clk 1Hz input Clk 50M Rst output Clk30 Clk 1Hz 分频器 reg Clk 1Hz 分频器 50M分频 reg 31 0
  • 硬件基础知识

    SPI是串行外设接口 Serial Peripheral Interface 的缩写 是一种高速的 全双工 同步的通信总线 SCLK SCLK是一种有固定周期并与运行无关的信号量 CLK CLK是一种脉冲信号 TDNN 时延神经网络 它的两
  • FPGA零基础学习之Vivado-UART驱动教程

    FPGA零基础学习之Vivado UART驱动教程 本系列将带来FPGA的系统性学习 从最基本的数字电路基础开始 最详细操作步骤 最直白的言语描述 手把手的 傻瓜式 讲解 让电子 信息 通信类专业学生 初入职场小白及打算进阶提升的职业开发者
  • SD卡读写实验(SPI模式)

    对于 SD 卡的 SPI 模式而言 采用的 SPI 的通信模式为模式 3 即 CPOL 1 CPHA 1 在 SD 卡 2 0 版 本协议中 SPI CLK 时钟频率可达 50Mhz SD 卡的 SPI 模式 只用到了 SDIO D3 SP
  • 最详细的Vivado安装教程

    V i v a d o 安 装
  • 跨时钟域处理方法(一)——打拍

    一 说明 处理跨时钟域的数据可以分为单bit数据和多bit数据 而打拍的方法主要常见于处理单bit数据的跨时钟域问题 打拍的本质是通过添加寄存器 对输入的数据进行延拍 其主要目标是消除亚稳态的影响 常见的是打2拍 也就是添加2级寄存器 二
  • 上拉电阻和下拉电阻

    一 定义 上拉电阻 将一个不确定的信号 通过一个电阻与电源VCC相连 固定在高电平 下拉电阻 将一个不确定的信号 通过一个电阻与地GND相连 固定在低电平 二 作用 提高输出信号驱动能力 确定输入信号电平 防干扰 限流 阻抗匹配 抗回波干扰
  • 【Xilinx DDR3 MIG】Xilinx FPGA DDR3读写实验相关用户接口引脚解释

    目录 DDR3读写实验 实验框图 时钟模块 DDR3读写及LED指示模块 MIG IP核 用户接口解释
  • 八、RISC-V SoC外设——GPIO接口 代码讲解

    前几篇博文中注释了RISC V的内核CPU部分 从这篇开始来介绍RISC V SoC的外设部分 另外 在最后一个章节中会上传额外添加详细注释的工程代码 完全开源 如有需要可自行下载 目录 0 RISC V SoC注解系列文章目录 1 结构
  • BUCK电路分析(二)

    BUCK电路分析 二 PSIM仿真同步BUCK电路 在上片文章中 初步的分析了BUCK电路的工作原理 本章使用PSIM软件仿真BUCK电路 观察分析BUCK电路器件关键波形 图1是同步BUCK电路图 开关频率设置为200K 固定占空比 在仿
  • 画时序图软件——TimeGen和Timing Designer下载

    在写实验报告的时候需要画波形图 但是手头没有很好的软件 就上网搜了一些 分享出来 这里分享的是TimeGen和Timing Designer两个软件 资源均来自网上 有侵权请联系 TimeGen使用和安装都比较简单 我发的应该里面有破解方法
  • macOS DriverKit:制作 PCI dext 来替换内置驱动程序

    我正在尝试在 DriverKit 中编写一个用户空间 PCI 驱动程序 用于教育 研究目的 我找到了一个来自 WorthDoingBadly 的示例其中包含 PCI 设备 dext 的样板代码 我已删除了漏洞利用代码 我已将其修改为通过以下
  • 从 x86 CPU 生成 64 字节读取 PCIe TLP

    将数据写入 PCIe 设备时 可以使用写入组合映射来提示 CPU 应生成针对该设备的 64 字节 TLP 是否可以对读取做类似的事情 以某种方式提示 CPU 读取整个缓存行或更大的缓冲区 而不是一次读取一个字 英特尔有关于从视频 RAM 复
  • 串口通信知识点总结

    串口是串行接口 serial port 的简称 也称为串行通信接口或COM接口 串口通信是指采用串行通信协议 serial communication 在一条信号线上将数据一个比特一个比特地逐位进行传输的通信模式 串口按电气标准及协议来划分
  • Matlab图像处理系列——图像复原之噪声模型仿真

    微信公众号上线 搜索公众号 小灰灰的FPGA 关注可获取相关源码 定期更新有关FPGA的项目以及开源项目源码 包括但不限于各类检测芯片驱动 低速接口驱动 高速接口驱动 数据信号处理 图像处理以及AXI总线等 本节目录 一 图像复原的模型 二
  • MINI-UTDE 10 BASE-T 集成控制器

    MINI UTDE 10 BASE T 集成控制器 MINI UTDE 10 BASE T 拥有多达三个本地I O板和远程I OS总线通信 为用户提供了一系列生产单元功能的单一控制点 包括诸如夹头 反馈器和辅助机器等外围生产设备 支持所有主

随机推荐

  • Discuz!X模板代码解析--Header(头文件)

    Discuz X模板代码解析 Header 头文件 header html这个文件存储于common文件下 这个大家应该不陌生吧 我是每个DIV为小节来讲 头部的核心div我就不加if语句来讲解 因为代码太多了 我会在最下面给大家总结一下
  • 【数据分析入门】Seaborn[散点图、条形图、计数图、热力图、箱型图、小提琴图]

    这里写目录标题 一 数据 二 画布外观 2 1 Seaborn样式 2 2 上下文函数 2 3 调色板 三 使用 Seaborn 绘图 3 1 坐标轴栅格 3 2 各类图形 3 2 1 散点图 3 2 2 条形图 3 2 3 计数图 3 2
  • Java编写的公交查询系统 功能非常齐全 完整源码

    今天为大家分享一个java语言编写的教室管理系统 目前系统功能已经很全面 后续会进一步完善 整个系统界面漂亮 有完整得源码 希望大家可以喜欢 喜欢的帮忙点赞和关注 一起编程 一起进步 开发环境 开发语言为Java 开发环境Eclipse或者
  • Android机上跑linux(结果为Termux)

    文章目录 前言 Termux 前言 需求 我只想可以运行自己写的python程序 需要这个系统能有网络地址 能ssh 能连别人 也能别人连自己 能pip安装上合适的包 比如numpy 过程 ipad上搞ish 优点 垃圾IOS闭源生态 就它
  • 春秋云境:CVE-2022-22947

    春秋云境 CVE 2022 22947 文章合集 春秋云境系列靶场记录 合集 Spring Cloud Gateway spel 远程代码执行 CVE 2022 22947 漏洞介绍 Spring Cloud Gateway 远程代码执行漏
  • 永洪科技入选2023 商业智能应用案例TOP10

    8月13日 由DBC联合CIW CIS推出 经过两轮多维度评价 评议 评选 2023 商业智能应用案例TOP10 发布 永洪科技案例入选 电力行业数字化转型 数字化技术渗透至电力产业 发 输 变 配 用 各个环节 电力企业在复杂的产业环境中
  • 解决开发中Win Linux差别(持续更新)

    1 目录分隔符 Winxp Linux 解决办法 采用 File separator web目录 request getSession getServletContext getRealPath 数据库中图片目录用 serverInfo i
  • 【docker】将本地镜像push上传到dockerhub上,再从dockerhub上pull下来到本地,并运行的过程

    使用指示 完成本章操作 你需要有魔法 绿色 备注 红色或高亮 重点 要修改的地方 要注意的地方 注册dockerhub 登录官网 注册一个账号 需要用户名 邮箱 密码 前提是有魔法 不然邮箱会报错 然后在官网直接登录一下 在本地用命令行登录
  • ctfshow-菜狗杯-抽老婆

    任意文件读取 抽老婆 打开首先发现是一个图片下载 老婆们都很不错 感觉也没什么其他的东西 先F12看一下代码 发现有一处标注 感觉跟任意文件下载有关 一开始的错误思路 想着先扫一遍看看能不能发现啥 于是用dirsearch扫了一下 发现了
  • LAMP架构

    LAMP架构介绍 1 1LAMP平台概述 LAMP架构是目前成熟的企业网站应用模式之一 指的是协同工作的一整台系统和相关软件 能够提供动态web站点服务及其应用开发环境 LAMP是一个缩写词 具体包括Linux操作系统 Apache网站服务
  • 佳博 热敏打印机 ESCPOS 指令研究

    Test txt内容 参考打印到文档功能 初识打印机驱动 http www cnblogs com MrDing p 4078189 html 热敏打印头打印原理和C实现黑白位图的放大 https www jianshu com p c75
  • 一般报java.lang.NullPointerException的原因有以下几种

    一般报java lang NullPointerException的原因有以下几种 字符串变量未初始化 接口类型的对象没有用具体的类初始化 比如 List lt 会报错 List lt new ArrayList 则不会报错了 当一个对象的
  • 如何创建与框架无关的JavaScript插件

    本文旨在介绍个人在研读源码的时的一些浅薄理解 希望能对各位有一些帮助 本文将对所有可能遇到的知识点或细节进行注解或链接 跳转 以保证各位读者都能看懂 如果文中有说的不对的或者引导方向不正确的 欢迎各位批评指正 欢迎在评论区交流补充 感谢阅读
  • 【H.264/AVC视频编解码技术详解】八、 熵编码算法(2):H.264中的熵编码基本方法、指数哥伦布编码

    H 264 AVC视频编解码技术详解 视频教程已经在 CSDN学院 上线 视频中详述了H 264的背景 标准协议和实现 并通过一个实战工程的形式对H 264的标准进行解析和实现 欢迎观看 纸上得来终觉浅 绝知此事要躬行 只有自己按照标准文档
  • 关于T5/T5L屏幕触控异常的问题的一些见解

    近段时间在使用迪文屏过程中因为对于迪文产品知识不了解不熟悉 导致在开发或使用的过程中因为操作不当或其他种种原因而导致屏幕触控之后没有反应 触摸偏移或者说按下触控之后屏幕没有相应的动作 在此将近段时间的出现的情况及解决办法总结一下 供其他客户
  • 3.30黄金下跌原因解析;3.31原油及沪金银操作建议

    黄金行情解析 周二黄金价格萎靡不振 持续下行甚至探至1704 56美元 目前正处于1710美元附近苟延残喘 新冠疫苗接种计划复苏 提振投资者转向股票期货价格 避险黄金受到严重挑战 尽管中美地缘政治战从口水战转化成实质的制裁行动 但现时中美两
  • 自制教学用ESP32开发板【ESP32_Py_Board】① 开发环境搭建

    摘要 由于教学需要 自己设计了一款ESP32开发板 用于 短距离无线通信 课堂教学使用 开发板整体效果如下图 该开发板采用Type C接口供电 板载CH340K串口芯片 支持自动下载 240 240全彩SPI接口显示屏 温度传感器DS18B
  • Node.js详解(三):Node.js的安装及基本使用

    文章目录 一 Node js 安装配置 二 nvm介绍及使用 推荐使用node版本管理工具 1 介绍 2 安装 3 基本使用安装 管理nodejs 4 命令提示 三 第一个Node js程序 Hello World 脚本模式 交互模式 一
  • SiC MOSFET应用中出现的串扰问题,提出3种有效应用对策

    针对 SiC MOSFET 模块应用中出现的串扰问题 百度网盘 请输入提取码 提取码9dfv 本文对测量使用的差分探头进行了详细对比 由结果可知采用高带宽和高采样率的示波器和差分探头可测 量得到准确的信号波形 同时分析了串扰问题的产生 机制
  • 基于Xilinx XDMA 的PCIE通信

    基于Xilinx XDMA 的PCIE通信 概述 想实现基于FPGA的PCIe通信 查阅互联网各种转载 基本都是对PCIe的描述 所以想写一下基于XDMA的PCIe通信的实现 PCIe结构仅做简单的描述 笔记 了解详细结构移至互联网 实践实