最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

LabVIEW FPGA PCIe開發(fā)講解-7.2節(jié):目前主流的4大Xilinx FPGA PCIe DMA通信IP核講解

2021-03-27 12:48 作者:神電測控  | 我要投稿

一共有4大類:Xilinx官方XAPP1052和XMDA IP、以色列Xillybus多通道DMA IP、國外RIFFA IP、北大EPEE IP):結(jié)論是Xillybus簡單易用更方便!???

????????要開發(fā)一個帶PCIe或者PXIe接口的FPGA板卡出來,除了硬件本身外,最重要的就是FPGA芯片里面的PCIe通信代碼編寫,俗稱下位機(jī)FPGA編程;還有中間層的驅(qū)動文件編寫以及上位機(jī)PC端的應(yīng)用程序開發(fā)。

?????? ?其中,中間層驅(qū)動和上位機(jī)PC端一般都可以使用C語言或者LabVIEW進(jìn)行開發(fā),但是下位機(jī)FPGA里面的PCIe代碼一般會采用VHDL或者Verilog進(jìn)行編寫,難度比較大,尤其是涉及到PCIe DMA這類復(fù)雜的通信協(xié)議,開發(fā)難度和工作量會非常大,導(dǎo)致很多應(yīng)用工程師在做PCIe相關(guān)的FPGA嵌入式開發(fā)時,碰到了不少坑,投入了很多精力和時間也沒有把FPGA PCIe DMA做穩(wěn)定。

?????? ?本章重點(diǎn)就是告訴用戶如何使用LabVIEW在FPGA芯片里面編寫PCIe DMA程序,徹底解決下位機(jī)FPGA代碼編寫的痛點(diǎn),讓LabVIEW圖形化編程語言深入到FPGA骨髓里面去,降低FPGA PCIe嵌入式開發(fā)門檻,真正發(fā)揮出PCIe總線高速通信的能力。

?????? ?目前Xilinx FPGA芯片是全球出貨量最多的,同時芯片種類也是最多的,所以我們重點(diǎn)需要研究的就是Xilinx FPGA芯片的PCIe通信IP核。目前市面上現(xiàn)有的支持Xilinx FPGA芯片的PCIe DMA通信IP主要有以下4家:

1)?Xilinx官方推出的XAPP1052和XMDA IP核

2)以色列Xillybus FPGA PCIe DMA IP核

3)GitHub上的RIFFA(AReusable Integration Framework For FPGA Accelerators)IP 核

4)北大無線可重構(gòu)體系結(jié)構(gòu)課題小組的框架:EPEE(Efficient and Flexible Host-FPGA PCIe Communication Library)

?????? ?下面我們簡單介紹一下這4家方案。

?????? ?1)Xilinx官方的PCIe IP核有兩個版本:一個是很古老的XAPP1052,一個是近些年才推出的XDMA IP核。其中,XAPP1052 IP核和例程提供了全部的底層Verilog源代碼,便于用戶去理解和掌握PCIe通信協(xié)議在FPGA里面是怎么實(shí)現(xiàn)的,但是這些代碼據(jù)說在使用的時候,存在一些坑,盡管網(wǎng)上有很多高手給出了解決方案,但是對于沒有經(jīng)驗(yàn)的用戶來說,可能會造成不必要的困擾;后來,Xilinx下定決心,重新開發(fā)了一個也就是現(xiàn)在大家所熟知的XDMA IP核框架,這個也是目前主流的開發(fā)板廠商采用的方案。國內(nèi)做Xilinx FPGA開發(fā)板業(yè)務(wù)比較大的當(dāng)屬黑金和米聯(lián)客,其中米聯(lián)客對Xilinx提供的XAPP1052和XDMA都有詳細(xì)的教程和視頻,當(dāng)然是收費(fèi)的;而黑金現(xiàn)在基本上都是基于XDMA編寫的FPGA PCIe例程。

?????? ?Xilinx官方提供的XDMA IP核方案有一個不足的地方,就是PCIe通信時的通道數(shù)量有限制,用戶無法靈活配置,只能兩上兩下,無法實(shí)現(xiàn)8上8下這種,除非用戶自己通過軟件編寫實(shí)現(xiàn),這樣工作量就會無比巨大。另外,Xilinx官方提供的驅(qū)動文件沒有經(jīng)過微軟數(shù)字簽名認(rèn)證,無法正常安裝,只能將windows系統(tǒng)設(shè)置到測試模式下才行,這點(diǎn)對于普通用戶來說,比較麻煩。

?????? ?2)以色列XILLYBUS公司推出的Xillybus FPGA PCIe DMA驅(qū)動IP核。這家公司技術(shù)實(shí)力非常全面,在很早的時候,就把復(fù)雜的FPGA PCIe DMA通信技術(shù)通過自己的封裝變成傻瓜化,讓用戶能夠輕輕松松集成到自己的項(xiàng)目和產(chǎn)品應(yīng)用中。與此同時,該公司還把USB 3.0協(xié)議進(jìn)一步封裝成非常易用的FPGA IP核,以及將Xilinx ZYNQ平臺里面的AXI4總線重新封裝了。除此之外,Xillybus不僅僅支持Xilinx公司帶PCIe的全系列FPGA芯片,還支持Altera公司帶PCIe的全系列FPGA 芯片。

?????? ?XILLYBUS公司這樣做的目的就是為了降低開發(fā)者的門檻,節(jié)約軟件工程師大量的開發(fā)時間成本。其實(shí),這個本應(yīng)該是Xilinx公司該干的事情,但是Xilinx卻沒有這樣做,很多原創(chuàng)公司做的軟件其實(shí)都太偏底層了,應(yīng)用層和易用性都不太好。

?????? ?下面,我們來看看,Xillybus是如何將一個復(fù)雜的PCIe DMA封裝成傻瓜式的IP核,讓用戶不費(fèi)吹灰之力就能嵌到自己的FPGA程序里面。先看圖7-5所示。

?

圖7-5:Xillybus PCIe IP核內(nèi)部鏈接示意圖

? ? ? ? 首先,Xillybus將Xilinx或Altera公司的底層PCIe接口IP core,接入到它自己的Xillybus IP core,然后再通過四線握手的Application FIFO接口將收發(fā)TX、RX通道映射出來給到FPGA。結(jié)構(gòu)非常清晰,用戶即使完全不懂PCIe通信協(xié)議,也可以很簡單的在FPGA里面通過調(diào)用Xillybus提供的收發(fā)FIFO接口,將數(shù)據(jù)發(fā)送到上位機(jī)PC或者接收上位機(jī)PC下發(fā)的數(shù)據(jù),因?yàn)閄illybus直接將底層的IP核全部屏蔽了,用戶只需要按照標(biāo)準(zhǔn)的四線握手協(xié)議來操作對應(yīng)的FIFO緩沖區(qū)就可以了。而上位機(jī)PC端更加簡單,只需要通過打開被系統(tǒng)(Windows和Linux都支持)識別出來的名為xillybus的PCIe設(shè)備,然后調(diào)用標(biāo)準(zhǔn)的文件讀寫函數(shù),進(jìn)行文件讀寫即可控制底層FPGA芯片里面的FIFO數(shù)據(jù)的收發(fā)。

?????? ?這個控制過程其實(shí)就跟全雙工的串口通信一樣簡單,用戶只需要關(guān)心數(shù)據(jù)存放在哪里,到哪里去讀數(shù)據(jù)就可以了;另外,Xillybus還提供了一個web配置頁面,用戶可以直接在上面自由的分配FPGA端的PCIe通道數(shù)量和通道傳輸速率,非常方便,比如,在一個既有高速采集又有很多控制命令和參數(shù)傳輸?shù)膽?yīng)用中,如果我們直接在頁面上配置多個不同位寬不同傳輸速度的Channel,那么用戶在FPGA里面編程和上位機(jī)解析的時候就會非常方便,因?yàn)槊總€通道都是一個獨(dú)立的存在,比如將需要高速采集傳輸?shù)臄?shù)據(jù)流通過64位位寬的Channel0發(fā)送給PC(上行),將上位機(jī)低速的控制參數(shù)通過8位位寬的Channel4發(fā)送給FPGA(下行),如圖7-6所示。

圖7-6:Xillybus PCIe IP通道參數(shù)配置頁面

? ? ? ? 在后續(xù)我們封裝出來給用戶的LabVIEW FPGA PCIe CLIP里面,我們默認(rèn)提供了8上8下,一共16個通道,這樣極大的方便了用戶今后在自己的項(xiàng)目里面使用PCIe通信,而無需考慮因?yàn)橥ǖ啦粔驅(qū)е聰?shù)據(jù)不好解析的尷尬。從上位機(jī)PC端的角度來看,其實(shí)這8上8下的PCIe通道,本質(zhì)上有點(diǎn)類似8對串口通信,只不過PCIe的傳輸速度遠(yuǎn)快于串口、USB、網(wǎng)口而已。因此,用戶在上位機(jī)就可以像操作串口那樣通過PCIe總線來操作和訪問FPGA里面的數(shù)據(jù)了,開發(fā)過程非常簡單,只要會一點(diǎn)LabVIEW就能輕松搞定。

?? ? ? ? 3)GitHub上的RIFFA(AReusable Integration Framework For FPGA Accelerators)IP 核

?????? ?RIFFA(用于FPGA加速器的可重用集成框架),它是用于通過PCIe總線從主機(jī)CPU到FPGA相互之間進(jìn)行數(shù)據(jù)交互的簡單框架。該框架要求具有PCIe的上位機(jī)PC或者工控機(jī)和帶有PCIe接口的FPGA硬件。RIFFA中間層驅(qū)動支持Windows和Linux,底層驅(qū)動FPGA PCIe IP核支持Xilinx和Altera芯片,上位機(jī)應(yīng)用層支持LabVIEW、C / C ++、Python、Matlab和Java。

?????? ?軟件方面,RIFFA有兩個主要功能:數(shù)據(jù)發(fā)送和數(shù)據(jù)接收。上層提供C / C ++、Python、MATLAB、Java下的DLL鏈接庫。中間層驅(qū)動程序在每個系統(tǒng)(Linux和Windows操作系統(tǒng))下支持識別多個FPGA(最多5個)。

?????? ?硬件方面,用戶訪問具有獨(dú)立發(fā)送和接收信號的接口(全雙工),無需了解總線地址,緩沖區(qū)大小或者PCIe數(shù)據(jù)包格式。只需在FIFO接口上發(fā)送數(shù)據(jù)并在FIFO接口上接收數(shù)據(jù)即可。RIFFA不依賴于PCIe橋接器,因此不受橋接器實(shí)現(xiàn)的限制。取而代之的是,RIFFA直接與PCIe端點(diǎn)一起使用,RIFFA使用直接內(nèi)存訪問(DMA)傳輸和中斷信號傳輸數(shù)據(jù)。這樣可以在PCIe鏈路上實(shí)現(xiàn)高帶寬。軟件和硬件接口都已大大簡化。

?????? ?關(guān)于RIFFA PCIe IP核的工作示意圖,如圖7-7所示。

圖7-7:RIFFA PCIe IP工作示意圖

? ? ? ? FPGA底層集成了Xilinx的PCIe core,然后使用TX、RX引擎,經(jīng)過通道仲裁映射到最多12個TX、RX通道上。結(jié)構(gòu)與PIO、BMD的結(jié)構(gòu)類似,增加了通道擴(kuò)展的功能,這樣用戶就不需要自己去寫仲裁代碼了。

?????? ?上位機(jī)PC端主要就是基本的驅(qū)動、應(yīng)用結(jié)構(gòu),PCIe的訪問空間映射到了PC的內(nèi)存上;中間層的RIFFA驅(qū)動負(fù)責(zé)內(nèi)存以及PCIe接口的管理,RIFFA動態(tài)鏈接庫可以被用戶應(yīng)用程序調(diào)用,從而實(shí)現(xiàn)對底層RIFFA驅(qū)動的調(diào)用,并最終實(shí)現(xiàn)PCIe的數(shù)據(jù)通信。

?????? ?可以看出,這個RIFFA的框架跟上面的Xillybus框架其實(shí)很類似,只不過Xillybus更強(qiáng)大更靈活,基于Web的通道配置頁面里面可以實(shí)現(xiàn)最多128個通道的任意分配和帶寬設(shè)置,遠(yuǎn)多于RIFFA的12個通道。

?? ? ? ? 4)北大的EPEE(Efficient and Flexible Host-FPGA PCIe Communication Library)

?????? ?最后一個就是曇花一現(xiàn)的北大開源組織做的EPEE,圖7-8是其系統(tǒng)框圖,感興趣的用戶可以自行分析,因?yàn)槟壳翱梢哉业竭@個EPEE的資料和應(yīng)用非常少,這里就不在介紹了。

圖7-8:EPEE PCIe IP工作系統(tǒng)框圖

? ? ? ??總結(jié):對于我們傳統(tǒng)的嵌入式工程師來說,選擇一個合適的FPGA PCIe驅(qū)動IP非常重要,不僅可以節(jié)約大量開發(fā)時間,關(guān)鍵是穩(wěn)定性要比我們自己寫的更好,畢竟很多商業(yè)的FPGA驅(qū)動IP核和驅(qū)動inf文件都是經(jīng)過了大量企業(yè)實(shí)踐檢驗(yàn)過的,而很多所謂的開源代碼,實(shí)際上用起來總是有這樣那樣的bug和坑,需要用戶自己花費(fèi)大量的時間去調(diào)試、修改和維護(hù),有時候得不償失。如果是做產(chǎn)品的話,個人愚見,還是用成熟的企業(yè)版軟件工具包和FPGA驅(qū)動IP核,畢竟穩(wěn)定勝于一切,社會分工不一樣。

?????? ?經(jīng)過上面的講解和分析,最終我們選擇了以色列的Xillybus作為我們LabVIEW FPGA底層PCIe驅(qū)動IP核的候選,我們將整個Xillybus的FPGA PCIe IP核以CLIP的方式重新封裝到LabVIEW My FPGA下面,這樣用戶就能通過LabVIEW圖形化的方式直接調(diào)用這個IP核了(關(guān)于這個PCIe DMA CLIP的詳細(xì)介紹,后面專門會有一節(jié)進(jìn)行講解),用戶只需要會一點(diǎn)點(diǎn)LabVIEW就可以將最為復(fù)雜的FPGA PCIe DMA通信輕松拿下。

?

?????? ?旁白:我們也衷心地希望國內(nèi)有更多的牛人、高手或者企業(yè)能夠像以色列Xillybus公司那樣專注于做一件事情,然后把這件事做到極致,做出屬于我們中國人自己的底層FPGA PCIe IP核、中間層驅(qū)動inf和上層應(yīng)用層DLL。我相信這一天早晚會到來!

LabVIEW FPGA PCIe開發(fā)講解-7.2節(jié):目前主流的4大Xilinx FPGA PCIe DMA通信IP核講解的評論 (共 條)

分享到微博請遵守國家法律
连南| 深州市| 利川市| 昭觉县| 出国| 三亚市| 义马市| 龙州县| 荃湾区| 宁化县| 富川| 永昌县| 方山县| 永顺县| 朝阳市| 井冈山市| 天镇县| 莎车县| 安徽省| 苍山县| 大宁县| 株洲县| 星子县| 梅河口市| 忻州市| 南溪县| 肃北| 鄱阳县| 宁陕县| 平利县| 宁乡县| 普定县| 昌吉市| 安远县| 辛集市| 金坛市| 松桃| 玉龙| 漳平市| 南川市| 越西县|