FPGA纯verilog实现RIFFA的PCIE测速实验,提供工程源码和QT上位机

news/2024/7/21 6:12:54 标签: fpga开发, qt, RIFFA, PCIE, 图像处理

目录

  • 1、前言
  • 2、RIFFA理论基础
  • 3、vivado工程详解
  • 4、上板调试验证并演示
    • QT上位机源代码
    • QT源代码解析
  • 5、福利:工程代码的获取

1、前言

PCIE是目前速率很高的外部板卡与CPU通信的方案之一,广泛应用于电脑主板与外部板卡的通讯,PCIE协议极其复杂,想要掌握不容易,所以Xilinx和Altera等FPGA厂商直接推出了相关IP供用户使用,比如Xilinx的XDMA,这种IP直接集成了PCIE通信的所有内核资源,并已封装为AXIS接口,用户在使用时只需要按照AXIS流数据格式收发即可,相当于傻瓜式使用PCIE,但是,如果你想装个杯,想要自己研究甚至手写一个PCIE收发器呢?那本文就适合你的胃口了。。。
本文详细描述了RIFFA的实现设计方案,使用Xilinx的PCIE IP作为桥接工具,实现PCIE和电脑主机的简单通信,并在电脑端运行测试测试的QT上位机,工程代码编译通过后上板调试验证,文章末尾有演示效果,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字成像和图像传输领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

RIFFA_6">2、RIFFA理论基础

关于RIFFA理论基础,前面我已经写了一篇文章,详细描述过,请参考之前的文章链接RIFFA

3、vivado工程详解

点击查看RIFFA
本设计根据前面的工程修改而来,但与前面的工程有如下不同:
1、前面的工程中,我们将RIFFA代码封装成了自定义IP,有的兄弟反馈说这样不好看代码,所以本工程不再封装IP;
2、前面的工程是PCIEX4,为了和后面的PCIE采集视频的工程兼容,我们选择PCIEX2的板子作为实验对象,因为之前PCIEX4的板子没有视频输入接口,而有视频输入接口的板子仅做到了PCIEX2,所以本工程的PCIE IP需要修改为PCIEX2;
3、为了和之前的图像处理和网络通信的工程vivado版本兼容,将开发环境改回到Vivado2019.1;

开发板:Xilinx xc7a100tfgg484-2
开发环境:Vivado2019.1;
输入输出:PCIEX2;QT上位机显示收发速率;
工程代码架构如下:在这里插入图片描述
由于没有封装自定义IP,所以也就没有BD部分了;
PCIE 的位宽 X4 修改为 X2;设置 PCIE 通道为 X2,两个通道,链路速度选择为 5GT/s,AXI 时钟选择为 125M,位宽设置为 64bit,如下图:
在这里插入图片描述
在 Core Capability 页将事务层最大负载数据修改为 512 字节,最大可支持到 1024 字节,不过负载数据变大,需要增加 BRAM 资源来缓冲数据,因此不能设置太大,如果太小,则影响 PCIE 的传输效率,因此常规选择 512KB。
在这里插入图片描述
细节:将头文件 functions.vh 文件设置为全局头文件,否则综合会报错,如下图:
在这里插入图片描述
FPGA资源消耗和功耗预估如下:
在这里插入图片描述

4、上板调试验证并演示

打开电脑的设备管理器,查看 PCIE 设备是否处于工作状态,如果不处于正常工作或者有感叹号,则需要重装驱动,关于驱动部分,请参考之前的文章链接RIFFA
在这里插入图片描述
打开PCEI 测速助手,如果检测到 PCIE 板卡插入,会显示可进行读写速度测速,如果未插入 PCIE 板卡,则显示,为插入 PCIE
QT上位机位置如下:
在这里插入图片描述
点击测速,即可进行 PCIE 测速,速度显示如下图所示,笔者测量办法是写一短数据的时间与读一段数据的时间进行大概估算读写速度。
在这里插入图片描述

QT上位机源代码

QT上位机源代码如下:
在这里插入图片描述
说明如下:
1、gaugecar.h 是仪表盘程序,可进行仪表盘显示数据等操作。
2、 main.cpp 是程序入口
3、 widget 为测速与逻辑控制程序。
4、 widget.ui 为图形化界面.
5、程序主要逻辑是在 widget.cpp 文件

QT源代码解析

程序如果找到设备就显示读写速度测试,如果未找到设备,显示未检测到设备,如果按下测速按键,则先获取当前时间 1,发送 1080x1920x60 个 32 位数据后,再获取时间 2,通过时间 1 与时间 2 计算写入速度;然后读取发送的数据,在 fpga 源码里面会将原本数据原原本本的发回电脑,因此接收数据后,获取当前时间 3,即可通过时间 3 与时间 2 计算读取数据时间进而计算读取速度。然后将读写速度通过仪表盘进行显示。
具体看源代码。

5、福利:工程代码的获取

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
在这里插入图片描述
网盘资料内容如下:已压缩,方便大家下载。。。
在这里插入图片描述


http://www.niftyadmin.cn/n/165128.html

相关文章

pytorch单张图片预测,如何代替DataLoader

1. 批量读取 trainset, valset, testset = get_dataset(cfg)test_loader = DataLoader(testset, batch_size=1, shuffle=False, num_workers=cfg[num_workers])这是一个 PyTor

Go语言快速的一键生成一个gRPC服务

目录 前言 介绍 使用命令行工具 micro 生成 gRPC 服务 安装: 创建项目: 安装 protobuf 和依赖项: 构建并运行服务: 总结 前言 由于近期因为一些事情很久没更了今天带来一个Go语言如何快速的一键生成一个gRPC服务的教程 1 介…

乘法逆元之欧几里得和扩展欧几里得

乘法逆元 文章目录乘法逆元一、模运算的性质二、除法的模运算1、除法模运算2、解决除法模运算问题三、乘法逆元1、定义2、**逆元是干什么的呢**四、求解逆元1、费马小定理2、扩展欧几里得(exgcd)(1)裴蜀定理(2&#xf…

YOLOv5源码逐行超详细注释与解读(4)——验证部分val(test).py

前言 本篇文章主要是对YOLOv5项目的验证部分。这个文件之前是叫test.py,后来改为val.py。 在之前我们已经学习了推理部分detect.py和训练部分train.py这两个,而我们今天要介绍的验证部分val.py这个文件主要是train.py每一轮训练结束后,用v…

Apache STORM工作原理详解

Apache Storm是一个分布式实时计算系统,允许用户在集群上运行流式数据处理应用程序。它的核心原理是将流式数据分割成多个小块,每个小块都会被分配给不同的计算节点进行处理,并且处理结果会被发送到下一个节点,直到达到最终结果。…

C语言指针操作(十一)有关指针的小结

由于指针的内容较多,指针的概念和应用比较复杂,不易掌握,本节对有关指针的知识和应用作简单的归纳小结。 目录 (1)首先要准确理解指针的含义。 (2)在 C 语言中,所有的数据都是有类…

archaius使用

Netflix Archaius是一个配置管理库,其重点是来自多个配置存储的动态属性。它包括一组用于Netflix的Java配置管理API。它主要实现为Apache Commons Configuration库的扩展。提供的主要功能有: 动态、类型属性高吞吐量和线程安全的配置操作一个轮询框架&a…

IoT小程序框架快速体验:ASP-80智显面板设备配网与真机更新

背景 从环境搭建到程序开发,再到真机更新体验了 IoT小程序框架 的使用流程。其中,略过了程序开发过程,而是直接采用入门案例中的公板案例(模拟器测试)与智能闹钟案例(真机测试:ASP-80智显面板&…