平臺(tái):vivado21018.3
芯片:xcku115-flva1517-2-i (active)
本文官方文檔:Xilinx_Answer_64761_Ultrascale_Devices
本文驅(qū)動(dòng)下載地址:64761 - Bitstream Loading across the PCI Express Link in UltraScale and UltraScale+ Devices for Tandem PCIe and Partial Reconfiguration (xilinx.com)
本文參考:Xilinx基于PCIE的部分重配置實(shí)現(xiàn)(一) | 電子創(chuàng)新網(wǎng)賽靈思中文社區(qū) (eetrend.com)
要使用PCIE實(shí)現(xiàn)FPGA的部分可重構(gòu),就要理解為什么要使用PCIE來(lái)重構(gòu)FPGA內(nèi)部的電路。PCIE是一種即插即用的協(xié)議,這個(gè)就意味著在通電狀態(tài)下,PCIE主機(jī)將枚舉系統(tǒng)。這個(gè)過(guò)程包括主機(jī)從每個(gè)設(shè)備讀取請(qǐng)求的地址大小,然后為該設(shè)備分配一個(gè)基本地址。因此在在主機(jī)查詢(xún)PCIE接口時(shí),必須要準(zhǔn)備好它們,否則它們將不會(huì)被分配一個(gè)基本地址。
另外,PCIE規(guī)范規(guī)定,系統(tǒng)上電后,復(fù)位信號(hào)必須在100毫秒內(nèi)取消斷言,并且PCIE端口必須在復(fù)位信號(hào)取消斷言后不超過(guò)20毫秒準(zhǔn)備好進(jìn)行鏈路訓(xùn)練。通常被稱(chēng)為100毫秒的啟動(dòng)時(shí)間要求。
Tandem Configuration(串聯(lián)配置)采用兩階段方法,使IP能夠滿足PCI Express規(guī)范中指定的配置時(shí)間要求。該技術(shù)支持多種用例:
Tandem PROM |
從閃存中加載單個(gè)兩級(jí)位流。 |
Tandem PCIe |
從閃存中加載第一階段比特流,并通過(guò) PCIe 鏈路將第二階段比特流傳遞到 MCAP。 |
Tandem with Field Updates |
在Tandem PROM或Tandem PCIe的初始配置之后,保持PCIe鏈接處于活動(dòng)狀態(tài),更新整個(gè)用戶(hù)設(shè)計(jì)。更新區(qū)域(平面圖)和設(shè)計(jì)結(jié)構(gòu)是預(yù)定義的,并提供了Tcl腳本。 |
Tandem + Partial Reconfiguration |
這是Tandem配置后跟隨任何大小或數(shù)量的部分重構(gòu)(PR)的更一般情況。 |
Partial Reconfiguration over PCIe(PR over PCIe) |
這是PR通常遵循的標(biāo)準(zhǔn)配置,使用PCIe / MCAP作為部分比特流的傳遞路徑。 |
下面我們將采用PR over PCIe模式,通過(guò)PCIe的PR啟用MCAP鏈路進(jìn)行部分重新配置。
對(duì)于FPGA的配置方式可以使用JTAG、ICAP和MCAP來(lái)配置FPGA。它們具有一下區(qū)別:
JTAG |
使用JTAG線對(duì)FPGA進(jìn)行燒錄配置。需要繁瑣的燒錄線。 |
ICAP |
使用FPGA的內(nèi)部配置接口,通過(guò)FPGA內(nèi)部邏輯電路實(shí)現(xiàn)對(duì)FPGA的配置。 |
MCAP |
主機(jī)通過(guò)PCIE接口向FPGA發(fā)送配置文件,從而實(shí)現(xiàn)對(duì)FPGA的燒寫(xiě)。 |
使用MCAP技術(shù)對(duì)FPGA進(jìn)行重配置,可以在保證系統(tǒng)不用重新枚舉PCI設(shè)備的前提下對(duì)FPGA某個(gè)動(dòng)態(tài)區(qū)域進(jìn)行邏輯修改。
支持的設(shè)備,這種配置方式目前只支持UltraScale系列器件。
關(guān)于Tandem PROM和Tandem PCIe這兩個(gè)設(shè)計(jì)的區(qū)別。
Tandem PROM解決方案將比特流分為兩個(gè)部分,并將這兩個(gè)部分都從本地配置存儲(chǔ)器(PROM或者其他存儲(chǔ)器)加載。bit流的第一部分配置設(shè)計(jì)的PCIE部分,第二部分配置FPGA的其余部分。
?
?Tandem PCI解決方案與Tandem PROM類(lèi)似。在第一階段,只有與PCIe操作相關(guān)的配置存儲(chǔ)單元從PROM里面加載。加載完第一階段比特流后,PCIe端口能夠被系統(tǒng)枚舉。隨后第二階段的比特流通過(guò)PCIe鏈路傳輸。
?
下面使用FPGA使用PCIE實(shí)現(xiàn)FPGA的部分重配置。
選擇mode模式為:Advanced
?
?Tandem Configuration or Partial Reconfiguration下選擇PR over PCIe
?使用AXI_LITE接口來(lái)完成對(duì)寄存器的讀寫(xiě)。
?其他配置默認(rèn),新建完成XDMA的IP后,打開(kāi)example project。
打開(kāi)實(shí)例工程后
添加自定義的AXI_LITE接口轉(zhuǎn)換模塊、寄存器模塊、以及LED_RM_0、LED_RM_1模塊。
LED_RM_0模塊功能輸出LED參數(shù)為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參數(shù)為2’b11。
always @ (posedge sys_clk or negedge rst_n)
begin
if(rst_n == 1'b0)
led <= 2'b0;
else
led <= 2'b11;
end
新建完成后。點(diǎn)擊tools-Enable Partial Reconfiguration。
?確定啟用部分重配置。
?確定后PROJECT MANAGER會(huì)多出partial Reconfiguration wizard選項(xiàng)。
?選中你要進(jìn)行重構(gòu)的邏輯,即LED_RM_模塊。選擇Great Partition Definition。
?指定一個(gè)分區(qū)的名字。
?完成后LED_RM_0模塊變成了一個(gè)棱形的標(biāo)志。
?下面打開(kāi)partial Reconfiguration wizard
?繼續(xù)
?添加模塊LED_RM_1。
添加完成后,LED_RM分區(qū)內(nèi)有兩個(gè)模塊。
?
?下一步后,繼續(xù)點(diǎn)擊automatically create configurations。
?修改Configuration Name。
?在Edit Configuration Runs下點(diǎn)擊automatically create configurations。
?完成后進(jìn)行綜合。
在Vivado中,F(xiàn)loorplanning是一種將設(shè)計(jì)分配到芯片的不同區(qū)域的方法。Pblock是一種在Floorplanning中使用的工具,它允許用戶(hù)將設(shè)計(jì)分配到特定的物理區(qū)域中。通過(guò)使用Pblock,用戶(hù)可以控制設(shè)計(jì)中的不同模塊的位置和布局,以最大化性能和資源利用率。在Floorplanning中,繪制Pblock是指創(chuàng)建一個(gè)物理塊,然后將設(shè)計(jì)中的模塊分配到該塊中。這樣可以更好地控制設(shè)計(jì)的物理布局,以滿足性能和資源利用率的要求。這里我們選中LED_RM_0模塊選擇Floorplaning - Draw Pblock。
?在FPGA上選擇一塊沒(méi)有使用的區(qū)域,劃分該區(qū)域?yàn)榭芍貥?gòu)的區(qū)域。
?修改后會(huì)在XDC文件下添加約束信息。
?下面我們進(jìn)行DRC檢查看看分配的區(qū)域是否合理,不會(huì)和其他模塊搶占區(qū)域。
在Vivado中進(jìn)行DRC檢查,可以按照以下步驟操作:
- 打開(kāi)Vivado軟件,打開(kāi)需要進(jìn)行DRC檢查的工程。
- 在左側(cè)的“Flow Navigator”面板中,選擇“Open Implemented Design”選項(xiàng)。
- 在右側(cè)的“Design Runs”面板中,選擇“Generate DRC Report”選項(xiàng),并點(diǎn)擊“Run”按鈕。
- 等待DRC檢查完成后,在“Design Runs”面板中找到生成的DRC報(bào)告,并雙擊打開(kāi)。
- 在DRC報(bào)告中,可以查看所有的DRC錯(cuò)誤和警告信息,以及相應(yīng)的解決方法。
- 如果需要重新運(yùn)行DRC檢查,可以在“Design Runs”面板中選擇“Regenerate DRC Report”選項(xiàng),并點(diǎn)擊“Run”按鈕。
注意:在進(jìn)行DRC檢查前,需要先進(jìn)行綜合和實(shí)現(xiàn)操作,并確保設(shè)計(jì)沒(méi)有任何語(yǔ)法錯(cuò)誤和警告信息。
無(wú)報(bào)錯(cuò)。?
?生成bit流。
至此,部分重配置的工程就生成完畢,在生成出來(lái)的文件里面,在工程目錄下會(huì)有兩個(gè)imp的文件夾,里面會(huì)分別有靜態(tài)邏輯和各自的重配置邏輯,我們將靜態(tài)邏輯先燒寫(xiě)進(jìn)去FPGA,之后就可以通過(guò)PCIE配置動(dòng)態(tài)邏輯,關(guān)于MCAP的驅(qū)動(dòng)的上位機(jī),在Xilinx_Answer_64761__UltraScale_Devices這份文檔中有詳細(xì)的說(shuō)明。
xilinx_dma_pcie_ep.bit:這部分為靜態(tài)邏輯。
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提供的驅(qū)動(dòng)。
?需要注意的是,該驅(qū)動(dòng)目前需要在win764位環(huán)境下運(yùn)行。且需要在啟動(dòng)時(shí)強(qiáng)制將驅(qū)動(dòng)簽名禁止。設(shè)置完成后安裝驅(qū)動(dòng)文件。開(kāi)機(jī)按F8,選擇強(qiáng)制禁用驅(qū)動(dòng)簽名。
安裝驅(qū)動(dòng)。
?
?點(diǎn)擊始終安裝此驅(qū)動(dòng)程序。
?安裝完成后發(fā)現(xiàn)在設(shè)備管理器中的系統(tǒng)設(shè)備中找到名字叫做Xilinx Pcle MCAP Driver的驅(qū)動(dòng)。
用戶(hù)可以在驅(qū)動(dòng)安裝路徑下打開(kāi)INF文件自由添加你的設(shè)備PCIE驅(qū)動(dòng)號(hào)。
路徑為:C:/Program Files(x86)\Xilinx\MCAP\mcap64
格式為%mcap.DRVDESC%= mcap_Inst, PCI\VEN_xxxx&DEV_YYYY
驅(qū)動(dòng)的使用
安裝后后出現(xiàn)兩個(gè)快捷方式,一個(gè)是MCAPAPP.exe另外一個(gè)是MCAPAPPGUI.exe
根據(jù)我們代碼中。
使用LED_RM_0讀取PCIE的BAR0地址4讀取值為32’h0;
使用LED_RM_1讀取PCIE的BAR0地址4讀取值為32’h3;
可重構(gòu)部分未LED_RM_0的時(shí)候。
?直接啟動(dòng)MCAPAPPGUI.exe,選擇重構(gòu)部分的代碼LED_RM_1。
?重構(gòu)成功。
?啟動(dòng)windriver讀取BAR0地址4的值。
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-427177.html
?配置成功。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-427177.html
到了這里,關(guān)于關(guān)于xilinx使用PCIE實(shí)現(xiàn)FPGA的部分重配置實(shí)現(xiàn)(MCAP)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!