基於FPGA的PCIE設計(2)

項目簡述

上一篇博客我們已經對PCIE協議進行了粗略的講解,爲什麼粗略呢?因爲詳細的我也不會。那麼不明白具體的PCIE協議,我們就不能在FPGA中使用PCIE來進行高速數據傳輸了嗎?答案是否定的。因爲Xilinx官方給我們提供了完善的PCIE IP,基於這些IP我們設置不需要知道TLP包的組包原理我們便可以把PCIE使用起來。這篇博客我們主要把FPGA作爲endpoint來進行講解,當然也對作爲root port進行簡單的描述。我們使用的主要IP是XDMA,主要參考資料是米聯客。如果對IP的使用感覺到疑惑可以參考米聯客的資料。

因爲手頭上硬件條件不夠,沒辦法進行下板測試,我們主要進行介紹IP的定製和Block Design的搭建。

XDMA IP的定製

爲什麼使用XDMA IP而不使用我們前面介紹的PCIE IP,因爲前面介紹的IP需要我們自己構建TLP包,還有分散收集策略,基於該IP使用起來PCIE還是優點困難。但是XDMA就特別簡單了,他不需要FPGA設計者熟悉PCIE協議,直接將PCIE協議轉換成AXI4與AXI_Lite協議,可以直接對DDR進行操作。XDMA內部的分散收集操作、TLP組包、DMA操作等等進行了完整的封裝。我們可以把XDMA IP看成我們經常使用的ZYNQ IP,他的BAR空間被AXI_Lite總線進行讀寫操作用於寄存器的配置,AXI總線用與大數據的傳輸直接與DDR對接。

XDMA的內部額框圖如下:

在這裏插入圖片描述
對XDMA的內部描述如下:
1、AXI4、 AXI4-Stream,必須選擇其中一個,用來數據傳輸
2、 AXI4-Lite Master,可選,用來實現PCIE BAR 地址到 AXI4-Lite 寄存器地址的映射,可用來讀寫用戶邏輯寄存器
3、 AXI4-Lite Slave,可選,用來將XDMA 內部寄存器開放給用戶邏輯,用戶邏輯可以通過此接口訪問 XDMA內部寄存器,不會映射到BAR
4、AXI4 Bypass 接口,可選,用來實現PCIE 直通用戶邏輯訪問,可用於低延遲數據傳輸

首先選擇XDMA IP如下:
在這裏插入圖片描述
雙擊點開該IP的配置:
在這裏插入圖片描述
1、該IP是作爲Endpoint來進行PCIE操作的
2、IP定製的模式是高級,這樣一來可供選擇的IP定製選項就會增多
3、PCIE硬核的位置,這裏我們的芯片只有一個硬核,所以這裏默認即可
4、lane的個數,與開發板相對應,這裏選擇2個
5、XDMA將PCIE轉換成AXI協議,這個就是AXI協議的位寬
6、該片子的高速串行接口是GTP口,支持PCIE Gen1 Gen2協議,速度分別是2.5GT/s 5GT/s,這裏選擇最大速度5 GT/s
7、PCIE參考時鐘的頻率,與板子的時鐘情況有關,這裏是100MHz
8、AXI總線的時鐘頻率,這裏我們選擇125MHz
9、這裏我們直接將PCIE協議轉換成AXI協議,而不選擇AXI Stream協議,簡化我們的操作
在這裏插入圖片描述
1、廠商ID,專屬於Xilinx的PCIE的ID,是固定的。
2、設備ID,與廠商ID一起指明數據的類型,被使用選擇PCIE上位機的軟件驅動。
3、版本ID,指明使用該PCIE IP進行設置的版本
4、子廠商ID,用來更近一步的區分Xilinx旗下的廠商
5、子系統ID,用來識別板卡的的ID
6、PCIE在實驗中承擔的角色,這裏我們選擇默認即可
在這裏插入圖片描述
1、首先使能 PCIE to AXI Lite Master Interface ,這樣可以在主機一側通過PCIE 來訪問用戶邏輯側寄存器或者其他
AXI4-Lite 總線設備
2、主機側PCIE BAR 地址與用戶邏輯側地址是不一樣的,這個設置就是進行BAR 地址到AXI 地址的轉換,比如主機一側 BAR 地址爲0, IP 裏面轉換設置爲 0x80000000,則主機訪問 BAR 地址 0 轉換到AXI LIte 總線地址就是0x80000000,這點的理解特別重要
3、選擇64bit 使能
4、用來實現PCIE 直通用戶邏輯訪問,可用於低延遲數據傳輸,這裏不選擇。
在這裏插入圖片描述
1、選擇消息中斷,因爲下面的工程中使用了2箇中斷,所以這裏我們選擇2
2、引腳中斷,這裏選不選擇意義不大
其餘的默認設置即可。
在這裏插入圖片描述
1、2、Number of DMA Read Channel(H2C)和Number of DMA Write Channel(C2H)通道數,對於PCIE2.0 來說最大 只能選擇 2,也就是 XDMA 可以提供最多兩個獨立的寫通道和兩個獨立的讀通道,獨立的通道對於實際應用中 有很大的作用,在帶寬允許的前提前,一個PCIE 可以實現多種不同的傳輸功能,並且互不影響。 這裏我們選擇1。
其餘的默認即可。
在這裏插入圖片描述
這裏我們不共享任何邏輯。

經過上面的設置,我們已經定製了常規的XDMA IP,接下來講解常用的Block Design設計。

PCIE Endpoint的工程框圖

這裏我們使用米聯客中的一個例子,個人認爲這是上面最難的例子了,涉及到了XDMA中斷的使用。(這裏只做粗略介紹,想詳細學習的還是得看米聯客官方的資料)

本例子主要講述基於 PCIE XDMA IP 實現的一個圖像傳輸應用,圖像的數據流控制主要用到了 VDMA IP。整個項目的框圖如下:
在這裏插入圖片描述
由上圖可以看出,圖像數據是由 PC 端產生,然後用過 XDMA 傳輸到 ZYNQ 的 DDR3(通過 HP 接口),數據再經過一個 MM2S 的 VDMA 從 ZYNQ 的 DDR(通過 HP 接口)讀出到 AXIS 接口,經過 AXIS to VIDEO 轉換到視頻時序,可以做視頻處理,之後再經過 VIDEO to AXIS 轉換到 AXIS 接口,經過 MM2S 的 VDMA 存入 DDR, XDMA再從 DDR 將圖像數據讀出到底 PC。這裏面實際上包含了兩條傳輸路徑,一條是 PCIE 到視頻,一條是視頻到 PCIE,一個工程,兩個操作例子,很有參考意義。

從上面的工程我們可以學到,FPGA 端主要實現如下功能
1、 XDMA 與 DDR 數據通信
2、 VDMA 實現視頻數據搬運
3、 可編程 VTC(Video Timing Control)模塊,提供視頻時序功能
4、 AXIS to Video 模塊,實現 axis 到視頻時序的轉換
5、 圖像處理模塊,用戶可自定義圖像處理功能,例程中實現彩色圖像的飽和度調整算法
6、 Video to AXIS 模塊,實現視頻時序到 AXIS 的轉換
7、 用戶邏輯寄存器模塊,可橋接到 XDMA,實現上位機通過 XDMA 對 FPGA 的寄存器控制
8、 讀取本地圖像生成圖像傳輸鏈表
9、 通過 VDMA 的 MM2S 中斷來從 WIN64 傳輸圖像到 FPGA DDR
10、通過 VDMA 的 S2MM 中斷來從 FPGA DDR 獲取圖像數據,這些中斷是經過XDMA傳輸到上位機

關於可以學到的XDMA部分我們已經加粗。

項目的Block Design設計圖如下:
在這裏插入圖片描述
這裏主要介紹一下XDMA在上面的Block Design設計中起到的作用。
1、使用PCIE轉AXI的總線將圖像數據存儲到DDR、將DDR中的數據搬移到DDR中
2、通過AXI_Lite接口來配置兩個VDMA的IP,使其能夠正常工作起來,配置數據是PC機發送來的數據
3、通過AXI_Lite接口來配置Bram,通過這個ram來與PC機進行一定的數據交互,解決圖像斷幀的現象
4、通過兩個VDMA的中斷信號使得XDMA產生中斷信號,告訴PC機進行一定的處理

上面的Block Design的設計,我們只講解了XDMA的作用,至於VDMA的作用,這裏不再講解,因爲個人認爲VDMA IP還是優點雞肋,因爲需要進行配置、數據也需要上游模塊主動進行讀取寫入。這個完全可以用自定義的AXI IP來代替。

如果真把上面的流程搞明白了,那麼可以熟練的實現FPGA開發板通過XDMA與PC機之間的通信。可以熟練掌握PCIE的使用。但是,上面的使用需要經過上位機的配合,至於上位機的書寫,我沒有掌握的太好,就不多加解釋,這個例子在米聯客的PCIE教程中有,同學們可以去學習。

PCIE Ip的定製

上面我們已經講解了PCIE作爲endpoint如何進行配置與Block Design的搭建。接下來,我們講解PCIE作爲rootpoint如何來進行PCIE的配置與Block Design的設置。
首先點擊PCIE IP核:
在這裏插入圖片描述
在這裏插入圖片描述
1、這裏選擇root port
2、選擇開發板上的時鐘100MHz
在這裏插入圖片描述
1、這裏選擇硬核PCIE所在的位置
2、選擇PCIE的lane的個數爲2個
3、選擇PCIE的通信速度爲5GT/s
在這裏插入圖片描述
1、廠商ID,專屬於Xilinx的PCIE的ID,是固定的。
2、設備ID,與廠商ID一起指明數據的類型,被使用選擇PCIE上位機的軟件驅動。
3、版本ID,指明使用該PCIE IP進行設置的版本
4、子廠商ID,用來更近一步的區分Xilinx旗下的廠商
5、子系統ID,用來識別板卡的的ID
6、PCIE在實驗中承擔的角色,這裏我們選擇默認即可
在這裏插入圖片描述
1、PCIE To AXI的BAR地址空間設置,用於IO的配置空間,也是endpoint to rootport的方向
在這裏插入圖片描述
默認即可
在這裏插入圖片描述
1、2、AXI TO PCIE的BAR空間,也就是rootport to endpoint可以看見的方向。
在這裏插入圖片描述
1、2、AXI總線的最低地址與最高地址
在這裏插入圖片描述
默認即可
在這裏插入圖片描述
默認即可。

PCIE root port的Block Design搭建

這裏餓哦們讓你也是直接給出相應的圖像,供大家簡略學習:
在這裏插入圖片描述
1、是endpoint讀寫rootport的數據通路
2、是rootport讀寫endpoint的數據通路
上面Block design的搭建其實我一直不明白centerDMA Ip的作用,也沒真正下板實現過,這裏也就不多說了。因爲FPGA做爲rootport來使用,本身就很少見。

上面的博客,我們主要介紹了VIVADO中PCIE IP的使用,介紹的比較粗略。尤其是第一個很常用,想進一步瞭解的同學可以找一找原本的資料,這裏我只是介紹了自己的想法。

參考文獻

[1]、V3學院
[2]、米聯客

總結

由於水平有限,對PCIE的認識不到位,文章中的闡述有可能存在錯誤,歡迎大家指正。創作不易,認爲文章有幫助的同學們可以關注、點贊、轉發支持。爲行業貢獻及其微小的一部分。或者對文章有什麼看法或者需要更近一步交流的同學,可以加入下面的羣:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章