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

这篇具有很好参考价值的文章主要介绍了关于xilinx使用PCIE实现FPGA的部分重配置实现(MCAP)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

平台: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系列器件。

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

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

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

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

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

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

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

选择mode模式为:Advanced

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

 Tandem Configuration or Partial Reconfiguration下选择PR over PCIe

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

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

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

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

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

打开实例工程后

添加自定义的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。

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

 确定启用部分重配置。

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

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

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

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

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

 指定一个分区的名字。

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

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

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

 下面打开partial Reconfiguration wizard

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

 继续

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

 添加模块LED_RM_1。

关于xilinx使用PCIE实现FPGA的部分重配置实现(MCAP)添加完成后,LED_RM分区内有两个模块。

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

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

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

 修改Configuration Name。

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

 在Edit Configuration Runs下点击automatically create configurations。

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

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

 完成后进行综合。

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

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

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

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

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

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

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

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

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

在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检查前,需要先进行综合和实现操作,并确保设计没有任何语法错误和警告信息。

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

无报错。 

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

 生成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:这部分不清楚。

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

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

 下载bit文件

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

下载Xilinx_Answer_64761_Ultrascale_Devices文件。

安装xilinx提供的驱动。

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

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

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

安装驱动。

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

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

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

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

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

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

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

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

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

驱动的使用

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

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

根据我们代码中。

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

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

可重构部分未LED_RM_0的时候。

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

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

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

 重构成功。

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

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

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

 配置成功。文章来源地址https://www.toymoban.com/news/detail-427177.html

到了这里,关于关于xilinx使用PCIE实现FPGA的部分重配置实现(MCAP)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Xilinx FPGA未使用管脚上下拉状态配置(ISE和Vivado环境)

    ISE开发环境 ISE开发环境,可在如下Bit流文件生成选项中配置。 右键点击 Generate Programming File ,选择 Process Properties , 在弹出的窗口选择 Configuration Options-Unused Pin ,选择 Pull Down、Pull Up或者Float 。 可以看到,除了未使用管脚,一些系统管脚,比如JTAG,Program、Done管脚等等都可

    2024年02月06日
    浏览(49)
  • 具于xilinx FPGA的可动态配置DDS频率控制字的DDS IP核使用例程详解

    本文用于讲解xilinx IP 的dds ip examples(动态配置频率)的功能说明,方便使用者快速上手。 本examples 是月隐编写的针对DDS的使用demo,实现通过vio控制频率控制字来调整DDS的输出频率,为大家演示一个可动态配置DDS频率的例程。 例程的平台: 1) 硬件平台:XC7Z020CLG484-2 2) FP

    2024年02月02日
    浏览(42)
  • 关于Xilinx、复旦微 7系列 FPGA “Init_B”引脚的深入探讨

    关注+ 星标公众 号 ,及时获取更多技术分享~ ​​​​​​​  作者 | 冰茶奥利奥 微信公众号 | 嵌入式电子创客街 这两年项目上提国产化的越来越非常严格,尤其是今年,军工项目更加特殊,总体单位直接提百分百纯国产化。这百分百国产化器件中,有外资控股的企业不

    2024年02月06日
    浏览(57)
  • xilinx 7系列fpga上电配置

    Xilinx FPGA通过加载比特流到内部存储单元来进行配置。 Xilinx FPGA存在两种数据配置路径,一种是满足最小引脚需求的串行路径,一种是可用8位、16位或32位来连接到行业的高性能通用接口,如处理器,8位或者16位并行的闪存。与处理器和处理器外围设备一样, FPGA可以在系统中

    2024年04月14日
    浏览(87)
  • FPGA PCIe 软核的实现——扒一扒复旦微、国微PCIe软核的实现

    近来复旦微、国微等厂家相继推出了可以兼容XILINX PCIe硬核的PCIe软核,销售也到所里来推广了一下,领导交代让抽自己的时间试用研究一下,看项目中用不用的起来。 读研的时候就接触过,PCIE协议非常非常复杂,要实现非常非常困难,稍微看过一些协议,看球不懂,真给这

    2024年02月16日
    浏览(151)
  • XILINX FPGA SelectMAP方式配置过程说明

           本文针对单从设备SelectMAP配置过程进行说明,希望作者本人走过的坑,你们可以不用走。        首先SelectMAP的硬件连接原理参考官网ug470手册说明,信号状态保证一致(数据位可选择x8、x16、x32,作者本人使用的x8),如下图所示:          配置时序参考官网给出

    2024年02月08日
    浏览(53)
  • Xilinx 7系列FPGA配置(ug470)

    如果 M[2:0] 为 ”101“,则该FPGA 只支持 JTAG 进行配置。处于其余配置模式下时,依旧可以使用 JTAG 模式进行调试,并且优先级最高。 串行配置模式 接口 从-连接方式 主-连接方式 除了CCLK 连接不同,其他都和从串行模式一样 串行菊花链(非同时配置) 上升沿采样DIN数据,下降

    2024年03月22日
    浏览(58)
  • Xilinx 7系列 FPGA硬件知识系列(九)——FPGA的配置

    目录 1 .1配置模式 1.1.1  主模式 1.1.2  从模式 1.2  7种配置模式 1.2.1  主串配置模式 1.2.2  从串配置模式 ​编辑1.2.3  主并配置模式 1.2.4  从并配置模式 1.2.5  JTAG配置模式 ​编辑1.2.6  主SPI配置模式 ​编辑1.2.7  主BPI配置模式 1.2.8  FPGA BPI加载时间(参考xapp587) 2、BPI

    2024年03月13日
    浏览(74)
  • Xilinx PCIe IP核接口详解

    Xilinx PCIe IP核接口详解 在FPGA领域中,PCIe(Peripheral Component Interconnect Express)总线接口已经成为了许多高速数据交换的标准。这是因为PCIe总线拥有极高的带宽、低延迟和可靠性。因此,Xilinx也提供了自己的PCIe IPs,以便在FPGA上实现PCIe接口。 Xilinx的PCIe IP核支持PCIe Gen 1、Gen 2、

    2024年02月15日
    浏览(54)
  • Xilinx PCIe XDMA IP中断

    IRQ Module Legacy Interrupts (1)usr_irq_req拉高导致中断发送到PCIe Host,可以同时拉高多个bit; (2)等到ack后,相应的usr_irq_req才可以拉低; 第一个 ack 表示 INT 消息已经被发送到了 PCIe block ; (3) 经过 (2) 后 ,FPGA XDMA 内的 interrupt pending register 将会拉高 , 等待 ISR 的查和处理

    2024年01月16日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包