关于xilinx使用PCIE实现FPGA的部分重配置实现(MCAP)

news2024/11/17 10:26:26

平台:vivado21018.3

芯片:xcku115-flva1517-2-i (active)

本文官方文档:Xilinx_Answer_64761_Ultrascale_Devices

本文驱动下载地址:64761 - Bitstream Loading across the PCI Express Link in UltraScale and UltraScale+ Devices for Tandem PCIe and Partial Reconfiguration (xilinx.com)

本文参考:Xilinx基于PCIE的部分重配置实现(一) | 电子创新网赛灵思中文社区 (eetrend.com)

要使用PCIE实现FPGA的部分可重构,就要理解为什么要使用PCIE来重构FPGA内部的电路。PCIE是一种即插即用的协议,这个就意味着在通电状态下,PCIE主机将枚举系统。这个过程包括主机从每个设备读取请求的地址大小,然后为该设备分配一个基本地址。因此在在主机查询PCIE接口时,必须要准备好它们,否则它们将不会被分配一个基本地址。

另外,PCIE规范规定,系统上电后,复位信号必须在100毫秒内取消断言,并且PCIE端口必须在复位信号取消断言后不超过20毫秒准备好进行链路训练。通常被称为100毫秒的启动时间要求。

Tandem Configuration(串联配置)采用两阶段方法,使IP能够满足PCI Express规范中指定的配置时间要求。该技术支持多种用例:

Tandem PROM

从闪存中加载单个两级位流。

Tandem PCIe

从闪存中加载第一阶段比特流,并通过 PCIe 链路将第二阶段比特流传递到 MCAP。

Tandem with Field Updates

在Tandem PROM或Tandem PCIe的初始配置之后,保持PCIe链接处于活动状态,更新整个用户设计。更新区域(平面图)和设计结构是预定义的,并提供了Tcl脚本。

Tandem + Partial Reconfiguration

这是Tandem配置后跟随任何大小或数量的部分重构(PR)的更一般情况。

Partial Reconfiguration over PCIe(PR over PCIe)

这是PR通常遵循的标准配置,使用PCIe / MCAP作为部分比特流的传递路径。

下面我们将采用PR over PCIe模式,通过PCIe的PR启用MCAP链路进行部分重新配置。

对于FPGA的配置方式可以使用JTAG、ICAP和MCAP来配置FPGA。它们具有一下区别:

JTAG

使用JTAG线对FPGA进行烧录配置。需要繁琐的烧录线。

ICAP

使用FPGA的内部配置接口,通过FPGA内部逻辑电路实现对FPGA的配置。

MCAP

主机通过PCIE接口向FPGA发送配置文件,从而实现对FPGA的烧写。

使用MCAP技术对FPGA进行重配置,可以在保证系统不用重新枚举PCI设备的前提下对FPGA某个动态区域进行逻辑修改。

支持的设备,这种配置方式目前只支持UltraScale系列器件。

 

关于Tandem PROM和Tandem PCIe这两个设计的区别。

Tandem PROM解决方案将比特流分为两个部分,并将这两个部分都从本地配置存储器(PROM或者其他存储器)加载。bit流的第一部分配置设计的PCIE部分,第二部分配置FPGA的其余部分。

 

 Tandem PCI解决方案与Tandem PROM类似。在第一阶段,只有与PCIe操作相关的配置存储单元从PROM里面加载。加载完第一阶段比特流后,PCIe端口能够被系统枚举。随后第二阶段的比特流通过PCIe链路传输。

 

下面使用FPGA使用PCIE实现FPGA的部分重配置。

选择mode模式为:Advanced

 

 Tandem Configuration or Partial Reconfiguration下选择PR over PCIe

 使用AXI_LITE接口来完成对寄存器的读写。

 其他配置默认,新建完成XDMA的IP后,打开example project。

 

打开实例工程后

添加自定义的AXI_LITE接口转换模块、寄存器模块、以及LED_RM_0、LED_RM_1模块。

LED_RM_0模块功能输出LED参数为2’b00。

// *********************************************************************************/
// Project Name :
// Author       : i_huyi
// Email        : i_huyi@qq.com
// Creat Time   : 2023/4/20 9:18:02
// File Name    : .v
// Module Name  : 
// Called By    :
// Abstract     :
//
// CopyRight(c) 2020, xxx xxx xxx Co., Ltd.. 
// All Rights Reserved
//
// *********************************************************************************/
// Modification History:
// 1. initial
// *********************************************************************************/
// *************************
// MODULE DEFINITION
// *************************
`timescale 1 ns / 1 ps
module LED_RM_0#(
parameter   U_DLY = 1
                                        )
                                        (
input   wire                sys_clk     ,
input   wire                rst_n       ,
output  reg [1:0]           led         





                                        );
//--------------------------------------
// localparam
//--------------------------------------

//--------------------------------------
// register
//--------------------------------------

//--------------------------------------
// wire
//--------------------------------------

//--------------------------------------
// assign
//--------------------------------------

//------------------------------------------------------------
//------------------------------------------------------------

//------------------------------------------------------------
//------------------------------------------------------------

always @ (posedge sys_clk or negedge rst_n)
begin
        if(rst_n == 1'b0)
                led     <= 2'b0;
        else
                led     <= 2'b0;
end



//------------------------------------------------------------
//------------------------------------------------------------
endmodule

LED_RM_1模块功能输出LED参数为2’b11。

always @ (posedge sys_clk or negedge rst_n)
begin
        if(rst_n == 1'b0)
                led     <= 2'b0;
        else
                led     <= 2'b11;
end

新建完成后。点击tools-Enable Partial Reconfiguration。

 确定启用部分重配置。

 确定后PROJECT MANAGER会多出partial Reconfiguration wizard选项。

 选中你要进行重构的逻辑,即LED_RM_模块。选择Great Partition Definition。

 指定一个分区的名字。

 完成后LED_RM_0模块变成了一个棱形的标志。

 下面打开partial Reconfiguration wizard

 继续

 添加模块LED_RM_1。

添加完成后,LED_RM分区内有两个模块。

 

 下一步后,继续点击automatically create configurations。

 修改Configuration Name。

 在Edit Configuration Runs下点击automatically create configurations。

 

 完成后进行综合。

在Vivado中,Floorplanning是一种将设计分配到芯片的不同区域的方法。Pblock是一种在Floorplanning中使用的工具,它允许用户将设计分配到特定的物理区域中。通过使用Pblock,用户可以控制设计中的不同模块的位置和布局,以最大化性能和资源利用率。在Floorplanning中,绘制Pblock是指创建一个物理块,然后将设计中的模块分配到该块中。这样可以更好地控制设计的物理布局,以满足性能和资源利用率的要求。这里我们选中LED_RM_0模块选择Floorplaning - Draw Pblock。

 在FPGA上选择一块没有使用的区域,划分该区域为可重构的区域。

 修改后会在XDC文件下添加约束信息。

 下面我们进行DRC检查看看分配的区域是否合理,不会和其他模块抢占区域。

 

在Vivado中进行DRC检查,可以按照以下步骤操作:

  1. 打开Vivado软件,打开需要进行DRC检查的工程。
  2. 在左侧的“Flow Navigator”面板中,选择“Open Implemented Design”选项。
  3. 在右侧的“Design Runs”面板中,选择“Generate DRC Report”选项,并点击“Run”按钮。
  4. 等待DRC检查完成后,在“Design Runs”面板中找到生成的DRC报告,并双击打开。
  5. 在DRC报告中,可以查看所有的DRC错误和警告信息,以及相应的解决方法。
  6. 如果需要重新运行DRC检查,可以在“Design Runs”面板中选择“Regenerate DRC Report”选项,并点击“Run”按钮。

注意:在进行DRC检查前,需要先进行综合和实现操作,并确保设计没有任何语法错误和警告信息。

无报错。 

 生成bit流。

至此,部分重配置的工程就生成完毕,在生成出来的文件里面,在工程目录下会有两个imp的文件夹,里面会分别有静态逻辑和各自的重配置逻辑,我们将静态逻辑先烧写进去FPGA,之后就可以通过PCIE配置动态逻辑,关于MCAP的驱动的上位机,在Xilinx_Answer_64761__UltraScale_Devices这份文档中有详细的说明。

xilinx_dma_pcie_ep.bit:这部分为静态逻辑。

U_LED_RM_0_LED_RM_0_partial.bit:这部分为重配置逻辑。

U_LED_RM_0_LED_RM_0_partial_clear.bit:这部分不清楚。

 

 下载bit文件

 

下载Xilinx_Answer_64761_Ultrascale_Devices文件。

安装xilinx提供的驱动。

 需要注意的是,该驱动目前需要在win764位环境下运行。且需要在启动时强制将驱动签名禁止。设置完成后安装驱动文件。开机按F8,选择强制禁用驱动签名。

安装驱动。

 

 点击始终安装此驱动程序。

 安装完成后发现在设备管理器中的系统设备中找到名字叫做Xilinx Pcle MCAP Driver的驱动。

 

用户可以在驱动安装路径下打开INF文件自由添加你的设备PCIE驱动号。

路径为:C:/Program Files(x86)\Xilinx\MCAP\mcap64

格式为%mcap.DRVDESC%= mcap_Inst, PCI\VEN_xxxx&DEV_YYYY

 

驱动的使用

安装后后出现两个快捷方式,一个是MCAPAPP.exe另外一个是MCAPAPPGUI.exe

 

根据我们代码中。

使用LED_RM_0读取PCIE的BAR0地址4读取值为32’h0;

使用LED_RM_1读取PCIE的BAR0地址4读取值为32’h3;

可重构部分未LED_RM_0的时候。

 直接启动MCAPAPPGUI.exe,选择重构部分的代码LED_RM_1。

 重构成功。

 启动windriver读取BAR0地址4的值。

 配置成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/455730.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

会话分享支持指定读写权限,网络设备支持账号切换、账号改密等自动化操作,JumpServer堡垒机v3.2.0发布

2023年4月24日&#xff0c;JumpServer开源堡垒机正式发布v3.2.0版本。在这一版本中&#xff0c;会话分享支持指定读写权限&#xff0c;让会话分享更加安全可靠。账号收集支持自动同步功能&#xff0c;并支持通过账号模版功能批量添加资产账号&#xff0c;同时账号切换功能新增支…

IT人员选择光缆的五大原因

基于铜和光纤的信号都会受到衰减&#xff0c;或者波形信号随着距离的推移而减弱。然而&#xff0c;光纤电缆可以在更长的距离上传输数据。事实上&#xff0c;差异是巨大的。 当构建需要长距离、高速和/或高带宽连接的网络时&#xff0c;毫无疑问&#xff1a;光纤电缆会赢得胜利…

使用ChatGPT完成程序开发——目标:不写一行代码完成图像识别并点击

本文作为一个使用AI开发的思路&#xff0c;让更多的人可以利用AI完成一些简单的程序&#xff0c;文中使用的是国内镜像GTP3.5 源码: GitHub - kasimshi/testCV: AI编写的OpenCV图像识别例子 GTP镜像: 知汇 对AI描述我们要做的功能&#xff0c;让它给给初步的思路和方向 作为新…

opencv-python视频分析与目标跟踪

目录 光流 目标跟踪 一、光流 使用OpenCV光流分析&#xff0c;跟踪蚂蚁的轨迹&#xff1a; 代码实现&#xff1a; import numpy as np import cv2if __name__ __main__:cap cv2.VideoCapture(ant.mp4)# ShiTomasi 角点检测参数feature_params dict(maxCorners100,quali…

ConcurrentHashMap底层实现原理

ConcurrentHashMap底层实现原理 ConcurrentHashMap的整体架构ConcurrentHashMap的基本功能ConcurrentHashMap在性能方面的优化 ConcurrentHashMap的整体架构 1.8中的存储结构&#xff1a; 它是由数组、单向链表、红黑树组成的。 当们去初始化一个ConcurrentHashMap实例的时候…

【工具】FFmpeg|超大视频本地有损压缩,500MB变5MB(支持 Windows、Linux、macOS)

参考&#xff1a; 如何将一分钟长的1080p视频压缩至5MB以内&#xff1f;-知乎-滔滔清风近期HEVC扩展备用安装方法-B站-悲剧天下 总共三个步骤&#xff0c;安装FFmpeg、运行指令、打开视频。 亲测 500MB 变 5MB。 1 安装FFmpeg 对于不需要看教程可以自行完成安装的同学们&…

哪款手持洗地机更好用?好用的手持洗地机分享

家居卫生清洁对于每个家庭来说都是必不可少的事情&#xff0c;尤其是地面清洁更是需要重视。传统的清洁方法需要频繁更换工具才能完成吸、拖、吸的清洁步骤&#xff0c;而这个过程费时费力且效果并不尽如人意。然而&#xff0c;洗地机的出现完美地解决了这一问题&#xff0c;将…

【C++进阶之路】初始C++语法(下)

文章目录 一.引用1.基本概念2.使用场景函数参数函数返回值 3.优点4.指针与引用的区别 二.内联函数引入1.默认设置2.建议3.声明与定义&#xff08;不同文件&#xff09;add.cppadd.htest.cpp 三.auto1.必须有初始值2.只能确定一个类型3.auto可以为类型的一部分4.函数参数和自定义…

Ubuntu20.04部署YOLOv5

目录 前言一、环境配置1 显卡驱动安装1.1 卸载显卡驱动1.2 准备工作1.3 驱动安装1.4 验证 2 CUDA安装2.1 准备工作2.2 CUDA下载2.3 CUDA安装2.4 配置环境变量2.5 验证2.6 小结 3 cuDNN安装3.1 cuDNN下载3.2 cuDNN安装3.3 小结 4 TensorRT安装4.1 TensorRT下载4.2 TensorRT安装4…

UOS-----本地YUM源配置

1. cd /etc/apt/sources.list.d/ 将文件中的两个list配置文件内容注释掉&#xff0c;并保存 2. cd /etc/apt/ vi sources.list 将配置文件内容注释 3. cd /etc/apt/sources.list.d/ vi local.list (创建一个新的list文件&#xff0c;作为本地yum配置文件) 添…

电脑怎么压缩图片大小,4个通用方法分享

电脑怎么压缩图片大小&#xff1f;我相信这个问题很多小伙伴都遇到过的。我们压缩图片大小的主要原因是为了优化网站、应用程序或移动设备的性能。大尺寸的图片文件需要更多的存储空间和带宽&#xff0c;这将导致网页加载速度变慢&#xff0c;浪费用户时间并影响用户体验。此外…

香港科技大学有什么好的专业?

香港科技大学创办于1991年10月&#xff0c;是一所坐落于香港清水湾半岛的公立研究型大学。大学设有4个学院&#xff1a;工学院、理学院、人文社会科学学院和工商管理学院&#xff0c;还设有2个研究院&#xff1a;香港科技大学公共政策和行政研究生院和香港科技大学霍英东研究院…

nginx 配置代理ip访问https的域名配置

目录 问题背景 解决方式 正向代理&#xff1a; 反向代理&#xff1a; 通俗点儿一句话&#xff0c;正向与反向的区别&#xff1a; 问题背景 在某些单位或机构内部&#xff0c;访问互联网接口需要通过指定的服务器去访问&#xff0c;那我们就需要通过代理 ip 和 端口去访问外…

云计算基础——虚拟化

虚拟化技术简介 虚拟化是一个广义的术语&#xff0c;在计算机方面通常是指计算元件在虚拟的基础上而不是真实的基础上运行 虚拟化是一种经过验证的软件技术&#xff0c;它正迅速改变着IT的面貌&#xff0c;并从根本上改变着人们的计算方式 虚拟化是一个抽象层&#xff0c;它…

【C++学习】类和对象--运算符重载

运算符重载概念&#xff1a;对已有运算符重新定义&#xff0c;赋予其另一种功能&#xff0c;以适应不同的数据类型。 作用&#xff1a;实现两个自定义数据类型相加的运算。 目录 加号运算符重载 1.成员函数重载 2.全局函数重载 左移运算符重载<< 递增运算符重载 赋值…

java堆排序

堆排序是最基本的排序算法&#xff0c;简单来说就是把一堆数据&#xff08;数组&#xff09;分成两个相等的部分&#xff0c;其中一个部分作为数组的开头&#xff0c;另一个部分作为数组的结尾。之后在对这两个相等的部分进行比较&#xff0c;如果在比较之后发现这个数组中有一…

读懂什么是RDMA

一.什么是RDMA 1.RDMA主要体现 2.如何理解RDMA和TCP技术的区别&#xff1f; 3.使用RDMA的好处包括&#xff1a; 二.什么是RoCE&#xff1f; 1. RDMA协议包含: Infiniband&#xff08;IB&#xff09; 2. 为什么RoCE是目前主流的RDMA协议&#xff1f; …

GhostNet

文章目录 相关文章一、轻量化网络结构1. 分组卷积2. 深度可分离卷积 二、GhostNet1. 动机2. Ghost Module 相关文章 https://blog.csdn.net/search_129_hr/article/details/130280697 https://blog.csdn.net/c2250645962/article/details/104601305 一、轻量化网络结构 目的…

信息收集(一)域名信息收集

前言 信息收集也叫做资产收集。信息收集是渗透测试的前期主要工作&#xff0c;是非常重要的环节&#xff0c;收集足够多的信息才能方便接下来的测试&#xff0c;信息收集主要是收集网站的域名信息、子域名信息、目标网站信息、目标网站真实IP、敏感/目录文件、开放端口和中间件…

052:cesium加载网格地图

第052个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中加载grid地图。一个 ImageryProvider,它在每个具有可控背景和发光的图块上绘制线框网格。 可能对自定义渲染效果或调试地形很有用。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 …