本博文主要是對(duì)基于PCIE(mcap)的部分可重構(gòu)實(shí)現(xiàn)的步驟做一個(gè)簡(jiǎn)單的演示,如有錯(cuò)誤之處,歡迎批評(píng)指正。值得說(shuō)明的是,基于PCIE的部分可重構(gòu)需在ultrascale系列及ultrascale+芯片才能實(shí)現(xiàn),具體哪些系列能實(shí)現(xiàn)哪種配置方式如下圖所示:
圖1
本質(zhì)上來(lái)說(shuō),無(wú)論是JTAG還是ICAP或者M(jìn)CAP以及其它FPGA的配置方式,目的都是配置FPGA的邏輯。MCAP是通過(guò)PCIE來(lái)實(shí)現(xiàn)對(duì)FPGA的燒寫(xiě),最終結(jié)果和使用JTAG進(jìn)行FPGA燒寫(xiě)沒(méi)有區(qū)別,而使用PCIE對(duì)FPGA燒寫(xiě)有更好的靈活性,在某些需求場(chǎng)合是必不可缺的,譬如在數(shù)據(jù)加速的部署,F(xiàn)PGA加速板卡是位于服務(wù)器端,在服務(wù)上線之后修改FPGA業(yè)務(wù)邏輯的話如果使用JTAG燒寫(xiě),一方面操作十分不便,可行性極低,另一方面,重新燒寫(xiě)FPGA會(huì)導(dǎo)致原FPGA的PCIE設(shè)備從服務(wù)器中刪除,需要重新啟動(dòng)服務(wù)器枚舉設(shè)備(目前本人沒(méi)有找到可以進(jìn)入系統(tǒng)后重新枚舉設(shè)備的方法),對(duì)于已經(jīng)上線的服務(wù)器,在每次切換FPGA業(yè)務(wù)邏輯后重啟服務(wù)器是無(wú)法接受的,因此,使用PCIE對(duì)FPGA的部分重配置就十分必要,部分重配置能夠在保持FPGA靜態(tài)邏輯(PCIE部分和其他非業(yè)務(wù)邏輯)正常工作的情況下動(dòng)態(tài)修改某個(gè)區(qū)域的邏輯(業(yè)務(wù)邏輯)。使用這種技術(shù)能夠不重啟服務(wù)器情況下快速切換業(yè)務(wù)邏輯。
本文的實(shí)現(xiàn)基于Xilinx的VCU1525加速板卡實(shí)現(xiàn),VCU1525的FPGA是一顆ultrascale+的VU9P,由上圖可以知道UltraScale+系列的FPGA支持MCAP配置模式。下面由一個(gè)簡(jiǎn)單的例程實(shí)現(xiàn)MCAP部分重配置。
1.新建一個(gè)空白工程。
圖2
2.因?yàn)槭褂肕CAP的配置方式,而MCAP集成于PCIE硬核中,因此需要例化一個(gè)PCIE相關(guān)的IP,這里使用XDMA進(jìn)行本次例程(裸PCIE硬核也可以),該例程沒(méi)有XDMA進(jìn)行數(shù)據(jù)DMA搬運(yùn)的相關(guān)內(nèi)容,僅僅是借用XDMA中的MCAP功能,本人目前也有一個(gè)比較痛苦的地方,就是XDMA的上位機(jī)驅(qū)動(dòng)怎么和MCAP的驅(qū)動(dòng)整合在一起,不懂上位機(jī)驅(qū)動(dòng)開(kāi)發(fā)表示很迷茫,有大佬懂這個(gè)可以探討下。
3.在Board選項(xiàng)中(在建立工程時(shí)選擇Xilinx官方板卡才有這個(gè)選項(xiàng))選擇如下。
圖3
4.在Basic選項(xiàng)中,把圖中紅色框中的Mode設(shè)置成Advanced。
圖4
5.在Basic選項(xiàng)中,在最底部的Tandem Configuration or Partial Reconfiguration中選擇PR over PCIE。
圖5
6.在Pcie ID選項(xiàng)的Device ID中設(shè)置成8011(因?yàn)閄ilinx提供的驅(qū)動(dòng)支持8011,8038,506F)
圖6
7.其它按照默認(rèn)選項(xiàng),生成該IP。
圖7
8.考慮到測(cè)試和實(shí)現(xiàn)的方便,使用XDMA的Example Design來(lái)修改例程,在XDMA綜合完成之后(記得選擇OOC),打開(kāi)該IP的Example Design,在該工程上面做修改。
圖8
9.Example Design如下圖。
圖9
10.首先我們先修改XDC文件和工程頂層,主要是LED的管腳和電平約束。在這個(gè)例子中,我們將要實(shí)現(xiàn)使用兩個(gè)可重構(gòu)模塊,一個(gè)模塊用于控制VCU1525的LED燈亮,一個(gè)模塊用于控制VCU1525的LED燈滅,用這個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明PR的實(shí)現(xiàn)步驟。
11.修改工程中的時(shí)鐘生成IP,此步驟不是必要,主要是指定輸入時(shí)鐘管腳,如果不是官方板子,在XDC里面約束即可。
圖10
12.新建兩個(gè)模塊,分別是LED_RM_0和LED_RM_1。其中LED_RM_0用于控制LED滅,LED_RM_1用于控制LED亮。兩個(gè)模塊的邏輯很簡(jiǎn)單,只是做演示作用。代碼邏輯如下。
圖11
13.在工程頂層例化其中一個(gè)RM模塊。
圖12
14.完成上述步驟之后,選擇Tools->Enable Partial Reconfiguration...選項(xiàng),將工程轉(zhuǎn)換成支持PR類(lèi)型的工程,在后續(xù)彈出的方框中選擇Convert。
圖13
15.此時(shí)工程已經(jīng)轉(zhuǎn)換完成,對(duì)比轉(zhuǎn)換之前,在Flow Navigator的PROJECT MANAGER會(huì)多出Partial Reconfiguration Wizard選項(xiàng)。
圖14
16.設(shè)置我們要進(jìn)行部分重構(gòu)的邏輯,即LED_RM_x模塊,如下圖所示,右鍵LED_RM_0,選擇Create Partition Definition...
圖15
17.在彈出的窗口中指定一個(gè)分區(qū)的名字,這里設(shè)置為L(zhǎng)ED_RM,點(diǎn)擊OK。
圖16
18.完成上一步之后,LED_RM_0模塊變成了一個(gè)黃色的棱形標(biāo)志,如下圖所示。
圖17
19.打開(kāi)Partial Reconfiguration wizard
圖18
20.在Edit Reconfiguration Modules界面中,點(diǎn)擊“+”符號(hào),把LED_RM_1添加進(jìn)來(lái),表明有兩個(gè)重配置模塊,添加完成后如下圖所示,屬于LED_RM分區(qū)定義列表里面有LED_RM_0和LED_RM_1兩個(gè)重配置模塊。
圖19
21.在Editing Configurations界面中,選擇automatically create configurations,并修改Configuration Name,如下圖所示。
圖20
22.在Edit Configuration Runs界面中,選擇automatically create configurations。
圖21
23.最后,點(diǎn)擊Finish,部分重配置的向?qū)гO(shè)置完成,然后點(diǎn)擊Run Synthesis綜合設(shè)計(jì)。
圖22
24.綜合完成之后打開(kāi)綜合設(shè)計(jì)。
圖23
25.在Floorplanning界面,右鍵LED_RM_0,選擇Floorplanning->Draw Pblock,給RM模塊劃分重配置的區(qū)域。
圖24
26.在分配完重配置區(qū)域之后,保存相應(yīng)的約束到xdc文件中,然后做DRC檢查,檢查分配的區(qū)域是否符合要求。
圖25
27.DRC檢查沒(méi)有問(wèn)題之后,點(diǎn)擊Generate Bitstream.
圖26
28.至此,部分重配置的工程就生成完畢,在生成出來(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ō)明。
圖27
圖28
編輯:hfy
-
FPGA
+關(guān)注
關(guān)注
1626文章
21677瀏覽量
601986 -
Xilinx
+關(guān)注
關(guān)注
71文章
2164瀏覽量
121032 -
JTAG
+關(guān)注
關(guān)注
6文章
398瀏覽量
71605 -
PCIe
+關(guān)注
關(guān)注
15文章
1225瀏覽量
82450
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論