Fpga內(nèi)以太網(wǎng)數(shù)據(jù)幀的緩存與轉(zhuǎn)發(fā)的方法及裝置制造方法
【專利摘要】本發(fā)明公開了一種FPGA內(nèi)以太網(wǎng)數(shù)據(jù)幀的緩存與轉(zhuǎn)發(fā)的方法及裝置,該方法是按最小以太網(wǎng)數(shù)據(jù)幀包長,將數(shù)據(jù)幀緩存存儲單元等深度劃分成若干小顆粒數(shù)據(jù)幀存儲單元;將以太網(wǎng)數(shù)據(jù)幀按起始小顆粒數(shù)據(jù)幀存儲單元RAM(n)的0x0地址存儲其標(biāo)識符、0x1和0x2地址存儲其末字節(jié)所在小顆粒數(shù)據(jù)幀存儲單元RAM(n+m)的序號和地址以及0x3地址開始依次存儲數(shù)據(jù)幀凈負(fù)荷字節(jié)的格式寫入數(shù)據(jù)幀緩存存儲單元;從當(dāng)前起始小顆粒數(shù)據(jù)幀存儲單元RAM(n)的0x3地址開始依次讀取已緩存數(shù)據(jù)幀凈負(fù)荷字節(jié),直至小顆粒數(shù)據(jù)幀存儲單元RAM(n+m)內(nèi)末字節(jié)地址,并將序號n+m加1,讀取下一個數(shù)據(jù)幀。本發(fā)明實現(xiàn)了以太網(wǎng)數(shù)據(jù)幀的緩存與轉(zhuǎn)發(fā),提高了FPGA內(nèi)RAM的利用率,保證了緩存與轉(zhuǎn)發(fā)時整個結(jié)構(gòu)的穩(wěn)定性。
【專利說明】FPGA內(nèi)以太網(wǎng)數(shù)據(jù)幀的緩存與轉(zhuǎn)發(fā)的方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及以太網(wǎng)數(shù)據(jù)幀的緩存與轉(zhuǎn)發(fā),具體涉及FPGA內(nèi)以太網(wǎng)數(shù)據(jù)幀的緩存與轉(zhuǎn)發(fā)的方法及裝置。
【背景技術(shù)】
[0002]以太網(wǎng)數(shù)據(jù)幀的緩存與轉(zhuǎn)發(fā)是現(xiàn)場可編程門陣列(FPGA)與專用通信芯片之間重要的交互數(shù)據(jù)方式。根據(jù)802.3協(xié)議的規(guī)定,標(biāo)準(zhǔn)的以太網(wǎng)數(shù)據(jù)幀包含:7字節(jié)的前導(dǎo)碼、I字節(jié)的幀起始符以及60-1514字節(jié)的凈負(fù)荷數(shù)據(jù)(包含源地址、目的地址以及長度和類型)和4字節(jié)的幀校驗序列。
[0003]在FPGA與專用通信芯片之間交互數(shù)據(jù)時,F(xiàn)PGA會緩存并轉(zhuǎn)發(fā)接收到的以太網(wǎng)數(shù)據(jù)幀,根據(jù)不同的考慮角度,在FPGA內(nèi)有多種方法實現(xiàn)以太網(wǎng)數(shù)據(jù)幀的緩存與轉(zhuǎn)發(fā),目前比較典型的方法有鏈表存儲方法和連續(xù)存儲方法。
[0004]鏈表存儲方法適用于定包長數(shù)據(jù)幀的存儲與轉(zhuǎn)發(fā),這種存儲方法結(jié)構(gòu)包含:
[0005]隊列存儲RAM,主要是存儲每幀數(shù)據(jù)幀的指針,該指針指向一塊連續(xù)的數(shù)據(jù)存儲RAM的地址;
[0006]多塊數(shù)據(jù)存儲RAM,主要是存儲數(shù)據(jù)幀的凈負(fù)荷字節(jié),它按照最大數(shù)據(jù)幀包長將FPGA內(nèi)數(shù)據(jù)存儲RAM等深度的劃分成多塊連續(xù)的數(shù)據(jù)存儲RAM,每幀數(shù)據(jù)幀的存儲都將占用一塊RAM。
[0007]鏈表存儲方法的缺點是RAM的利用率過低,當(dāng)數(shù)據(jù)包中大量存在最小包長的數(shù)據(jù)幀時,該缺點將會非常明顯。
[0008]連續(xù)存儲方法結(jié)構(gòu)主要包括使用來緩存接收到的數(shù)據(jù)幀的FIFO和存儲該數(shù)據(jù)幀相關(guān)標(biāo)識符的一個伴隨FIFO。
[0009]相對鏈表存儲方法而言,連續(xù)存儲方法很好地提高了 RAM的利用率,但是,當(dāng)某一時刻的讀/寫指針出錯(即伴隨FIFO出錯),則不可避免的會影響到后續(xù)的數(shù)據(jù)幀的讀/寫操作,甚至于會使整個緩存與轉(zhuǎn)發(fā)機制崩潰,對于要求穩(wěn)定的系統(tǒng)來說,這種錯誤是不可接受的。
【發(fā)明內(nèi)容】
[0010]本發(fā)明所要解決的技術(shù)問題是以太網(wǎng)數(shù)據(jù)幀的緩存與轉(zhuǎn)發(fā)時FPGA內(nèi)RAM利用率低、穩(wěn)定性差的問題。
[0011]為了解決上述技術(shù)問題,本發(fā)明所采用的技術(shù)方案是提供一種FPGA內(nèi)以太網(wǎng)數(shù)據(jù)幀的緩存與轉(zhuǎn)發(fā)的方法,包括以下步驟:
[0012]步驟A10、按照最小以太網(wǎng)數(shù)據(jù)幀包長,將FPGA內(nèi)的整個數(shù)據(jù)幀緩存存儲單元等深度地劃分成若干小顆粒數(shù)據(jù)巾貞存儲單元RAM (η);
[0013]步驟Α20、將輸入的以太網(wǎng)數(shù)據(jù)幀按照一定存儲格式寫入FPGA內(nèi)的整個數(shù)據(jù)幀緩存存儲單元內(nèi);
[0014]所述一定存儲格式為:
[0015]起始小顆粒數(shù)據(jù)巾貞存儲單元RAM (η)的0x0地址內(nèi)存儲接收的數(shù)據(jù)巾貞的標(biāo)識符;
[0016]起始小顆粒數(shù)據(jù)幀存儲單元RAM (η)的Oxl地址內(nèi)存儲已緩存數(shù)據(jù)幀的末字節(jié)所在小顆粒數(shù)據(jù)巾貞存儲單元RAM (n+m)的序號n+m ;
[0017]起始小顆粒數(shù)據(jù)幀存儲單元RAM (η)的0x2地址內(nèi)存儲已緩存數(shù)據(jù)幀的末字節(jié)所在小顆粒數(shù)據(jù)幀存儲單元RAM (n+m)內(nèi)的地址;
[0018]從起始小顆粒數(shù)據(jù)巾貞存儲單元RAM (η)的0x3地址開始依次存儲數(shù)據(jù)巾貞的凈負(fù)荷字節(jié)直至完畢;
[0019]η為正整數(shù),m為自然數(shù);
[0020]步驟A30、讀取當(dāng)前起始小顆粒數(shù)據(jù)巾貞存儲單元RAM (η)的Oxl和0x2地址內(nèi)末字節(jié)所在小顆粒數(shù)據(jù)巾貞存儲單元RAM (n+m)的序號以及其在小顆粒數(shù)據(jù)巾貞存儲單元RAM (n+m)內(nèi)地址,從當(dāng)前起始小顆粒數(shù)據(jù)幀存儲單元RAM (η)的0x3開始依次讀取緩存在數(shù)據(jù)幀緩存存儲單元的數(shù)據(jù)幀凈負(fù)荷字節(jié),直至小顆粒數(shù)據(jù)幀存儲單元RAM (n+m)內(nèi)緩存末字節(jié)的地址,然后將小顆粒數(shù)據(jù)幀存儲RAM (n+m)的序號加I,讀取下一個以太網(wǎng)數(shù)據(jù)幀。
[0021]在上述方法中,所述數(shù)據(jù)幀緩存存儲單元設(shè)置在FPGA內(nèi)部雙口隨機存取存儲器上,數(shù)據(jù)寬度與數(shù)據(jù)幀寬度一致,地址深度與最大以太網(wǎng)數(shù)據(jù)幀包長相對應(yīng)。
[0022]在上述方法中,所述標(biāo)識符包含緩存完畢標(biāo)識符和校驗結(jié)果標(biāo)識符。
[0023]在上述方法中,從小顆粒數(shù)據(jù)幀存儲單元RAM (η)的0x3地址開始依次存儲數(shù)據(jù)幀的凈負(fù)荷字節(jié),當(dāng)接收到的以太網(wǎng)數(shù)據(jù)幀僅靠小顆粒數(shù)據(jù)幀存儲單元RAM (η)無法存儲完畢時,順序由相鄰的小顆粒數(shù)據(jù)幀存儲單元存儲剩余所述凈負(fù)荷字節(jié),且存儲剩余凈負(fù)荷字節(jié)的每個所述小顆粒數(shù)據(jù)幀存儲單元將會從0x0地址開始存儲凈負(fù)荷字節(jié),直至所述數(shù)據(jù)幀的凈負(fù)荷字節(jié)存儲完畢。
[0024]在上述方法中,步驟Α20包括以下步驟:
[0025]步驟Α21、通過數(shù)據(jù)寫入口接收以太網(wǎng)數(shù)據(jù)幀,并對所述以太網(wǎng)數(shù)據(jù)幀進行校驗;
[0026]步驟Α22、以數(shù)據(jù)幀緩存存儲單元的當(dāng)前小顆粒數(shù)據(jù)幀存儲單元RAM (η)為起始小顆粒數(shù)據(jù)幀存儲單元,該小顆粒的0x3地址為起始地址,將所述以太網(wǎng)數(shù)據(jù)幀的凈負(fù)荷字節(jié)依次寫入當(dāng)前小顆粒數(shù)據(jù)巾貞存儲單元RAM (η);
[0027]步驟Α23、判斷當(dāng)前小顆粒數(shù)據(jù)幀存儲單元是否將該數(shù)據(jù)幀的凈負(fù)荷字節(jié)存儲完畢,如果存儲完畢,則執(zhí)行步驟Α25 ;否則執(zhí)行步驟Α24 ;
[0028]步驟Α24、以當(dāng)前小顆粒數(shù)據(jù)幀存儲單元相鄰的下一個小顆粒數(shù)據(jù)幀存儲單元作為新的當(dāng)前小顆粒數(shù)據(jù)幀存儲單元,從新的當(dāng)前小顆粒數(shù)據(jù)幀存儲單元的0x0地址為起始地址,將凈負(fù)荷字節(jié)剩余字節(jié)依次寫入其中,然后執(zhí)行步驟Α23 ;
[0029]步驟Α25、將緩存凈負(fù)荷字節(jié)末字節(jié)的小顆粒數(shù)據(jù)幀存儲單元RAM (n+m)的序號以及其在該小顆粒數(shù)據(jù)幀存儲單元RAM (n+m)內(nèi)的地址分別寫入起始小顆粒數(shù)據(jù)幀存儲單元RAM (η)的Oxl以及0x2地址;
[0030]步驟Α26、提取所述以太網(wǎng)數(shù)據(jù)幀中的校驗字節(jié)與步驟Α21中得到的校驗值對比,得到校驗結(jié)果標(biāo)識符;
[0031]步驟Α27、將緩存完畢標(biāo)識符以及校驗結(jié)果標(biāo)識符寫入起始小顆粒數(shù)據(jù)幀存儲單元RAM (η)的0x0地址內(nèi)。
[0032]在上述方法中,步驟A30包括以下步驟:
[0033]步驟A31、讀取當(dāng)前小顆粒數(shù)據(jù)幀存儲單元首地址內(nèi)的緩存完畢標(biāo)識符以及校驗結(jié)果標(biāo)識符;
[0034]步驟A32、判斷緩存完畢標(biāo)識符以及校驗結(jié)果標(biāo)識符是否有效,如果都有效,則執(zhí)行步驟A34 ;否則執(zhí)行步驟A33 ;
[0035]步驟A33、只讀取當(dāng)前小顆粒數(shù)據(jù)幀存儲單元的Oxl地址內(nèi)的以太網(wǎng)數(shù)據(jù)幀末字節(jié)所在小顆粒數(shù)據(jù)幀存儲單元的序號,然后執(zhí)行步驟A36 ;
[0036]步驟A34、讀取當(dāng)前小顆粒數(shù)據(jù)幀存儲單元的Oxl以及0x2地址緩存的以太網(wǎng)數(shù)據(jù)幀的末字節(jié)所在小顆粒數(shù)據(jù)幀存儲單元的序號以及地址;
[0037]步驟A35、從當(dāng)前小顆粒數(shù)據(jù)幀存儲單元的0x3地址開始依次讀取已緩存以太網(wǎng)數(shù)據(jù)幀的凈負(fù)荷字節(jié),直至緩存該以太網(wǎng)數(shù)據(jù)幀末字節(jié)的小顆粒數(shù)據(jù)幀存儲單元內(nèi)地址;
[0038]步驟A36、將讀取的緩存該以太網(wǎng)數(shù)據(jù)幀末字節(jié)小顆粒數(shù)據(jù)幀存儲單元的序號加I,然后執(zhí)行步驟A31。
[0039]本發(fā)明還提供一種FPGA內(nèi)以太網(wǎng)數(shù)據(jù)幀的緩存與轉(zhuǎn)發(fā)的裝置,包括數(shù)據(jù)幀校驗裝置、數(shù)據(jù)幀寫控制裝置以及數(shù)據(jù)幀存儲裝置和數(shù)據(jù)幀讀控制裝置;
[0040]所述數(shù)據(jù)幀校驗裝置用于計算從以太網(wǎng)數(shù)據(jù)幀輸入總線接收的數(shù)據(jù)幀的校驗值,并發(fā)送給寫控制裝置;
[0041]所述數(shù)據(jù)幀寫控制裝置用于接收以太網(wǎng)數(shù)據(jù)幀輸入總線上的數(shù)據(jù)幀,提取所述數(shù)據(jù)幀的校驗字節(jié),與數(shù)據(jù)幀校驗裝置計算的校驗值對比得到校驗結(jié)果標(biāo)識符,并將所述校驗結(jié)果標(biāo)識符及所述數(shù)據(jù)幀按一定格式寫入數(shù)據(jù)幀存儲裝置;
[0042]所述數(shù)據(jù)幀存儲裝置用于按照一定格式緩存所述數(shù)據(jù)幀;
[0043]所述數(shù)據(jù)幀讀控制裝置用于依次讀取數(shù)據(jù)幀存儲裝置緩存的數(shù)據(jù)幀,將所述數(shù)據(jù)幀從數(shù)據(jù)幀輸出總線轉(zhuǎn)發(fā)出去。
[0044]本發(fā)明采用將整個數(shù)據(jù)幀緩存存儲單元RAM按照最小以太網(wǎng)數(shù)據(jù)幀包長等深度劃分成若干小顆粒數(shù)據(jù)幀存儲RAM的存儲結(jié)構(gòu),以實現(xiàn)以太網(wǎng)數(shù)據(jù)幀的緩存與轉(zhuǎn)發(fā),另外,校驗結(jié)果標(biāo)識符會確定輸出到數(shù)據(jù)幀輸出總線上的控制信號是否有效,這樣就可以將校驗失敗的數(shù)據(jù)幀過濾掉,克服了現(xiàn)有以太網(wǎng)數(shù)據(jù)幀的存儲方式的缺點,尤其是變包長以太網(wǎng)數(shù)據(jù)幀的存儲,不僅提高了 FPGA內(nèi)RAM的利用率,并且保證了在緩存與轉(zhuǎn)發(fā)的過程中整個結(jié)構(gòu)的穩(wěn)定性以及健壯性。
【專利附圖】
【附圖說明】
[0045]圖1為本發(fā)明提供的FPGA內(nèi)以太網(wǎng)數(shù)據(jù)幀的緩存與轉(zhuǎn)發(fā)的裝置結(jié)構(gòu)示意圖;
[0046]圖2為本發(fā)明提供的FPGA內(nèi)以太網(wǎng)數(shù)據(jù)幀的緩存與轉(zhuǎn)發(fā)的方法流程圖;
[0047]圖3為本發(fā)明中數(shù)據(jù)幀緩存存儲單元內(nèi)部劃分結(jié)構(gòu)示意圖;
[0048]圖4為本發(fā)明中當(dāng)以太網(wǎng)數(shù)據(jù)幀包長小于小顆粒數(shù)據(jù)幀存儲單元深度時的存儲格式;
[0049]圖5為本發(fā)明中當(dāng)以太網(wǎng)數(shù)據(jù)幀包長大于小顆粒數(shù)據(jù)幀存儲單元深度時的存儲格式;
[0050]圖6為本發(fā)明中緩存以太網(wǎng)數(shù)據(jù)幀的流程圖;
[0051]圖7為本發(fā)明中轉(zhuǎn)發(fā)以太網(wǎng)數(shù)據(jù)幀的流程圖。
【具體實施方式】
[0052]下面結(jié)合說明書附圖和具體實施例對本發(fā)明做出詳細的說明。
[0053]如圖1所示,本發(fā)明提供的一種FPGA內(nèi)以太網(wǎng)數(shù)據(jù)幀的緩存與轉(zhuǎn)發(fā)的裝置包括數(shù)據(jù)幀校驗裝置10、數(shù)據(jù)幀寫控制裝置20以及數(shù)據(jù)幀存儲裝置30和數(shù)據(jù)幀讀控制裝置40。
[0054]所述數(shù)據(jù)幀校驗裝置10用于計算從以太網(wǎng)數(shù)據(jù)幀輸入總線接收的數(shù)據(jù)幀的校驗值,并發(fā)送給寫控制裝置20。
[0055]所述數(shù)據(jù)幀寫控制裝置20用于接收以太網(wǎng)數(shù)據(jù)幀輸入總線上的數(shù)據(jù)幀,提取所述數(shù)據(jù)幀的校驗字節(jié),與數(shù)據(jù)幀校驗裝置10計算的校驗值對比得到校驗結(jié)果標(biāo)識符,并將所述校驗結(jié)果標(biāo)識符及所述數(shù)據(jù)幀按一定格式寫入數(shù)據(jù)幀存儲裝置30。
[0056]所述數(shù)據(jù)幀存儲裝置30用于按照一定格式緩存所述數(shù)據(jù)幀。
[0057]所述數(shù)據(jù)幀讀控制裝置40用于依次讀取數(shù)據(jù)幀存儲裝置30緩存的數(shù)據(jù)幀,將所述數(shù)據(jù)幀從數(shù)據(jù)幀輸出總線轉(zhuǎn)發(fā)出去。
[0058]如圖2所示,本發(fā)明提供的一種FPGA內(nèi)以太網(wǎng)數(shù)據(jù)幀的緩存與轉(zhuǎn)發(fā)的方法包括以下步驟:
[0059]步驟A10、按照最小以太網(wǎng)數(shù)據(jù)幀包長(由于RAM的地址控制都是以2的冪次為劃分的,所以最小以太網(wǎng)數(shù)據(jù)幀包長取2的冪次),將FPGA內(nèi)的整個數(shù)據(jù)幀緩存存儲單元等深度地劃分成若干小顆粒數(shù)據(jù)幀存儲單元RAM (η)(如圖3所示)。
[0060]數(shù)據(jù)幀緩存存儲單元設(shè)置在FPGA內(nèi)部的雙口(兩個接口可以分別訪問RAM)隨機存取存儲器(RAM)上,數(shù)據(jù)寬度與數(shù)據(jù)幀寬度一致,數(shù)據(jù)幀緩存存儲單元地址深度與最大以太網(wǎng)數(shù)據(jù)幀包長相對應(yīng),即整個數(shù)據(jù)幀緩存存儲單元的大小取決于輸入總線上可能送入的最大包長以太網(wǎng)數(shù)據(jù)幀的長度。
[0061]步驟A20、將從數(shù)據(jù)幀輸入總線上輸入的以太網(wǎng)數(shù)據(jù)幀按照一定存儲格式寫入FPGA內(nèi)的整個數(shù)據(jù)幀緩存存儲單元。
[0062]所述一定存儲格式分為兩情況:
[0063](I)接收的以太網(wǎng)數(shù)據(jù)幀包長小于小顆粒數(shù)據(jù)幀存儲單元RAM(n) (η為正整數(shù))深度時,如圖4所示,具體存儲格式為:
[0064]小顆粒數(shù)據(jù)幀存儲單元RAM (η)的0x0地址內(nèi)存儲接收的以太網(wǎng)數(shù)據(jù)幀的標(biāo)識符,包含緩存完畢標(biāo)識符和校驗結(jié)果標(biāo)識符;
[0065]小顆粒數(shù)據(jù)幀存儲單元RAM (η)的Oxl地址內(nèi)存儲小顆粒數(shù)據(jù)幀存儲單元RAM (η)的序號η ;
[0066]小顆粒數(shù)據(jù)幀存儲單元RAM (η)的0x2地址內(nèi)存儲已緩存數(shù)據(jù)幀的末字節(jié)在小顆粒數(shù)據(jù)幀存儲單元RAM (η)內(nèi)的地址;
[0067]從小顆粒數(shù)據(jù)幀存儲單元RAM (η)的0x3地址開始依次存儲數(shù)據(jù)幀的凈負(fù)荷字節(jié)直至完畢。
[0068](2)接收的以太網(wǎng)數(shù)據(jù)幀包長大于小顆粒數(shù)據(jù)幀存儲單元RAM(n)深度時,緩存該以太網(wǎng)數(shù)據(jù)幀需要兩塊以上的小顆粒數(shù)據(jù)幀存儲單元,如圖5所示,具體存儲格式為:
[0069]起始小顆粒數(shù)據(jù)幀存儲單元RAM (η)的0x0地址存儲接收的以太網(wǎng)數(shù)據(jù)幀的標(biāo)識符,包含緩存完畢標(biāo)識符和校驗結(jié)果標(biāo)識符;
[0070]起始小顆粒數(shù)據(jù)幀存儲單元RAM (η)的Oxl地址內(nèi)存儲所述以太網(wǎng)數(shù)據(jù)幀的末字節(jié)所在小顆粒數(shù)據(jù)巾貞存儲單元RAM (η+ζ) (ζ為正整數(shù))的序號η+ζ ;
[0071]起始小顆粒數(shù)據(jù)幀存儲單元RAM (η)的0x2地址內(nèi)存儲所述以太網(wǎng)數(shù)據(jù)幀的末字節(jié)在小顆粒數(shù)據(jù)巾貞存儲單元RAM (η+ζ)內(nèi)的地址;
[0072]從起始小顆粒數(shù)據(jù)巾貞存儲單元RAM (η)的0x3地址開始依次存儲數(shù)據(jù)巾貞的凈負(fù)荷字節(jié),由于接收到的以太網(wǎng)數(shù)據(jù)幀僅靠一塊小顆粒數(shù)據(jù)幀存儲單元RAM (η)無法存儲完畢,順序由相鄰的ζ塊小顆粒數(shù)據(jù)幀存儲單元存儲剩余的所述數(shù)據(jù)幀凈負(fù)荷字節(jié),且ζ塊小顆粒數(shù)據(jù)幀存儲單元RAM的0χ0、0χ1及0x2地址將會被當(dāng)做凈負(fù)荷存儲單元來存儲凈負(fù)荷字節(jié),直至該數(shù)據(jù)幀的凈負(fù)荷字節(jié)存儲完畢。
[0073]如圖6所示,步驟Α20的具體步驟如下:
[0074]步驟Α21、數(shù)據(jù)幀寫控制裝置通過數(shù)據(jù)寫入口接收從數(shù)據(jù)幀輸入總線送入的以太網(wǎng)數(shù)據(jù)幀,并對接收到的以太網(wǎng)數(shù)據(jù)幀進行校驗;
[0075]步驟Α22、以數(shù)據(jù)幀緩存存儲單元RAM的當(dāng)前小顆粒數(shù)據(jù)幀存儲單元RAM (η)為起始小顆粒數(shù)據(jù)幀存儲單元,小顆粒數(shù)據(jù)幀存儲單元RAM (η)的0x3地址為起始地址,將所述以太網(wǎng)數(shù)據(jù)幀的凈負(fù)荷字節(jié)依次寫入當(dāng)前小顆粒數(shù)據(jù)幀存儲單元RAM (η);
[0076]當(dāng)前小顆粒數(shù)據(jù)幀存儲單元RAM (η)是存儲上次讀取完一幀數(shù)據(jù)幀的小顆粒數(shù)據(jù)幀存儲單元RAM (η-1)的下一個小顆粒數(shù)據(jù)幀存儲單元。
[0077]步驟Α23、判斷當(dāng)前小顆粒數(shù)據(jù)幀存儲單元是否將該數(shù)據(jù)幀的凈負(fù)荷字節(jié)存儲完畢,如果存儲完畢,則執(zhí)行步驟Α25 ;否則執(zhí)行步驟Α24 ;
[0078]步驟Α24、以當(dāng)前小顆粒數(shù)據(jù)幀存儲單元相鄰的下一個小顆粒數(shù)據(jù)幀存儲單元作為新的當(dāng)前小顆粒數(shù)據(jù)幀存儲單元,從新的當(dāng)前小顆粒數(shù)據(jù)幀存儲單元的0x0地址為起始地址,將凈負(fù)荷字節(jié)剩余字節(jié)依次寫入其中,然后執(zhí)行步驟Α23 ;
[0079]步驟Α25、數(shù)據(jù)幀的凈負(fù)荷字節(jié)寫入完畢后,將緩存凈負(fù)荷字節(jié)末字節(jié)的小顆粒數(shù)據(jù)中貞存儲單元RAM (n+m)的序號n+m以及其在該小顆粒數(shù)據(jù)巾貞存儲單元RAM (n+m)內(nèi)的地址分別寫入起始小顆粒數(shù)據(jù)幀存儲單元RAM (η)的Oxl以及0x2地址,其中m為自然數(shù);
[0080]步驟A26、提取所述以太網(wǎng)數(shù)據(jù)幀中的校驗字節(jié)與步驟A21中得到的校驗值對比,得到校驗結(jié)果標(biāo)識符;
[0081]步驟A27、將緩存完畢標(biāo)識符以及校驗結(jié)果標(biāo)識符寫入起始小顆粒數(shù)據(jù)幀存儲單元RAM (η)的首地址0x0內(nèi)。
[0082]步驟Α30、讀取當(dāng)前起始小顆粒數(shù)據(jù)巾貞存儲單元RAM (η)的Oxl和0x2地址內(nèi)末字節(jié)所在小顆粒數(shù)據(jù)巾貞存儲單元RAM (n+m)的序號n+m以及其在小顆粒數(shù)據(jù)巾貞存儲單元RAM (n+m)內(nèi)地址,從當(dāng)前起始小顆粒數(shù)據(jù)巾貞存儲單元RAM (η)的0x3開始依次讀取緩存在數(shù)據(jù)幀緩存存儲單元RAM的數(shù)據(jù)幀的凈負(fù)荷字節(jié),直至小顆粒數(shù)據(jù)幀存儲單元RAM (n+m)內(nèi)緩存末字節(jié)的地址,然后將小顆粒數(shù)據(jù)幀存儲單元RAM (n+m)的序號加1,讀取下一個以太網(wǎng)數(shù)據(jù)幀。
[0083]如圖7所示,具體包括以下步驟:
[0084]步驟A31、讀取當(dāng)前小顆粒數(shù)據(jù)幀存儲單元首地址內(nèi)的緩存完畢標(biāo)識符以及校驗結(jié)果標(biāo)識符;
[0085]步驟A32、判斷緩存完畢標(biāo)識符以及校驗結(jié)果標(biāo)識符是否有效,如果都有效,則執(zhí)行步驟A34 ;否則執(zhí)行步驟A33 ;
[0086]步驟A33、只讀取當(dāng)前小顆粒數(shù)據(jù)幀存儲單元的Oxl地址內(nèi)的以太網(wǎng)數(shù)據(jù)幀末字節(jié)所在小顆粒數(shù)據(jù)幀存儲單元的序號,然后執(zhí)行步驟A36 ;
[0087]步驟A34、讀取當(dāng)前小顆粒數(shù)據(jù)幀存儲單元的Oxl以及0x2地址緩存的以太網(wǎng)數(shù)據(jù)幀的末字節(jié)所在小顆粒數(shù)據(jù)幀存儲單元的序號以及末字節(jié)在其中的地址;
[0088]當(dāng)前小顆粒數(shù)據(jù)幀存儲單元的Oxl和0x2地址緩存的以太網(wǎng)數(shù)據(jù)幀的末字節(jié)所在小顆粒數(shù)據(jù)幀存儲單元的序號以及地址決定了讀取數(shù)據(jù)包的長度,即讀取結(jié)束的小顆粒數(shù)據(jù)幀存儲單元的序號以及其中最后進行緩存字節(jié)的地址。
[0089]步驟A35、從當(dāng)前小顆粒數(shù)據(jù)幀存儲單元的0x3地址開始依次讀取已緩存以太網(wǎng)數(shù)據(jù)幀的凈負(fù)荷字節(jié),直至緩存該以太網(wǎng)數(shù)據(jù)幀末字節(jié)所在小顆粒數(shù)據(jù)幀存儲單元內(nèi)的末字節(jié)地址;
[0090]步驟A36、將讀取的緩存該太網(wǎng)數(shù)據(jù)幀末字節(jié)小顆粒數(shù)據(jù)幀存儲單元的序號加1,然后執(zhí)行步驟步驟A31。
[0091]以上所述實施方式僅為本發(fā)明的一種實例,并不用于限制本發(fā)明,凡在本發(fā)明精神和原則之內(nèi)所做的任何修改、等同替換和改進等,均含于本發(fā)明的保護范圍之內(nèi)。
【權(quán)利要求】
1.FPGA內(nèi)以太網(wǎng)數(shù)據(jù)幀的緩存與轉(zhuǎn)發(fā)的方法,其特征在于,包括以下步驟: 步驟A10、按照最小以太網(wǎng)數(shù)據(jù)幀包長,將FPGA內(nèi)的整個數(shù)據(jù)幀緩存存儲單元等深度地劃分成若干小顆粒數(shù)據(jù)幀存儲單元RAM (η); 步驟Α20、將輸入的以太網(wǎng)數(shù)據(jù)幀按照一定存儲格式寫入FPGA內(nèi)的整個數(shù)據(jù)幀緩存存儲單元內(nèi); 所述一定存儲格式為: 起始小顆粒數(shù)據(jù)巾貞存儲單元RAM (η)的OxO地址內(nèi)存儲接收的數(shù)據(jù)巾貞的標(biāo)識符;起始小顆粒數(shù)據(jù)幀存儲單元RAM (η)的Oxl地址內(nèi)存儲已緩存數(shù)據(jù)幀的末字節(jié)所在小顆粒數(shù)據(jù)巾貞存儲單元RAM (n+m)的序號n+m ; 起始小顆粒數(shù)據(jù)幀存儲單元RAM (η)的0x2地址內(nèi)存儲已緩存數(shù)據(jù)幀的末字節(jié)所在小顆粒數(shù)據(jù)巾貞存儲單元RAM (n+m)內(nèi)的地址; 從起始小顆粒數(shù)據(jù)幀存儲單元RAM (η)的0x3地址開始依次存儲數(shù)據(jù)幀的凈負(fù)荷字節(jié)直至完畢; η為正整數(shù),m為自然數(shù); 步驟A30、讀取當(dāng)前起始小顆粒數(shù)據(jù)巾貞存儲單元RAM (η)的Oxl和0x2地址內(nèi)末字節(jié)所在小顆粒數(shù)據(jù)巾貞存儲單元RAM (n+m)的序號以及其在小顆粒數(shù)據(jù)巾貞存儲單元RAM (n+m)內(nèi)地址,從當(dāng)前起始小顆粒數(shù)據(jù)幀存儲單元RAM (η)的0x3開始依次讀取緩存在數(shù)據(jù)幀緩存存儲單元的數(shù)據(jù)幀凈負(fù)荷字節(jié),直至小顆粒數(shù)據(jù)幀存儲單元RAM (n+m)內(nèi)緩存末字節(jié)的地址,然后將小顆粒數(shù)據(jù)幀存儲RAM (n+m)的序號加I,讀取下一個以太網(wǎng)數(shù)據(jù)幀。
2.如權(quán)利要求1所述的方法,其特征在于,所述數(shù)據(jù)幀緩存存儲單元設(shè)置在FPGA內(nèi)部雙口隨機存取存儲器上,數(shù)據(jù)寬度與數(shù)據(jù)幀寬度一致,地址深度與最大以太網(wǎng)數(shù)據(jù)幀包長相對應(yīng)。
3.如權(quán)利要求1所述的方法,其特征在于,所述標(biāo)識符包含緩存完畢標(biāo)識符和校驗結(jié)果標(biāo)識符。
4.如權(quán)利要求1所述的方法,其特征在于,從小顆粒數(shù)據(jù)幀存儲單元RAM(n)的0x3地址開始依次存儲數(shù)據(jù)幀的凈負(fù)荷字節(jié),當(dāng)接收到的以太網(wǎng)數(shù)據(jù)幀僅靠小顆粒數(shù)據(jù)幀存儲單元RAM (η)無法存儲完畢時,順序由相鄰的小顆粒數(shù)據(jù)幀存儲單元存儲剩余所述凈負(fù)荷字節(jié),且存儲剩余凈負(fù)荷字節(jié)的每個所述小顆粒數(shù)據(jù)幀存儲單元將會從0x0地址開始存儲凈負(fù)荷字節(jié),直至所述數(shù)據(jù)幀的凈負(fù)荷字節(jié)存儲完畢。
5.如權(quán)利要求1所述的方法,其特征在于,步驟Α20包括以下步驟: 步驟Α21、通過數(shù)據(jù)寫入口接收以太網(wǎng)數(shù)據(jù)幀,并對所述以太網(wǎng)數(shù)據(jù)幀進行校驗; 步驟Α22、以數(shù)據(jù)幀緩存存儲單元的當(dāng)前小顆粒數(shù)據(jù)幀存儲單元RAM (η)為起始小顆粒數(shù)據(jù)幀存儲單元,該小顆粒的0x3地址為起始地址,將所述以太網(wǎng)數(shù)據(jù)幀的凈負(fù)荷字節(jié)依次寫入當(dāng)前小顆粒數(shù)據(jù)巾貞存儲單元RAM(n); 步驟A23、判斷當(dāng)前小顆粒數(shù)據(jù)幀存儲單元是否將該數(shù)據(jù)幀的凈負(fù)荷字節(jié)存儲完畢,如果存儲完畢,則執(zhí)行步驟A25 ;否則執(zhí)行步驟A24 ; 步驟A24、以當(dāng)前小顆粒數(shù)據(jù)幀存儲單元相鄰的下一個小顆粒數(shù)據(jù)幀存儲單元作為新的當(dāng)前小顆粒數(shù)據(jù)幀存儲單元,從新的當(dāng)前小顆粒數(shù)據(jù)幀存儲單元的0x0地址為起始地址,將凈負(fù)荷字節(jié)剩余字節(jié)依次寫入其中,然后執(zhí)行步驟A23 ; 步驟A25、將緩存凈負(fù)荷字節(jié)末字節(jié)的小顆粒數(shù)據(jù)幀存儲單元RAM (n+m)的序號以及其在該小顆粒數(shù)據(jù)幀存儲單元RAM (n+m)內(nèi)的地址分別寫入起始小顆粒數(shù)據(jù)幀存儲單元RAM (η)的Oxl以及0x2地址; 步驟Α26、提取所述以太網(wǎng)數(shù)據(jù)幀中的校驗字節(jié)與步驟Α21中得到的校驗值對比,得到校驗結(jié)果標(biāo)識符; 步驟Α27、將緩存完畢標(biāo)識符以及校驗結(jié)果標(biāo)識符寫入起始小顆粒數(shù)據(jù)幀存儲單元RAM (η)的0x0地址內(nèi)。
6.如權(quán)利要求1所述的方法,其特征在于,步驟Α30包括以下步驟: 步驟Α31、讀取當(dāng)前小顆粒數(shù)據(jù)幀存儲單元首地址內(nèi)的緩存完畢標(biāo)識符以及校驗結(jié)果標(biāo)識符; 步驟Α32、判斷緩存完畢標(biāo)識符以及校驗結(jié)果標(biāo)識符是否有效,如果都有效,則執(zhí)行步驟Α34 ;否則執(zhí)行步驟Α33 ; 步驟Α33、只讀取當(dāng)前小顆粒數(shù)據(jù)幀存儲單元的Oxl地址內(nèi)的以太網(wǎng)數(shù)據(jù)幀末字節(jié)所在小顆粒數(shù)據(jù)幀存儲單元的序號,然后執(zhí)行步驟Α36 ; 步驟Α34、讀取當(dāng)前小顆粒數(shù)據(jù)幀存儲單元的Oxl以及0x2地址緩存的以太網(wǎng)數(shù)據(jù)幀的末字節(jié)所在小顆粒數(shù)據(jù)幀存儲單元的序號以及地址; 步驟Α35、從當(dāng)前小顆粒數(shù)據(jù)幀存儲單元的0x3地址開始依次讀取已緩存以太網(wǎng)數(shù)據(jù)幀的凈負(fù)荷字節(jié),直至緩存該以太網(wǎng)數(shù)據(jù)幀末字節(jié)的小顆粒數(shù)據(jù)幀存儲單元內(nèi)地址; 步驟Α36、將讀取的緩存該以太網(wǎng)數(shù)據(jù)幀末字節(jié)小顆粒數(shù)據(jù)幀存儲單元的序號加1,然后執(zhí)行步驟A31。
7.如權(quán)利要求1所述方法的裝置,其特征在于,包括數(shù)據(jù)幀校驗裝置、數(shù)據(jù)幀寫控制裝置以及數(shù)據(jù)幀存儲裝置和數(shù)據(jù)幀讀控制裝置; 所述數(shù)據(jù)幀校驗裝置用于計算從以太網(wǎng)數(shù)據(jù)幀輸入總線接收的數(shù)據(jù)幀的校驗值,并發(fā)送給寫控制裝置; 所述數(shù)據(jù)幀寫控制裝置用于接收以太網(wǎng)數(shù)據(jù)幀輸入總線上的數(shù)據(jù)幀,提取所述數(shù)據(jù)幀的校驗字節(jié),與數(shù)據(jù)幀校驗裝置計算的校驗值對比得到校驗結(jié)果標(biāo)識符,并將所述校驗結(jié)果標(biāo)識符及所述數(shù)據(jù)幀按一定格式寫入數(shù)據(jù)幀存儲裝置; 所述數(shù)據(jù)幀存儲裝置用于按照一定格式緩存所述數(shù)據(jù)幀; 所述數(shù)據(jù)幀讀控制裝置用于依次讀取數(shù)據(jù)幀存儲裝置緩存的數(shù)據(jù)幀,將所述數(shù)據(jù)幀從數(shù)據(jù)幀輸出總線轉(zhuǎn)發(fā)出去。
【文檔編號】H04L12/861GK104199783SQ201410469854
【公開日】2014年12月10日 申請日期:2014年9月15日 優(yōu)先權(quán)日:2014年9月15日
【發(fā)明者】劉福, 劉超 申請人:烽火通信科技股份有限公司