基于串行高速總線的fpga硬件抽象層及其實(shí)現(xiàn)方法
【專利摘要】本發(fā)明公開了一種基于串行高速總線的FPGA硬件抽象層,以FPGA廠家提供的串行高速總線的IP核為對外接口,對內(nèi)提供統(tǒng)一的接口給用戶或是通信組件使用,包含如下功能模塊:IRESP模塊、IREQ模塊、DATA_CTRL模塊、TREQ模塊。本發(fā)明還公開了FPGA硬件抽象層的實(shí)現(xiàn)方法。用戶或是通信組件就可以通過使用硬件抽象層提供的統(tǒng)一的接口來方便的進(jìn)行系統(tǒng)內(nèi)通信,并可以在不同型號和規(guī)格的FPGA間任意移植程序,解決了基于串行高速總線的軟件無線電系統(tǒng)中,F(xiàn)PGA的應(yīng)用軟件移植性、操作性和可重用性差的問題。
【專利說明】基于串行高速總線的FPGA硬件抽象層及其實(shí)現(xiàn)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及串行高速總線架構(gòu)下硬件平臺的硬件抽象層設(shè)計(jì)方法,尤其涉及其中基于FPGA (現(xiàn)場可編程邏輯陣列)的硬件抽象層(以下簡稱MHAL)的實(shí)現(xiàn)方法。
【背景技術(shù)】
[0002]無線通信中不同的通信模式和功能采用不同的工作頻段、調(diào)制方式、通信協(xié)議和加密方式等,這些差異限制了不同通信設(shè)備間的連通,帶來了不便。軟件無線電的思想就是以一個(gè)通用、標(biāo)準(zhǔn)、模塊化的硬件平臺為依托,通過軟件編程來實(shí)現(xiàn)無線電臺的各種功能。
[0003]MHAL介于硬件平臺和軟件之間,它為了屏蔽硬件差異將硬件的實(shí)現(xiàn)抽象出來,負(fù)責(zé)處理軟硬件差異,并完成相關(guān)接口功能。同時(shí),軟件無線電的硬件平臺間通常通過高速總線連接。其中串行高速總線使用廣泛,它是一種針對高性能嵌入式系統(tǒng)芯片間和板間互連而設(shè)計(jì)的總線技術(shù),具有協(xié)議簡單、軟件開銷小、延時(shí)小和打包效率高等優(yōu)點(diǎn),現(xiàn)今主流的FPGA廠商均各自設(shè)計(jì)了相應(yīng)的IP核。
[0004]在現(xiàn)有的無線電通信系統(tǒng)中,較常用的硬件平臺有PowerPC、FPGA和DSP等,未采用MHAL的傳統(tǒng)方法是在不同硬件平臺上設(shè)計(jì)不同的應(yīng)用軟件,使用不同的接口規(guī)范,且相同硬件平臺也存在多樣的型號、技術(shù)體制和原理,所以軟件和接口規(guī)范也有差異。以這種方式在硬件平臺上設(shè)計(jì)應(yīng)用軟件有如下弊端:
[0005](I)移植性差。由于不同的系統(tǒng)有不同的接口,每次程序代碼移植到新的系統(tǒng)中時(shí),接口都需做相應(yīng)改變。
[0006](2)操作性差。不同的軟件設(shè)計(jì)方法使得用戶的使用方法也不同,造成使用上的不方便。
[0007](3)可重用性差。在不同的硬件平臺上各自采用不同的程序架構(gòu)和接口,導(dǎo)致只能用于特定的硬件平臺上,不能復(fù)用在其它硬件平臺上。
【發(fā)明內(nèi)容】
[0008]本發(fā)明的目的是提供一種基于串行高速總線的FPGA上MHAL的設(shè)計(jì)方法,當(dāng)基于串行高速總線的軟件無線電系統(tǒng)中的所有FPGA硬件平臺都使用該MHAL,用戶或是通信組件(以下簡稱HC)就可以通過使用MHAL提供的統(tǒng)一的接口來方便的進(jìn)行系統(tǒng)內(nèi)通信,并可以在不同型號和規(guī)格的FPGA間任意移植程序,解決了基于串行高速總線的軟件無線電系統(tǒng)中,F(xiàn)PGA的應(yīng)用軟件移植性、操作性和可重用性差的問題。
[0009]本發(fā)明的目的通過以下技術(shù)方案來實(shí)現(xiàn):
[0010]圖2為MHAL的整體設(shè)計(jì)框圖。以FPGA廠家提供的串行高速總線的IP核為對外接口,對內(nèi)提供統(tǒng)一的接口給HC使用。各個(gè)模塊的功能如下:
[0011]I) IRESP模塊:負(fù)責(zé)處理IP核向IRESP接口發(fā)送的HC請求回應(yīng)的消息,該設(shè)計(jì)中用于配置本地器件地址后請求獲取當(dāng)前器件地址,以驗(yàn)證回應(yīng)的地址與之前配置的地址是否一致;
[0012]2) IREQ模塊:負(fù)責(zé)控制IP核的IREQ接口,向IP核發(fā)送由DATA_CTRL模塊發(fā)來的HC的請求,包括配置本地器件地址(以下簡稱MAINTENANCE事務(wù))的請求和發(fā)送數(shù)據(jù)包(以下簡稱NWRITE事務(wù))的請求;
[0013]3) DATA_CTRL模塊:根據(jù)HC的請求類型向IREQ模塊傳輸配置器件地址的信息,以及從TX_FIF0中取出要發(fā)送的數(shù)據(jù),按照發(fā)送數(shù)據(jù)所需格式打包發(fā)送給IREQ模塊進(jìn)行發(fā)送;
[0014]4) TREQ模塊:負(fù)責(zé)處理通過IP核的TREQ接口接收的,由通信系統(tǒng)內(nèi)其它硬件平臺發(fā)送過來的數(shù)據(jù),從發(fā)來信息的包頭解析出器件地址,并將接收到的數(shù)據(jù)寫入相應(yīng)RX_FIFO 中。
[0015]MHAL給HC留的統(tǒng)一接口如下:
[0016]1)SET_ID_D0NE:由IRESP模塊通過判斷回應(yīng)的器件地址是否為之前配置的器件地址后拉高或拉低,若配置地址正確則為高電平,錯(cuò)誤為低電平;
[0017]2)DEVICE_ID_EN:配置本地器件地址使能,高電平時(shí)寫入要配置器件地址;
[0018]3)DEVICE_ID:要配置的器件地址;
[0019]4) FULL:TX_FIF0滿信號,當(dāng)TX_FIF0不滿時(shí)寫入數(shù)據(jù),反之不能寫入;
[0020]5)TX_WRITE_EN:寫使能,高電平的同時(shí)寫入要發(fā)送的數(shù)據(jù);
[0021]6)TX_WRITE_DATA:發(fā)送數(shù)據(jù)的接口;
[0022]7)DEST_ID:數(shù)據(jù)發(fā)送的目標(biāo)器件地址;
[0023]8)FLAG:當(dāng)其為高電平時(shí),說明接收到了數(shù)據(jù);
[0024]9) RX_READ_EN:接收數(shù)據(jù)使能,高電平時(shí)接收數(shù)據(jù);
[0025]10) RX_DATA:接收數(shù)據(jù)的接口。
[0026]MHAL實(shí)現(xiàn)如圖3、圖4、圖5所示的器件地址配置、數(shù)據(jù)發(fā)送和數(shù)據(jù)接收3個(gè)功能。下面分別進(jìn)行詳細(xì)的介紹。
[0027]I)器件地址配置
[0028]軟件無線電通信架構(gòu)中需要對各個(gè)硬件平臺及組件進(jìn)行地址的編排,這樣系統(tǒng)資源調(diào)度者無需關(guān)心底層如何通信和處理,只需根據(jù)器件地址找到并使用該資源即可。其具體實(shí)現(xiàn)步驟如下:
[0029]a.拉高DEVICE_ID_EN信號,并在DEVICE_ID接口寫入要配置器件地址;
[0030]b.DATA_CTRL模塊將器件地址傳遞給IREQ模塊;
[0031]c.1REQ模塊根據(jù)MAINTENANCE事務(wù)時(shí)序?qū)?shù)據(jù)傳輸給串行高速總線串行高速總線的IP核;
[0032]d.串行高速總線的IP核將器件地址配置進(jìn)寄存器中;
[0033]e.1REQ模塊向IP發(fā)出讀取當(dāng)前器件地址請求;
[0034]f.1P核通過IRESP接口反饋當(dāng)前的器件地址信息至MHAL,由IRESP模塊將其與之前要配置的器件地址比較;
[0035]g.若器件地址與要配置的地址相同,則表明地址配置成功,MHAL將SET_ID_D0NE接口拉高反饋給HC,反之拉低。若配置不成功則重復(fù)b?g步驟,直至成功。
[0036]2)數(shù)據(jù)發(fā)送
[0037]串行高速總線的協(xié)議規(guī)定最大的數(shù)據(jù)包為256字節(jié),但實(shí)際應(yīng)用的數(shù)據(jù)包往往超過256字節(jié),所以需要一個(gè)發(fā)送緩沖區(qū)即TX_FIFO來存儲要發(fā)送的數(shù)據(jù)。HC使用MHAL需要對外發(fā)送數(shù)據(jù)時(shí),先向TX_FIFO寫入數(shù)據(jù)。DATA_CTRL模塊只要發(fā)現(xiàn)TX_FIFO中有數(shù)據(jù)就從TX_FIFO取出數(shù)據(jù),首先取出數(shù)據(jù)包頭(數(shù)據(jù)包頭含數(shù)據(jù)長度信息),判斷要發(fā)送數(shù)據(jù)的長度,若長度大于256字節(jié)則每次取出256字節(jié),直到全部取出,反之則一次全部取出,與目的器件地址一起傳遞給IREQ模塊,采用NWRITE事務(wù)時(shí)序發(fā)送給IP核,由IP核將數(shù)據(jù)發(fā)送出去。具體步驟如下:
[0038]a.判斷MHAL的FULL信號是否拉高,拉高則說明FIFO滿不能發(fā)送,繼續(xù)等待,不滿則可以發(fā)送;
[0039]b.HC拉高TX_WRITE_EN引腳,將數(shù)據(jù)寫入FIFO,并在DEST_ID寫入發(fā)送目的地址;
[0040]c.DATA_CTRL模塊一旦發(fā)現(xiàn)TX_FIF0中有數(shù)據(jù),就通過數(shù)據(jù)包頭判斷數(shù)據(jù)長度,若數(shù)據(jù)長度大于256字節(jié)則每次從TX_FIF0中取出最大256字節(jié)數(shù)據(jù)一包發(fā)送給IREQ模塊,直至全部取出;若數(shù)據(jù)長度小于256字節(jié),則一次取出給IREQ模塊;
[0041]d.1REQ模塊每收到一包數(shù)據(jù),就將數(shù)據(jù)根據(jù)NWRITE事務(wù)時(shí)序?qū)l(fā)送給IP核;
[0042]e.1P核將數(shù)據(jù)發(fā)送出去到指定器件地址的器件上。
[0043]3)數(shù)據(jù)接收
[0044]當(dāng)FPGA接收到數(shù)據(jù)時(shí),IP核通過TREQ接口將數(shù)據(jù)發(fā)送到TREQ模塊,TREQ模塊將數(shù)據(jù)解析出來發(fā)送到接收緩沖區(qū)即RX_FIF0中,HC通過MHAL的FLAG信號來判斷是否接收到數(shù)據(jù),并將數(shù)據(jù)從RX_FIF0中取出。具體實(shí)現(xiàn)步驟如下:
[0045]a.1P核將接收到的數(shù)據(jù)發(fā)送給TREQ模塊;
[0046]b.TREQ模塊將數(shù)據(jù)發(fā)送給RX_FIF0 ;
[0047]c.HC判斷FLAG,若為高,則拉高RX_READ_EN引腳,從RX_FIF0中取出數(shù)據(jù);若為低則等待;
【專利附圖】
【附圖說明】
[0048]圖1是MHAL通信系統(tǒng)框架示意圖。
[0049]圖2是本發(fā)明MHAL的整體框架示意圖。
[0050]圖3是本發(fā)明中MHAL配置器件地址流程圖。
[0051]圖4是本發(fā)明中MHAL發(fā)送數(shù)據(jù)流程圖。
[0052]圖5是本發(fā)明中MHAL接收數(shù)據(jù)流程圖。
[0053]圖6是實(shí)施例中基于串行高速總線的FPGA的MHAL實(shí)施方案系統(tǒng)框圖。
【具體實(shí)施方式】
[0054]下面給出一種本發(fā)明的實(shí)施方式和步驟。
[0055]圖6為實(shí)例的系統(tǒng)組成框圖。整個(gè)系統(tǒng)主要包括兩塊分別有一片XC5VFX70T的FPGA和光模塊的FPGA開發(fā)板以及收發(fā)共兩根光纖線。用兩根光纖線將兩塊板的光模塊的收發(fā)端口分別互連,每個(gè)FPGA中都加載MHAL程序。下面用這兩塊FPGA通過MHAL進(jìn)行串行高速總線的相互通信,通過Xilinx的ChipScope軟件來監(jiān)控FPGA的所有端口。
[0056]第一步,配置器件地址:
[0057]I)用戶程序拉高M(jìn)HAL的DEVICE_ID_EN接口,并通過DEVICE_ID接口寫入器件地址 0x53 ;
[0058]2)通過ChipScope軟件監(jiān)控MHAL的SET_ID_D0NE的引腳是否為高,高則表明器件地址寫入成功;
[0059]3)重復(fù)上述I)和2)步驟,將另外一個(gè)FPGA的器件地址配置為0x63。
[0060]第二步,收發(fā)數(shù)據(jù):
[0061 ] I)器件地址配置為0x53的FPGA拉高TX_WRITE_EN接口,通過TX_WRITE_DATA接口寫入數(shù)據(jù)2000字節(jié)長度的任意數(shù)據(jù),DEST_ID接口寫入目標(biāo)器件地址0x63 ;
[0062]2)在器件地址配置為0x63的FPGA判斷FLAG接口是否為高,當(dāng)FLAG拉高時(shí)則拉高RX_READ_EN引腳,從RX_DATA接口接收數(shù)據(jù);
[0063]3)觀察接收到的數(shù)據(jù)以及數(shù)據(jù)長度是否與發(fā)送的數(shù)據(jù)以及數(shù)據(jù)長度相同,相同則證明收發(fā)數(shù)據(jù)功能正常;
[0064]4)重復(fù)以上I)?4)步驟20次,驗(yàn)證功能正常;
[0065]5)轉(zhuǎn)換收發(fā)雙方,從器件地址配置為0x63的FPGA上發(fā)送數(shù)據(jù)至地址為0x53的FPGA上,重復(fù)以上I)?5)。
[0066]以上所述,僅為本發(fā)明的一個(gè)具體實(shí)例,所涉及到芯片不僅局限于這I款,任何FPGA芯片都可應(yīng)用于本發(fā)明中,所以本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本【技術(shù)領(lǐng)域】的技術(shù)人員在本發(fā)明所述的技術(shù)范圍內(nèi),所做的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以權(quán)利要求書的保護(hù)范圍為準(zhǔn)。
【權(quán)利要求】
1.一種基于串行高速總線的FPGA硬件抽象層,以FPGA廠家提供的串行高速總線的IP核為對外接口,對內(nèi)提供統(tǒng)一的接口給用戶或是通信組件使用,包含如下功能模塊: 1)IRESP模塊:負(fù)責(zé)處理IP核向IRESP接口發(fā)送的用戶或是通信組件請求回應(yīng)的消息,以及配置本地器件地址后請求獲取當(dāng)前器件地址,以驗(yàn)證回應(yīng)的地址與之前配置的地址是否一致; 2)IREQ模塊:負(fù)責(zé)控制IP核的IREQ接口,向IP核發(fā)送由DATA_CTRL模塊發(fā)來的用戶或是通信組件的請求,包括配置本地器件地址的請求和發(fā)送數(shù)據(jù)包的請求; 3)DATA_CTRL模塊:根據(jù)用戶或是通信組件的請求類型向IREQ模塊傳輸配置器件地址的信息,以及從發(fā)送緩沖區(qū)中取出要發(fā)送的數(shù)據(jù),按照發(fā)送數(shù)據(jù)所需格式打包發(fā)送給IREQ模塊進(jìn)行發(fā)送; 4)TREQ模塊:負(fù)責(zé)處理通過IP核的TREQ接口接收的,由通信系統(tǒng)內(nèi)其它硬件平臺發(fā)送過來的數(shù)據(jù),從發(fā)來信息的包頭解析出器件地址,并將接收到的數(shù)據(jù)寫入接收緩沖區(qū)中; 所述的對內(nèi)提供統(tǒng)一的接口包含如下: 1)SET_ID_DONE:由IRESP模塊通過判斷回應(yīng)的器件地址是否為之前配置的器件地址后拉高或拉低,若配置地址正確則為高電平,錯(cuò)誤為低電平; 2)DEVICE_ID_EN:配置本地器件地址使能,高電平時(shí)寫入要配置器件地址; 3)DEVICE_ID:要配置的器件地址; 4)FULL:發(fā)送緩沖區(qū)滿信號,當(dāng)發(fā)送緩沖區(qū)不滿時(shí)寫入數(shù)據(jù),反之不能寫入; 5)TX_WRITE_EN:寫使能,高電平的同時(shí)寫入要發(fā)送的數(shù)據(jù); 6)TX_WRITE_DATA:發(fā)送數(shù)據(jù)的接口 ; 7)DEST_ID:數(shù)據(jù)發(fā)送的目標(biāo)器件地址; 8)FLAG:當(dāng)其為高電平時(shí),說明接收到了數(shù)據(jù); 9)RX_READ_EN:接收數(shù)據(jù)使能,高電平時(shí)接收數(shù)據(jù); 10)RX.DATA:接收數(shù)據(jù)的接口。
2.根據(jù)權(quán)利要求1所述一種基于串行高速總線的FPGA硬件抽象層的應(yīng)用方法,包含如下步驟: I)器件地址配置,實(shí)現(xiàn)步驟如下: a.拉高DEVICE_ID_EN信號,并在DEVICE_ID接口寫入要配置器件地址; b.DATA_CTRL模塊將器件地址傳遞給IREQ模塊; c.1REQ模塊根據(jù)配置本地器件地址時(shí)序?qū)?shù)據(jù)傳輸給串行高速總線串行高速總線的IP核; d.串行高速總線的IP核將器件地址配置進(jìn)寄存器中; e.1REQ模塊向IP發(fā)出讀取當(dāng)前器件地址請求; f.1P核通過IRESP接口反饋當(dāng)前的器件地址信息至硬件抽象層,由IRESP模塊將其與之前要配置的器件地址比較; g.若器件地址與要配置的地址相同,則表明地址配置成功,硬件抽象層將SET_ID_DONE接口拉高反饋給用戶或是通信組件,反之拉低;若配置不成功則重復(fù)b?g步驟,直至成功; 2)數(shù)據(jù)發(fā)送,實(shí)現(xiàn)步驟如下: a.判斷FULL接口判斷發(fā)送緩沖區(qū)是否為滿,滿則不能發(fā)送,繼續(xù)等待,不滿則可以發(fā)送; b.用戶或是通信組件拉高TX_WRITE_EN引腳,將數(shù)據(jù)寫入發(fā)送緩沖區(qū),并在DEST_ID接口寫入發(fā)送目的地址; c.DATA_CTRL模塊一旦發(fā)現(xiàn)發(fā)送緩沖區(qū)中有數(shù)據(jù),就通過數(shù)據(jù)包頭判斷數(shù)據(jù)長度,若數(shù)據(jù)長度大于規(guī)定字節(jié)則每次從發(fā)送緩沖區(qū)中取出允許的最大字節(jié)數(shù)據(jù)打包發(fā)送給IREQ模塊,直至全部取出;若數(shù)據(jù)長度小于規(guī)定的字節(jié),則一次取出給IREQ模塊; d.1REQ模塊每收到一包數(shù)據(jù),就將數(shù)據(jù)根據(jù)發(fā)送數(shù)據(jù)包時(shí)序發(fā)送給IP核; e.1P核將數(shù)據(jù)發(fā)送出去到指定器件地址的器件上; 3)數(shù)據(jù)接收,實(shí)現(xiàn)步驟如下: a.1P核將接收到的數(shù)據(jù)發(fā)送給TREQ模塊; b.TREQ模塊將數(shù)據(jù)發(fā)送給接收緩沖區(qū); c.用戶或通信組件判斷FLAG,若為高,則拉高RX_READ_EN引腳,從接收緩沖區(qū)中取出數(shù)據(jù);若為低則等待。
【文檔編號】G06F17/50GK104133963SQ201410366166
【公開日】2014年11月5日 申請日期:2014年7月29日 優(yōu)先權(quán)日:2014年7月29日
【發(fā)明者】羿昌宇, 沈聰, 李裕, 吳敏 申請人:中國航空無線電電子研究所