一種fpga與計算機之間的通信系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供了一種FPGA與計算機之間的通信系統(tǒng),包括:DMA引擎、PIO引擎、寄存器組、報文控制器、中斷控制器和PCIe?IP核。通過FPGA硬件中獨立的發(fā)送和接收模塊實現(xiàn)全雙工、高吞吐率的DMA數(shù)據(jù)傳輸,通過發(fā)送或接收模塊中對數(shù)據(jù)流和控制流的單獨處理實現(xiàn)低延遲的數(shù)據(jù)傳輸,通過上述DMA數(shù)據(jù)傳輸,將FPGA和計算機連接在一起。利用本發(fā)明提供的技術(shù)方案,可以提高FPGA應(yīng)用與計算機集成的效率,加快FPGA應(yīng)用的研發(fā)、測試及推向市場速度,節(jié)省了FPGA應(yīng)用與計算機集成所花費的時間與人力投入。
【專利說明】—種FPGA與計算機之間的通信系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明提供一種FPGA (現(xiàn)場可編程門陣列,F(xiàn)ield — Programmable Gate Array)與計算機之間的通信系統(tǒng),具體涉及一種高效、易用的FPGA與計算機之間的PCIe通信系統(tǒng)。
【背景技術(shù)】
[0002]現(xiàn)場可編程門陣列(FPGA)是一種可以編程的電路器件。隨著FPGA技術(shù)的發(fā)展,F(xiàn)PGA芯片中的資源不斷增加,功能和運算能力也有了很大的提升。很多研究者采用FPGA對算法進行加速。因此FPGA加速器和計算機之間高效、易用的通信就成為了一種需求。
[0003]PCIe (PC1-Express,快捷外設(shè)互聯(lián)標(biāo)準(zhǔn))總線是一種高速的計算機總線,它使用串行的、點對點的方式來連接計算機的外部設(shè)備。PCIe總線單條鏈路的單個方向可以達(dá)到2Gbps (1.0協(xié)議)、4Gbps (2.0協(xié)議)或近8Gbps (3.0協(xié)議)的數(shù)據(jù)傳輸速率。一個PCIe設(shè)備還可以同時使用多條串行鏈路進行數(shù)據(jù)傳輸,因此能夠達(dá)到很高的數(shù)據(jù)傳輸速率。
[0004]MPRace (G.Marcus, ff.Gao, A.Kugel, and R.Manner.The mprace framework:Anopen source stack for communication with custom fpga-based accelerators.1nProgrammable Logic (SPL),201IVII Southern Conference on, pagesl55 - 160,2011.)是一個使用PCIe連接FPGA和計算機的系統(tǒng)。該系統(tǒng)使用DDR RAMCdouble data rate randomaccess memory)接口作為和用戶硬件的數(shù)據(jù)接口,并提供若干寄存器作為用戶硬件的控制接口。在軟件方面,該系統(tǒng)提供的軟件接口暴露了很多數(shù)據(jù)傳輸過程中的細(xì)節(jié),抽象層次較低。這種方法只能對于采用DDR接口的用戶硬件提供較大的方便,且由于軟件抽象層次較低,使用比較麻煩。
[0005]Speedy Bus Mastering PCI Express (R.Bittner.Speedy bus masteringpci express.1n Field Programmable Logic and Applications(FPL),201222ndInternational Conference on, pages523 - 526, 2012.)是一個將 PCIe 總線信號轉(zhuǎn)化為局部總線的系統(tǒng)。該系統(tǒng)的數(shù)據(jù)傳輸控制都需要用戶自己完成,并且沒有提供對應(yīng)的軟件支持。該系統(tǒng)提供了一個帶有DDR RAM的示例,并對這個示例提供了對應(yīng)的軟件程序,但是該示例不具有通用性。
[0006]一種PCIe多功能設(shè)備和硬件加速算法集成裝置(實用新型專利申請?zhí)?01220109341.9)是一個具有片上總線結(jié)構(gòu)的加速算法裝置。該裝置雖然可以被用于FPGA與計算機的通信,但只能支持一個算法加速邏輯設(shè)備,降低了系統(tǒng)的可用性。且沒有在軟件端對系統(tǒng)提供支持,不易于用戶使用。且該裝置的數(shù)據(jù)通路中存在其它裝置,增加了數(shù)據(jù)傳輸延遲,降低了數(shù)據(jù)傳輸性能。
【發(fā)明內(nèi)容】
[0007]為了便于說明,本文約定:“DMA”表示直接內(nèi)存訪問,即Directly memory access?!唉宝?”表示programmed input/output,“IP核”表示已驗證、可重利用并具有某種確定功能的硬件電路模塊,即 Intellectual Property Core。
[0008]本發(fā)明的目的是提供一種基于PCIe總線的通信系統(tǒng),用以解決FPGA與計算機之間高效、易用的數(shù)據(jù)通信的問題。
[0009]本發(fā)明的原理是:通過FPGA硬件中獨立的發(fā)送和接收模塊實現(xiàn)全雙工、高吞吐率的DMA數(shù)據(jù)傳輸,通過發(fā)送或接收模塊中對數(shù)據(jù)流和控制流的單獨處理實現(xiàn)低延遲的數(shù)據(jù)傳輸,通過上述DMA數(shù)據(jù)傳輸,將FPGA和計算機連接在一起。
[0010]本發(fā)明提供的技術(shù)方案如下:
[0011]一種FPGA與計算機之間的通信系統(tǒng),包括:DMA引擎、PIO引擎、寄存器組、報文控制器、中斷控制器和PCIe IP核;其中,
[0012](I)所述DMA引擎包括下行DMA控制模塊、下行DMA數(shù)據(jù)處理模塊、上行DMA控制模塊、上行DMA數(shù)據(jù)處理模塊,其中,
[0013](1.1)下行DMA控制模塊用于對計算機到FPGA方向的DMA進行控制,該方向的DMA也叫DMA讀,依據(jù)寄存器組給出的DMA讀開始、DMA讀描述符地址信號對DMA描述符進行DMA操作,然后通過DMA描述符中的DMA地址和DMA長度信息控制下行DMA數(shù)據(jù)處理模塊進行DMA讀操作;
[0014](1.2)下行DMA數(shù)據(jù)處理模塊用于對計算機到FPGA方向的DMA數(shù)據(jù)進行處理,依據(jù)下行DMA控制模塊輸出的DMA地址和DMA長度信息,對數(shù)據(jù)進行DMA操作,并將DMA的數(shù)據(jù)輸出給用戶FPGA應(yīng)用;
[0015](1.3)上行DMA控制模塊用于對FPGA到計算機方向的DMA進行控制,該方向的DMA也叫DMA寫,依據(jù)寄存器組給出的DMA寫開始、DMA寫描述符地址信號對DMA描述符進行DMA操作,然后通過DMA描述符中的DMA地址和DMA長度信息控制上行DMA數(shù)據(jù)處理模塊進行DMA寫操作;
[0016](1.4)上行DMA數(shù)據(jù)處理模塊用于對FPGA到計算機方向的DMA數(shù)據(jù)進行處理,從用戶FPGA應(yīng)用獲得將要被DMA的數(shù)據(jù),并依據(jù)上行DMA控制模塊輸出的DMA地址和DMA長度信息,對數(shù)據(jù)進行DMA寫操作;
[0017](2)所述PIO引擎對PIO的請求進行處理,對于PIO讀請求,PIO引擎將向寄存器組給出PIO讀地址,當(dāng)寄存器組返回讀取的數(shù)據(jù)時,PIO引擎通過報文控制器和PCIe IP核向PCIe總線上回復(fù)讀取到的數(shù)據(jù);對于PIO寫請求,PIO引擎向寄存器組給出PIO寫地址和數(shù)據(jù),以使數(shù)據(jù)被寫入寄存器中;
[0018](3)所述寄存器組由一系列的狀態(tài)與控制寄存器構(gòu)成,用于對系統(tǒng)進行控制,包括DMA讀開始寄存器、DMA寫開始寄存器、DMA讀操作描述符地址寄存器、DMA寫操作描述符地址寄存器;
[0019](4)所述報文控制器通過PCIe IP核與PCIe總線連接,控制數(shù)據(jù)的發(fā)送和接收;
[0020](4.1)報文控制器將通過PCIe IP核接收到的不同類別的數(shù)據(jù)分發(fā)到PIO引擎或DMA弓I擎中的下行DMA控制模塊、下行DMA數(shù)據(jù)處理模塊、上行DMA控制模塊、上行DMA數(shù)據(jù)處理模塊中;
[0021](4.2)報文控制器從PIO引擎或DMA引擎中的下行DMA控制模塊、下行DMA數(shù)據(jù)處理模塊、上行DMA控制模塊、上行DMA數(shù)據(jù)處理模塊接收數(shù)據(jù),并通過PCIe IP核將數(shù)據(jù)發(fā)送到PCIe總線;[0022](5)所述中斷控制器通過與PCIe IP核與PCIe總線連接,控制中斷請求的發(fā)送;
[0023](5.1)中斷控制器接收DMA引擎中下行DMA控制模塊、上行DMA控制模塊的中斷請求,當(dāng)DMA完成或出現(xiàn)錯誤時,中斷控制器將收到DMA讀或DMA寫的完成或出錯中斷請求;
[0024](5.2)中斷控制器通過PCIe IP核將中斷請求發(fā)送到PCIe總線上,進而引發(fā)計算機系統(tǒng)中的中斷過程;
[0025](6)所述PCIe IP核用于和PCIe總線進行交互,將PCIe總線信號中的數(shù)據(jù)提取出來。
[0026]所述的FPGA與計算機之間的通信系統(tǒng),還包括PIO接口模塊,該模塊為用戶FPGA應(yīng)用提供寄存器接口,該模塊從PIO引擎獲得PIO請求,完成對用戶寄存器的讀寫操作。
[0027]所述的FPGA與計算機之間的通信系統(tǒng),還包括中斷接口模塊,該模塊為用戶FPGA應(yīng)用提供中斷接口,該模塊將用戶FPGA應(yīng)用的中斷請求傳遞到中斷控制器模塊中,并由中斷控制器通過PCIe IP核產(chǎn)生PCIe總線上的中斷。
[0028]所述的FPGA與計算機之間的通信系統(tǒng),還包括排序模塊,該模塊對下行DMA數(shù)據(jù)進行重排序,并為用戶FPGA應(yīng)用提供連續(xù)的數(shù)據(jù)。
[0029]本發(fā)明的有益效果:利用本發(fā)明提供的技術(shù)方案,可以提高FPGA應(yīng)用與計算機集成的效率,加快FPGA應(yīng)用的研發(fā)、測試及推向市場速度,節(jié)省了 FPGA應(yīng)用與計算機集成所花費的時間與人力投入。
【專利附圖】
【附圖說明】
[0030]圖1本發(fā)明的系統(tǒng)結(jié)構(gòu)圖
[0031]圖2擴展的系統(tǒng)結(jié)構(gòu)圖
【具體實施方式】
[0032]本發(fā)明的【具體實施方式】如下:
[0033]一種FPGA與計算機之間的通信系統(tǒng),包括:DMA引擎、PIO引擎、寄存器組、報文控制器、中斷控制器和PCIe IP核(參見圖1);其中,
[0034]A.DMA引擎包括下行DMA控制模塊、下行DMA數(shù)據(jù)處理模塊、上行DMA控制模塊、上行DMA數(shù)據(jù)處理模塊,其中,
[0035]a)下行DMA控制模塊用于對計算機到FPGA方向的DMA (該方向的DMA也叫DMA讀)進行控制,依據(jù)寄存器組給出的DMA讀開始、DMA讀描述符地址信號對DMA描述符進行DMA操作,然后通過DMA描述符中的DMA地址和DMA長度信息控制下行DMA數(shù)據(jù)處理模塊進行DMA讀操作;
[0036]b)下行DMA數(shù)據(jù)處理模塊用于對計算機到FPGA方向的DMA (該方向的DMA也叫DMA讀)數(shù)據(jù)進行處理,依據(jù)下行DMA控制模塊輸出的DMA地址和DMA長度信息,對數(shù)據(jù)進行DMA操作,并將DMA的數(shù)據(jù)輸出給用戶FPGA應(yīng)用;
[0037]c)上行DMA控制模塊用于對FPGA到計算機方向的DMA (該方向的DMA也叫DMA寫)進行控制,依據(jù)寄存器組給出的DMA寫開始、DMA寫描述符地址信號對DMA描述符進行DMA操作,然后通過DMA描述符中的DMA地址和DMA長度信息控制上行DMA數(shù)據(jù)處理模塊進行DMA寫操作;
[0038]d)上行DMA數(shù)據(jù)處理模塊用于對FPGA到計算機方向的DMA (該方向的DMA也叫DMA寫)數(shù)據(jù)進行處理,從用戶FPGA應(yīng)用獲得將要被DMA的數(shù)據(jù),并依據(jù)上行DMA控制模塊輸出的DMA地址和DMA長度信息,對數(shù)據(jù)進行DMA寫操作;
[0039]B.PIO引擎對PIO的請求進行處理,對于PIO讀請求,PIO引擎將向寄存器組給出PIO讀地址,當(dāng)寄存器組返回讀取的數(shù)據(jù)時,PIO引擎通過報文控制器和PCIe IP核向PCIe總線上回復(fù)讀取到的數(shù)據(jù);對于PIO寫請求,PIO引擎向寄存器組給出PIO寫地址和數(shù)據(jù),以使數(shù)據(jù)被寫入寄存器中;
[0040]C.寄存器組由一系列的狀態(tài)與控制寄存器構(gòu)成,用于對系統(tǒng)進行控制,包括DMA讀開始寄存器、DMA寫開始寄存器、DMA讀操作描述符地址寄存器、DMA寫操作描述符地址寄存器(可選的,寄存器組還可以包括其它寄存器,比如當(dāng)前系統(tǒng)的狀態(tài)寄存器,硬件版本號寄存器等等);
[0041]D.報文控制器通過PCIe IP核與PCIe總線連接,控制數(shù)據(jù)的發(fā)送和接收;
[0042]a)報文控制器將通過PCIe IP核接收到的不同類別的數(shù)據(jù)分發(fā)到PIO引擎或DMA引擎中的下行DMA控制模塊、下行DMA數(shù)據(jù)處理模塊、上行DMA控制模塊、上行DMA數(shù)據(jù)處理模塊中;
[0043]b)報文控制器從PIO引擎或DMA引擎中的下行DMA控制模塊、下行DMA數(shù)據(jù)處理模塊、上行DMA控制模塊、上行DMA數(shù)據(jù)處理模塊接收數(shù)據(jù),并通過PCIe IP核將數(shù)據(jù)發(fā)送到PCIe總線;
[0044]E.中斷控制器通過與PCIe IP核與PCIe總線連接,控制中斷請求的發(fā)送;
[0045]a)中斷控制器接收DMA引擎中下行DMA控制模塊、上行DMA控制模塊的中斷請求,當(dāng)DMA完成或出現(xiàn)錯誤時,中斷控制器將收到DMA讀或DMA寫的完成或出錯中斷請求;
[0046]b)中斷控制器通過PCIe IP核將中斷請求發(fā)送到PCIe總線上,進而引發(fā)計算機系統(tǒng)中的中斷過程;
[0047]F.PCIe IP核用于和PCIe總線進行交互,將PCIe總線信號中的數(shù)據(jù)提取出來;
[0048]優(yōu)選的,所述FPGA與計算機之間的通信系統(tǒng)還可以包括(參見圖2):
[0049]G.PIO接口模塊,為用戶FPGA應(yīng)用提供寄存器接口。PIO接口模塊從PIO引擎獲得PIO請求,完成對用戶寄存器的讀寫操作;
[0050]H.中斷接口模塊,為用戶FPGA應(yīng)用提供中斷接口。中斷接口模塊可以將用戶FPGA應(yīng)用的中斷請求傳遞到中斷控制器模塊中,并由中斷控制器通過PCIe IP核產(chǎn)生PCIe總線上的中斷;
[0051]1.排序模塊,對下行DMA數(shù)據(jù)進行重排序。下行DMA數(shù)據(jù)在經(jīng)過PCIe總線過程中,可能會產(chǎn)生先請求的數(shù)據(jù)后到達(dá)的現(xiàn)象。排序模塊可以將數(shù)據(jù)依據(jù)請求的順序進行排序,并為用戶FPGA應(yīng)用提供連續(xù)的數(shù)據(jù)。
[0052]下面通過實例對本發(fā)明做進一步說明:
[0053]實施例1:計算機到FPGA方向的DMA數(shù)據(jù)傳輸
[0054]假定本發(fā)明所述的FPGA與計算機之間的通信系統(tǒng)收到了用戶軟件的DMA請求,需要將內(nèi)存0x45000004位置開始的字符串“ 1234”通過DMA數(shù)據(jù)傳輸,傳遞給用戶FPGA應(yīng)用。而軟件已經(jīng)將描述上述DMA操作的DMA描述符放在內(nèi)存0x43000000位置。
[0055]本發(fā)明所述的FPGA與計算機之間的通信系統(tǒng)的PIO引擎將收到兩次PIO寫請求,第一次寫入寄存器組中DMA讀操作描述符地址寄存器,寫入的值為0x43000000 ;第二次寫入寄存器組中DMA讀開始寄存器。此時下行DMA控制模塊檢測到DMA讀開始,因此按照DMA讀操作描述符地址寄存器中的值0x43000000進行數(shù)據(jù)請求,該請求會依次經(jīng)過報文控制器模塊和PCIe IP核,并傳遞到PCIe總線上。PCIe總線將響應(yīng)該請求,并將位于內(nèi)存0x43000000的數(shù)據(jù)傳遞給PCIe IP核。DMA描述符會依次經(jīng)過PCIe IP核和報文控制器,被傳遞到下行DMA控制模塊。
[0056]下行DMA控制模塊通過解析DMA描述符,獲得DMA的地址為0x45000004,DMA數(shù)據(jù)長度為4字節(jié),并將DMA的地址和長度信息傳遞給下行DMA數(shù)據(jù)處理模塊。
[0057]下行DMA數(shù)據(jù)處理模塊請求從0x45000004地址開始的4字節(jié)的數(shù)據(jù),該請求會經(jīng)過報文控制器模塊和PCIe IP核模塊,并傳遞到PCIe總線上。PCIe總線將相應(yīng)該請求,并將從內(nèi)存0x45000004地址開始的4字節(jié)數(shù)據(jù)傳遞給PCIe IP核,該數(shù)據(jù)即為包含有“ 1234”這一字符串的PCIe報文。該數(shù)據(jù)會依次經(jīng)過PCIe IP核模塊和報文控制器模塊,并被傳遞到下行DMA數(shù)據(jù)處理模塊。下行DMA數(shù)據(jù)處理模塊將對上述包含著“ 1234”這一字符串的PCIe報文進行解包處理,并將其中的數(shù)據(jù)“1234”這一字符串傳遞給用戶FPGA應(yīng)用。
[0058]上述DMA過程完成后,下行DMA控制模塊將請求中斷控制器模塊,發(fā)送DMA讀完成中斷,以告知計算機本次DMA讀操作已經(jīng)完成。
[0059]實施例2 =FPGA到計算機方向的DMA數(shù)據(jù)傳輸
[0060]假定本發(fā)明所述的FPGA與計算機之間的通信系統(tǒng)收到了用戶軟件的DMA請求,需要將FPGA中的字符串“5678”傳遞到計算機中,具體而言是DMA到內(nèi)存0x46000004開始的4個字節(jié)中。軟件已經(jīng)將描述上述DMA操作的DMA描述符放在內(nèi)存的0x44000000位置。
[0061]本發(fā)明所述的FPGA與計算機之間的通信系統(tǒng)的PIO引擎將收到兩次PIO寫請求,第一次寫入寄存器組中DMA寫描述符地址寄存器,寫入的值為0x44000000 ;第二次寫入寄存器組中DMA寫開始寄存器。此時上行DMA控制模塊檢測到DMA寫開始,因此按照DMA寫操作描述符地址寄存器中的值0x44000000進行數(shù)據(jù)請求,該請求會依次經(jīng)過報文控制器模塊和PCIe IP核,并傳遞到PCIe總線上。PCIe總線將響應(yīng)該請求,并將位于內(nèi)存0x44000000的數(shù)據(jù)傳遞給PCIe IP核。DMA描述符會依次經(jīng)過PCIe IP核和報文控制器,被傳遞到上行DMA控制模塊。
[0062]上行DMA控制模塊通過解析DMA描述符,獲得DMA的地址為0x46000004,DMA數(shù)據(jù)長度為4字節(jié),并將DMA的地址和長度信息傳遞給上行DMA數(shù)據(jù)處理模塊。
[0063]上行DMA數(shù)據(jù)處理模塊將用戶FPGA應(yīng)用傳遞過來的頭4個字節(jié)進行打包,生成PCIe總線中的存儲器寫請求報文,并通過報文控制器與PCIe IP核模塊將該請求報文發(fā)送到PCIe總線上。隨后再發(fā)送對0x46000004地址的讀請求報文。該讀請求報文用于確定上述寫請求報文已經(jīng)被處理。當(dāng)對應(yīng)于0x46000004地址的讀請求報文的回復(fù)報文依次經(jīng)過PCIe IP核和報文控制器模塊后,上行DMA數(shù)據(jù)處理模塊確認(rèn)DMA數(shù)據(jù)已經(jīng)被處理。
[0064]上述過程完成后,上行DMA控制模塊將請求中斷控制器模塊,發(fā)送DMA寫完成中斷,以告知計算機本次DMA寫操作已經(jīng)完成。
[0065]實施例3:計算機到FPGA方向的PIO數(shù)據(jù)傳輸
[0066]在附帶有PIO接口模塊的系統(tǒng)中,假定本發(fā)明所述的FPGA與計算機之間的通信系統(tǒng)收到了用戶軟件的Pio寫請求,需要將O號寄存器寫入0x00030002。
[0067]軟件的PIO寫請求會通過PCIe總線傳遞到PCIe IP核,并經(jīng)過報文控制器被傳輸至IJ PIO引擎。PIO引擎判斷寫入的地址后,發(fā)現(xiàn)軟件的PIO寫請求寫入的寄存器地址位于用戶自定義寄存器的地址范圍,因此將該Pio請求交由PIO接口模塊處理。PIO接口模塊判斷后,得知軟件的PIO寫請求需要對O號寄存器寫入0x00030002。于是PIO接口模塊發(fā)送向O號寄存器寫入0x00030002的請求。當(dāng)PIO接口模塊收到寫O號寄存器請求對應(yīng)的回復(fù)報文后,本次PIO數(shù)據(jù)傳輸完成。
[0068]實施例4 =FPGA到計算機方向的PIO數(shù)據(jù)傳輸
[0069]在附帶有PIO接口模塊的系統(tǒng)中,假定本發(fā)明所述的FPGA與計算機之間的通信系統(tǒng)收到用戶軟件的PIO讀請求,需要讀取O號寄存器的值。而當(dāng)前O號寄存器的值為0x00010002。
[0070]軟件的PIO讀請求會通過PCIe總線傳遞到PCIe IP核,并經(jīng)過報文控制器被傳輸?shù)絇IO引擎。PIO引擎判斷讀取的地址后,發(fā)現(xiàn)軟件的PIO讀請求的寄存器地址位于用戶自定義寄存器地址范圍,因此將該Pio請求交給PIO接口模塊進行處理。PIO接口模塊判斷后,得知軟件的PIO讀請求需要對O號寄存器進行讀操作。因此PIO接口模塊發(fā)送讀取O號寄存器請求。當(dāng)PIO接口模塊收到讀取O號寄存器請求對應(yīng)的回復(fù)后,會從回復(fù)中得到O號寄存器的值為0x00010002。
[0071]此時PIO接口模塊會回復(fù)PIO引擎讀取到的O號寄存器的值為0x00010002,PIO引擎會依據(jù)O號寄存器的值生成回復(fù)報文,并將該報文經(jīng)由報文控制器和PCIe IP核發(fā)送到PCIe總線上,從而使軟件獲得O號寄存器的值為0x00010002。
[0072]實施例5:用戶自定義中斷
[0073]在附帶有中斷接口模塊的系統(tǒng)中,假定本發(fā)明所述的FPGA與計算機之間的通信庫系統(tǒng)收到用戶FPGA應(yīng)用給出的用戶自定義中斷請求。
[0074]如果中斷被使能,中斷接口模塊會將該請求傳遞給中斷控制器模塊,中斷控制器模塊將通過PCIe IP核在PCIe總線上發(fā)送中斷請求。計算機中的用戶軟件收到中斷信號,即可進行相應(yīng)的中斷處理。
[0075]實施例6:排序模塊的使用
[0076]在附有排序模塊的系統(tǒng)中,假定本發(fā)明所述的FPGA與計算機之間的通信庫系統(tǒng)接收到軟件的DMA讀請求,需要將內(nèi)存中0x45000000開始的256字節(jié)DMA到FPGA中。
[0077]和實施例1中描述的過程類似,本發(fā)明所述的系統(tǒng)將向PCIe總線發(fā)送存儲器讀請求報文,假設(shè)發(fā)送了兩個存儲器讀請求報文,分別請求128字節(jié)的數(shù)據(jù)。即請求報文I請求了從地址0x45000000開始的128字節(jié)的數(shù)據(jù),請求報文2請求了從地址0x45000080開始的128字節(jié)的數(shù)據(jù)。假設(shè)對于請求報文1,PCIe總線上的回復(fù)報文為回復(fù)報文1_1和回復(fù)報文1-2,它們各包含了 64字節(jié)的數(shù)據(jù);對于請求報文2,PCIe總線上的回復(fù)報文為回復(fù)報文2-1和回復(fù)報文2-2,它們各包含了 64字節(jié)的數(shù)據(jù)。用戶FPGA應(yīng)用需要獲得的數(shù)據(jù)順序應(yīng)該是:回復(fù)報文1-1中的數(shù)據(jù),回復(fù)報文1-2中的數(shù)據(jù),回復(fù)報文2-1中的數(shù)據(jù),回復(fù)報文2-2中的數(shù)據(jù)。
[0078]依據(jù)PCIe總線的協(xié)議,PCIe IP核收到上述回復(fù)報文的可能順序為:回復(fù)報文2-1,回復(fù)報文1-1回復(fù)報文1-2,回復(fù)報文2-2。這時,排序模塊會將打亂順序的四個報文重新進行排序,并向用戶FPGA應(yīng)用傳輸以下數(shù)據(jù):回復(fù)報文1-1中的數(shù)據(jù),回復(fù)報文1-2中的數(shù)據(jù),回復(fù)報文2-1中的數(shù)據(jù),回復(fù)報文2-2中的數(shù)據(jù)。
【權(quán)利要求】
1.一種FPGA與計算機之間的通信系統(tǒng),其特征是,所述通信系統(tǒng)包括:DMA引擎、PIO引擎、寄存器組、報文控制器、中斷控制器和PCIe IP核;其中, (1)所述DMA引擎包括下行DMA控制模塊、下行DMA數(shù)據(jù)處理模塊、上行DMA控制模塊、上行DMA數(shù)據(jù)處理模塊,其中,
(1.1)下行DMA控制模塊用于對計算機到FPGA方向的DMA進行控制; (1.2)下行DMA數(shù)據(jù)處理模塊用于對計算機到FPGA方向的DMA數(shù)據(jù)進行處理; (1.3)上行DMA控制模塊用于對FPGA到計算機方向的DMA進行控制; (1.4)上行DMA數(shù)據(jù)處理模塊用于對FPGA到計算機方向的DMA數(shù)據(jù)進行處理; (2)所述PIO弓丨擎對PIO的請求進行處理,對于PIO讀請求,PIO引擎將向寄存器組給出PIO讀地址,當(dāng)寄存器組返回讀取的數(shù)據(jù)時,PIO引擎通過報文控制器和PCIe IP核向PCIe總線上回復(fù)讀取到的數(shù)據(jù);對于PIO寫請求,PIO引擎向寄存器組給出PIO寫地址和數(shù)據(jù),以使數(shù)據(jù)被寫入寄存器中; (3)所述寄存器組由一系列的狀態(tài)與控制寄存器構(gòu)成,用于對系統(tǒng)進行控制,包括DMA讀開始寄存器、DMA寫開始寄存器、DMA讀操作描述符地址寄存器、DMA寫操作描述符地址寄存器; (4)所述報文控制器通過PCIeIP核與PCIe總線連接,控制數(shù)據(jù)的發(fā)送和接收; (4.1)報文控制器將通過PCIe IP核接收到的不同類別的數(shù)據(jù)分發(fā)到PIO引擎或DMA引擎中的下行DMA控制模塊、下行DMA數(shù)據(jù)處理模塊、上行DMA控制模塊、上行DMA數(shù)據(jù)處理模塊中; (4.2)報文控制器從PIO引擎或DMA引擎中的下行DMA控制模塊、下行DMA數(shù)據(jù)處理模塊、上行DMA控制模塊、上行DMA數(shù)據(jù)處理模塊接收數(shù)據(jù),并通過PCIe IP核將數(shù)據(jù)發(fā)送到PCIe總線; (5)所述中斷控制器通過與PCIeIP核與PCIe總線連接,控制中斷請求的發(fā)送; (5.1)中斷控制器接收DMA引擎中下行DMA控制模塊、上行DMA控制模塊的中斷請求,當(dāng)DMA完成或出現(xiàn)錯誤時,中斷控制器將收到DMA讀或DMA寫的完成或出錯中斷請求; (5.2)中斷控制器通過PCIe IP核將中斷請求發(fā)送到PCIe總線上,進而引發(fā)計算機系統(tǒng)中的中斷過程; (6)所述PCIeIP核用于和PCIe總線進行交互,將PCIe總線信號中的數(shù)據(jù)提取出來。
2.如權(quán)利要求1所述的FPGA與計算機之間的通信系統(tǒng),其特征是,所述通信系統(tǒng)還包括PIO接口模塊,該模塊為用戶FPGA應(yīng)用提供寄存器接口,該模塊從PIO引擎獲得PIO請求,完成對用戶寄存器的讀寫操作。
3.如權(quán)利要求1所述的FPGA與計算機之間的通信系統(tǒng),其特征是,所述通信系統(tǒng)還包括中斷接口模塊,該模塊為用戶FPGA應(yīng)用提供中斷接口,該模塊將用戶FPGA應(yīng)用的中斷請求傳遞到中斷控制器模塊中,并由中斷控制器通過PCIe IP核產(chǎn)生PCIe總線上的中斷。
4.如權(quán)利要求1所述的FPGA與計算機之間的通信系統(tǒng),其特征是,所述通信系統(tǒng)還包括排序模塊,該模塊對下行DMA數(shù)據(jù)進行重排序,并為用戶FPGA應(yīng)用提供連續(xù)的數(shù)據(jù)。
5.如權(quán)利要求1所述的FPGA與計算機之間的通信系統(tǒng),其特征是,所述DMA引擎包括下行DMA控制模塊、下行DMA數(shù)據(jù)處理模塊、上行DMA控制模塊、上行DMA數(shù)據(jù)處理模塊,其中:(1.1)下行DMA控制模塊用于對計算機到FPGA方向的DMA進行控制,該方向的DMA也叫DMA讀,依據(jù)寄存器組給出的DMA讀開始、DMA讀描述符地址信號對DMA描述符進行DMA操作,然后通過DMA描述符中的DMA地址和DMA長度信息控制下行DMA數(shù)據(jù)處理模塊進行DMA讀操作; (1.2)下行DMA數(shù)據(jù)處理模塊用于對計算機到FPGA方向的DMA數(shù)據(jù)進行處理,依據(jù)下行DMA控制模塊輸出的DMA地址和DMA長度信息,對數(shù)據(jù)進行DMA操作,并將DMA的數(shù)據(jù)輸出給用戶FPGA應(yīng)用; (1.3)上行DMA控制模塊用于對FPGA到計算機方向的DMA進行控制,該方向的DMA也叫DMA寫,依據(jù)寄存器組給出的DMA寫開始、DMA寫描述符地址信號對DMA描述符進行DMA操作,然后通過DMA描述符中的DMA地址和DMA長度信息控制上行DMA數(shù)據(jù)處理模塊進行DMA寫操作; (1.4)上行DMA數(shù)據(jù)處理模塊用于對FPGA到計算機方向的DMA數(shù)據(jù)進行處理,從用戶FPGA應(yīng)用獲得將要被DMA的數(shù)據(jù),并依據(jù)上行DMA控制模塊輸出的DMA地址和DMA長度信息,對數(shù)據(jù)進行DMA 寫操作。
【文檔編號】G06F13/38GK103559156SQ201310556229
【公開日】2014年2月5日 申請日期:2013年11月11日 優(yōu)先權(quán)日:2013年11月11日
【發(fā)明者】王韜, 龔健 申請人:北京大學(xué)