技術(shù)領(lǐng)域:
本發(fā)明涉及一種降低系統(tǒng)中高速串行總線(串行rapidio,以下簡稱srio)發(fā)送數(shù)據(jù)延遲的方法,尤其涉及降低現(xiàn)場可編程邏輯陣列(以下簡稱fpga)上使用srio的ip核發(fā)送數(shù)據(jù)延遲的設(shè)計方法。
背景技術(shù):
:
rapidio最早是由美國mercurycomputersystems公司為它的計算密集型信號處理系統(tǒng)自行開發(fā)的總線技術(shù)。rapidio是一種分組包交換交換結(jié)構(gòu),在網(wǎng)絡(luò)處理器、中央處理器和數(shù)字信號處理器之間的通信具有高速、低延遲、穩(wěn)定可靠的互連性。其主要特性是具有極低的延遲性和高帶寬,適合用于芯片與芯片、板與板、系統(tǒng)與系統(tǒng)之間的高速數(shù)據(jù)傳輸??商峁?0gbps以上的帶寬(rapidio2.0規(guī)范可提供100gbps帶寬),其所有的協(xié)議都是由硬件實(shí)現(xiàn)的,與軟件是無關(guān)的。rapidio精簡了端點(diǎn)定義,可以裝在fpga中,只占芯片面積的一小部分。現(xiàn)今主流的fpga廠商均各自設(shè)計了相應(yīng)的ip核。
在當(dāng)前系統(tǒng)或產(chǎn)品中常用的通信及圖像處理等功能中,往往對數(shù)據(jù)傳輸?shù)难舆t有著極高的要求。rapidio總線雖然通信協(xié)議本身延遲極低,但集成于fpga中后,數(shù)據(jù)從用戶端口輸入到端點(diǎn)輸出需要經(jīng)過srio的ip核的各種處理過程,包括數(shù)據(jù)組包、拆包、分發(fā)、流量控制和錯誤管理等,導(dǎo)致固有延遲上升。
同時,srio協(xié)議規(guī)定每包數(shù)據(jù)最大256字節(jié)。如圖1所示,用戶在發(fā)送數(shù)據(jù)時,通常會在fpga中建立一個串行輸入輸出內(nèi)存(一下簡稱fifo)作為發(fā)送緩存。若要發(fā)送的數(shù)據(jù)量超過256字節(jié)時,就等到fifo中的數(shù)據(jù)達(dá)到256字節(jié)后,再將數(shù)據(jù)輸入ip核的輸入端進(jìn)行發(fā)送操作。若要發(fā)送的數(shù)據(jù)量小于256字節(jié)時,則等一段時間無后續(xù)數(shù)據(jù)進(jìn)入fifo后再輸入ip核的輸入端進(jìn)行發(fā)送操作。以這種方式操作fpga上的srio發(fā)送數(shù)據(jù)會造成數(shù)據(jù)發(fā)送延遲較大,從程序中發(fā)出數(shù)據(jù)到物理層輸出的延遲約為100us,具有如下弊端:
(1)數(shù)據(jù)處理效率低。源端和對端在等待數(shù)據(jù)量足夠或等待數(shù)據(jù)達(dá)到時,會浪費(fèi)fpga或處理器的資源進(jìn)行數(shù)據(jù)量的計算及檢測,降低數(shù)據(jù)處理效率。
(2)導(dǎo)致實(shí)時性高的應(yīng)用無法實(shí)現(xiàn)。某些通信、數(shù)據(jù)處理和圖像處理等功能的實(shí)時性要求較高,若數(shù)據(jù)從發(fā)送到接收延時過高,可能會導(dǎo)致這些功能故障或無法實(shí)現(xiàn)。
技術(shù)實(shí)現(xiàn)要素:
:
本發(fā)明的發(fā)明目的是提供一種基于fpga的高速串行總線數(shù)據(jù)發(fā)送方法,當(dāng)采用該方法進(jìn)行fpga上的srio數(shù)據(jù)發(fā)送時,延時較低,數(shù)據(jù)處理效率較高。
本發(fā)明的發(fā)明目的通過以下技術(shù)方案實(shí)現(xiàn):
一種基于fpga的高速串行總線數(shù)據(jù)發(fā)送方法,包含用戶數(shù)據(jù)處理步驟,所述用戶數(shù)據(jù)處理步驟包含以下步驟:
步驟1.1、從fpga的fifo中提取數(shù)據(jù)包包頭,通過數(shù)據(jù)包包頭判斷待發(fā)送數(shù)據(jù)是否大于256字節(jié),若大于256字節(jié)執(zhí)行步驟1.2,若小于256字節(jié)執(zhí)行步驟1.3;
步驟1.2、將fifo中前256字節(jié)的數(shù)據(jù)發(fā)送給srio的ip核并清空該256字節(jié)的數(shù)據(jù),再判斷fifo中的剩余數(shù)據(jù)是否大于256字節(jié),若大于256字節(jié)則重復(fù)執(zhí)行步驟1.2,直至剩余數(shù)據(jù)小于256字節(jié),執(zhí)行步驟1.3;
步驟1.3、將fifo中的數(shù)據(jù)發(fā)送給srio的ip核。
依據(jù)上述特征,還包含用戶輸入發(fā)送數(shù)據(jù)步驟,所述用戶輸入發(fā)送數(shù)據(jù)步驟包含以下步驟:
步驟2.1、判斷fpga上的fifo是否有數(shù)據(jù);
步驟2.2、若有數(shù)據(jù)則等待至fifo中的數(shù)據(jù)發(fā)送完畢;若無數(shù)據(jù)則將待發(fā)送的數(shù)據(jù)組成數(shù)據(jù)包,并寫入fifo中,其中,所述數(shù)據(jù)包包含數(shù)據(jù)包包頭,所述數(shù)據(jù)包包頭中包含數(shù)據(jù)包長度。
附圖說明:
圖1是傳統(tǒng)使用srio的ip核發(fā)送數(shù)據(jù)流程。
圖2是實(shí)施例中所述的數(shù)據(jù)包包頭的結(jié)構(gòu)圖。
圖3是程序總體框圖。
圖4是實(shí)施例中基于fpga的高速串行總線數(shù)據(jù)發(fā)送方法的流程圖。
圖5是實(shí)施例中所使用的實(shí)驗(yàn)系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施方式:
下面結(jié)合實(shí)施例和附圖對本發(fā)明作進(jìn)一步的詳細(xì)說明。
圖5為本實(shí)施例所使用的一個實(shí)驗(yàn)系統(tǒng)的組成框圖。整個實(shí)驗(yàn)系統(tǒng)主要包括兩塊分別有一片xc5vfx70t的fpga和光模塊的fpga開發(fā)板以及收發(fā)共兩根光纖線。用兩根光纖線將兩塊板的光模塊的收發(fā)端口分別互連,每個fpga中都加載xilinx的srio的ip核及發(fā)送數(shù)據(jù)程序。用其中一塊開發(fā)板上的fpga向另一塊開發(fā)板上的fpga發(fā)送數(shù)據(jù),可通過xilinx的chipscope軟件來監(jiān)控fpga的所有端口來測量延時。
圖3為數(shù)據(jù)發(fā)送方法的整體框圖,其中fifo作為發(fā)送數(shù)據(jù)的緩存,用于暫存要發(fā)送的用戶數(shù)據(jù),其大小可根據(jù)所選用fpga的內(nèi)存大小進(jìn)行衡量,注意每次要發(fā)送的數(shù)據(jù)大小不可大于該fifo的容量,否則數(shù)據(jù)會丟失。同時因?yàn)榻osrip的ip核的數(shù)據(jù)每包不能大于256字節(jié),而用戶要發(fā)送的數(shù)據(jù)可能大于256字節(jié),所以需要數(shù)據(jù)控制模塊負(fù)責(zé)解析數(shù)據(jù)包包頭,提取數(shù)據(jù)包包頭中的目標(biāo)地址配置給srio的ip核,根據(jù)包頭中標(biāo)明的該包數(shù)據(jù)的數(shù)據(jù)量來對數(shù)據(jù)進(jìn)行分包工作。數(shù)據(jù)包包頭結(jié)構(gòu)如圖2所示,64位數(shù)據(jù)中0~15位表明發(fā)送數(shù)據(jù)目標(biāo)節(jié)點(diǎn)的地址,16~31位表明要發(fā)送數(shù)據(jù)的長度,剩下32~63位可以放置數(shù)據(jù)。如圖4所示,數(shù)據(jù)發(fā)送的具體實(shí)現(xiàn)步驟如下:
第一步,srio初始化及鏈路建立。
1)fpga上電后判斷port_initialized信號是否拉高,拉高表明端口初始化完成;
2)判斷l(xiāng)ink_initialized信號是否拉高,拉高表明鏈路初始化完成。
第二步,用戶輸入發(fā)送數(shù)據(jù):
1)判斷fifo的empty引腳是否拉高,拉高表示fifo為空,可以寫入數(shù)據(jù);拉低則表示fifo中有數(shù)據(jù),繼續(xù)等待;
2)拉高fifo的寫使能引腳,將待發(fā)送的數(shù)據(jù)組成數(shù)據(jù)包寫入fifo,數(shù)據(jù)寫入完畢后,拉低fifo的寫使能引腳。
第三步,處理用戶數(shù)據(jù)
1)取出fifo內(nèi)的第一個數(shù)據(jù)即包頭,通過數(shù)據(jù)包包頭判斷待發(fā)送數(shù)據(jù)是否大于256字節(jié),若大于256字節(jié)執(zhí)行4),若小于256字節(jié)執(zhí)行5);
2)將fifo中前256字節(jié)的數(shù)據(jù)發(fā)送給srio的ip核并清空該256字節(jié)的數(shù)據(jù),再判斷fifo中的剩余數(shù)據(jù)是否大于256字節(jié),若大于256字節(jié)則重復(fù)執(zhí)行步驟4,直至剩余數(shù)據(jù)小于256字節(jié),執(zhí)行5);
3)將fifo中的數(shù)據(jù)發(fā)送給srio的ip核,fifo的empty引腳此時會拉高。
第四步,檢驗(yàn)
通過chipscope軟件來判斷數(shù)據(jù)從寫入fifo到srio端口發(fā)出間的時間延遲約為3.5us。
以上所述,僅為本發(fā)明的一個具體實(shí)例,所涉及到芯片不僅局限于這1款,任何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)。