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