一種基于SOC隔離Memory的10Gbps以太網(wǎng)實(shí)時(shí)數(shù)據(jù)采集方法
【專利摘要】一種基于SOC隔離Memory的10Gbps以太網(wǎng)實(shí)時(shí)數(shù)據(jù)采集方法,所述方法包括步驟:接收來自SFP+的10Gbps以太網(wǎng)報(bào)文數(shù)據(jù),或接收來自PHY的1Gbps以太網(wǎng)報(bào)文,將得到的數(shù)據(jù)傳輸至SOC的PL部分進(jìn)行相關(guān)處理,并于基于Linux操作系統(tǒng)的PS部分進(jìn)行數(shù)據(jù)交互。將得到的以太網(wǎng)報(bào)文存入操作系統(tǒng)memory,最終通過Wireshark等軟件進(jìn)行以太網(wǎng)報(bào)文協(xié)議分析。
【專利說明】
-種基于SOC隔離Memory的10化PS從太網(wǎng)實(shí)時(shí)數(shù)據(jù)采集方法
技術(shù)領(lǐng)域
[0001 ] 本發(fā)明適用于Xilinx巧nq系列S0C,屬于數(shù)據(jù)通信領(lǐng)域,具體設(shè)及10加 psW太網(wǎng) 實(shí)時(shí)數(shù)據(jù)采集方法,W及實(shí)現(xiàn)同樣功能的忍片、肥、儀器等。
【背景技術(shù)】
[0002] 1.巧 nq 系列 SOC
[0003] 巧叫可擴(kuò)展處理平臺(tái)是采用賽靈思新一代FPGA(Artix-7與KINTEX-7FPGA)所采用 的同一 28nm可編程技術(shù)的最新產(chǎn)品系列??删幊踢壿嬁捎捎脩襞渲?,并通過"互連"模塊連 接在一起,運(yùn)樣可W提供用戶自定義的任意邏輯功能,從而擴(kuò)展處理系統(tǒng)的性能及功能。 Zynq嵌入式處理平臺(tái)系列的每款產(chǎn)品均采用帶有NEON及雙精度浮點(diǎn)引擎的雙核ARM Codex-A9MPCore處理系統(tǒng),該系統(tǒng)通過硬連線完成了包括L1,L2緩存、存儲(chǔ)器控制器W及 常用外設(shè)在內(nèi)的全面集成。該處理系統(tǒng)不僅能在開機(jī)時(shí)啟動(dòng)并運(yùn)行各種獨(dú)立于可編程邏輯 的操作系統(tǒng)(OS),而且還可根據(jù)需要配置可編程邏輯。利用運(yùn)種方法,軟件編程模式與全功 能的標(biāo)準(zhǔn)ARM處理SoC毫無二致。
[0004] 應(yīng)用開發(fā)人員利用可編程邏輯強(qiáng)大的并行處理能力,不僅可W解決多種不同信號(hào) 處理應(yīng)用中的大量數(shù)據(jù)處理問題,而且還能通過實(shí)施更多外設(shè)來擴(kuò)展處理系統(tǒng)的特性。系 統(tǒng)和可編程邏輯之間的高帶寬AMBA貨-AXI互聯(lián)能W極低的功耗支持千兆位級(jí)數(shù)據(jù)傳輸, 從而解決了控制、數(shù)據(jù)、I/O和存儲(chǔ)器之間的常見性能瓶頸問題。
[0005] 2. W太網(wǎng)
[0006] W太網(wǎng)是在20世紀(jì)70年代研制開發(fā)的一種基帶局域網(wǎng)技術(shù),使用同軸電纜作為網(wǎng) 絡(luò)媒體,采用載波多路訪問和沖突檢測(cè)(CSMA/CD)機(jī)制。但是如今W太網(wǎng)更多的被用來指各 種采用CSMA/CD技術(shù)的局域網(wǎng)。W太網(wǎng)的帖格式與IP是一致的,特別適合于傳輸IP數(shù)據(jù)。W 太網(wǎng)由于具有簡(jiǎn)單方便、價(jià)格低、速度高等。
[0007] W太網(wǎng)化thernet)是由Xerox公司創(chuàng)建并由Xerox、Intel和DEC公司聯(lián)合開發(fā)的基 帶局域網(wǎng)規(guī)范,是當(dāng)今現(xiàn)有局域網(wǎng)采用的最通用的通信協(xié)議標(biāo)準(zhǔn)。后來它被作為802.3標(biāo)準(zhǔn) 為電氣與電子工程師協(xié)會(huì)(IEffi)所采納。
[000引 W太網(wǎng)W包交換為基礎(chǔ),包長(zhǎng)可定義,其包格式如圖2所示。
[0009] 3.Pcap
[0010] pcap文件是wire shark配置腳本文件。可W用Wire shark軟件打開。Pcap的報(bào)文格 式如圖3所示。其中:
[0011 ] magic為文件識(shí)別頭,pcap固定為:0xAlB2C3D4。(4個(gè)字節(jié))
[001^ major為主版本號(hào)(2個(gè)字節(jié))
[0013] minor為次要版本號(hào)(2個(gè)字節(jié))
[0014] time zone為當(dāng)?shù)氐臉?biāo)準(zhǔn)時(shí)間(4個(gè)字節(jié))
[001引Si奸lags為時(shí)間戳的精度(4個(gè)字節(jié))
[0016] snaplen為最大的存儲(chǔ)長(zhǎng)度(4個(gè)字節(jié))
[0017] Ii址type為鏈路類型(4個(gè)字節(jié))
[0018] 其中packet header又包含
[0019 ] ts為抓包時(shí)間,8字節(jié),4字節(jié)表示秒數(shù),4字節(jié)表示微秒數(shù)。
[0020] caplen為保存下來的包長(zhǎng)度,4字節(jié)。
[0021] Ien為數(shù)據(jù)包的真實(shí)長(zhǎng)度,4字節(jié)。
[0022] 4,現(xiàn)有方案介紹
[0023] 高速W太網(wǎng)實(shí)時(shí)數(shù)據(jù)采集由于有速率的限制,要求最大的帶寬為10加 PS,因此目 前大部分方案為在FPGA下實(shí)現(xiàn)DDR控制,通過FPGA讀、寫DDR。當(dāng)操作系統(tǒng)請(qǐng)求數(shù)據(jù)時(shí),F(xiàn)PGA 讀取DDR數(shù)據(jù),再通過慢速總線轉(zhuǎn)發(fā)至操作系統(tǒng)。運(yùn)一方面原因在于現(xiàn)有系統(tǒng)FPGA與處理器 之間的接口帶寬無法達(dá)到持續(xù)10加 PS帶寬,即使達(dá)到也需要較高成本。另一方面原因在于 處理運(yùn)種高帶寬讀寫通常需要直接對(duì)物理地址操作或者利用CPU DMA技術(shù),Linux操作系統(tǒng) 為虛擬地址存儲(chǔ),因此無法直接通過讀寫物理地址的方式存儲(chǔ),否則會(huì)導(dǎo)致操作系統(tǒng)崩潰, 而通過CPU DMA技術(shù)由于會(huì)頻繁中斷,大大增加系統(tǒng)開銷,運(yùn)也是目前嵌入式處理器甚至PC 機(jī)都無法實(shí)現(xiàn)10化PS數(shù)據(jù)流實(shí)時(shí)采集的原因。
【發(fā)明內(nèi)容】
[0024] 本發(fā)明的目的是低成本解決10加 psW太網(wǎng)實(shí)時(shí)數(shù)據(jù)采集問題,提供一種基于SOC 隔離Memoir的10化PS W太網(wǎng)實(shí)時(shí)數(shù)據(jù)采集方法。
[0025] 本發(fā)明通過幻nq SOC在邏輯側(cè)實(shí)現(xiàn)AXI-Burst總線操作,既能減小CPU的系統(tǒng)開 銷,同時(shí)最大數(shù)據(jù)傳輸帶寬接近10.5化PS,滿足10化psW太網(wǎng)報(bào)文實(shí)時(shí)采集所需的帶寬。與 此同時(shí),由于本發(fā)明實(shí)現(xiàn)與Linux操作系統(tǒng)共享memory,降低了系統(tǒng)成本。兩種方案的對(duì)比 如圖4,圖5所示,其中圖4為現(xiàn)有方案,圖5為本發(fā)明方案。
[0026] 本發(fā)明提供的適用于巧nq系列SOC的基于SOC隔離Memo巧的10化psW太網(wǎng)實(shí)時(shí)數(shù) 據(jù)采集方法,包含W下步驟:
[0027] 第1、經(jīng)過線路側(cè)SFP+或PHY處理后將線路側(cè)的電信號(hào)轉(zhuǎn)換為邏輯側(cè)的并行數(shù)字序 列一一即W太網(wǎng)報(bào)文,并傳輸至SOC的化中(可編程邏輯陣列FPGA),在化中(可編程邏輯陣 列FPGA)將得到的并行數(shù)字序列一一W太網(wǎng)報(bào)文進(jìn)行預(yù)處理。
[0028] 第2,將預(yù)處理后的W太網(wǎng)報(bào)文存入化里的緩沖FIFO中,并依據(jù)FIFO水位啟動(dòng)狀態(tài) 機(jī)向PS側(cè)HP 口發(fā)送AXI-Burst接口形式的數(shù)據(jù)報(bào)文;
[0029] 第3,修改操作系統(tǒng)設(shè)備樹文件,使高位地址空間對(duì)操作系統(tǒng)不可見,但是運(yùn)部分 地址空間在U-boot文件中已定義,操作系統(tǒng)視該地址空間為外設(shè),待數(shù)據(jù)報(bào)文抓取完畢后 操作系統(tǒng)通過mmapO函數(shù)映射該部分地址,從而可W訪問或修改該地址空間數(shù)據(jù);
[0030] 第4,操作系統(tǒng)用戶空間通過程序?qū)?shù)據(jù)寫入根文件系統(tǒng),最終在PC機(jī)或其他嵌入 式設(shè)備通過Wireshark等相關(guān)軟件對(duì)數(shù)據(jù)進(jìn)行協(xié)議分析。
[0031] 第1步中所述的將W太網(wǎng)報(bào)文進(jìn)行預(yù)處理是指進(jìn)行如下處理:
[0032] 第1.1,將W太網(wǎng)報(bào)文加 W太網(wǎng)長(zhǎng)度信息,同時(shí)記錄每個(gè)W太網(wǎng)報(bào)文的到達(dá)時(shí)間, 并將該時(shí)間Wpcap的格式封裝到W太網(wǎng)報(bào)文中,得到pcap報(bào)文。
[0033] 第1.2,將得到的pcap報(bào)文進(jìn)行數(shù)據(jù)流化處理。由于本發(fā)明中AXI-Burst接口位寬 為8字節(jié)(64bits),而W太網(wǎng)數(shù)據(jù)包長(zhǎng)是隨機(jī)的,有可能在最后一個(gè)時(shí)鐘周期不滿足8字節(jié)。 本步驟的操作是如果上一包最后一個(gè)周期不滿足8字節(jié),則保留,待下一包到來時(shí)湊成8字 節(jié)再發(fā)送。示意圖如圖6所示。運(yùn)樣每次數(shù)據(jù)采集操作只有最后一個(gè)周期不是8的整數(shù)倍,中 間的數(shù)據(jù)是連續(xù)的。降低了后端AXI-Burst總線的實(shí)現(xiàn)難度。
[0034] 第2步所述的將W太網(wǎng)報(bào)文存入緩沖FIFO中的具體操作是,當(dāng)FIFO水位達(dá)到128字 節(jié),即滿足一次burst操作所需要的深度后,化啟動(dòng)數(shù)據(jù)發(fā)送狀態(tài)機(jī),通過AXI-Burst總線向 PS側(cè)HP 口寫入報(bào)文數(shù)據(jù)。
[0035] 本發(fā)明的優(yōu)點(diǎn)和有益效果:
[0036] 本發(fā)明可實(shí)現(xiàn)10化psW太網(wǎng)的實(shí)時(shí)數(shù)據(jù)采集,也可W實(shí)現(xiàn)其他高速實(shí)時(shí)數(shù)據(jù)傳輸 業(yè)務(wù)。當(dāng)多個(gè)HP口聯(lián)合使用時(shí),總的通信帶寬可W達(dá)到30化PS。同時(shí)與Linux操作系統(tǒng)共享 在同一塊存儲(chǔ)空間的不同位置中,降低Linux系統(tǒng)開銷,節(jié)約設(shè)備開發(fā)成本。
【附圖說明】:
[0037] 圖1為基于SOC系統(tǒng)實(shí)時(shí)數(shù)據(jù)采集框架示意圖;
[003引圖2為W太網(wǎng)帖格式示意圖;
[0039] 圖3為pcap報(bào)文格式示意圖;
[0040] 圖4為常規(guī)W太網(wǎng)數(shù)據(jù)采集示意圖;
[0041 ]圖5為基于SOC隔離孤R方式數(shù)據(jù)采集示意圖;
[0042] 圖6為W太網(wǎng)數(shù)據(jù)流拼接示意圖;
[0043] 圖7為預(yù)處理階段的流程圖;
[0044] 圖8為寫狀態(tài)機(jī)躍遷圖;
[0045] 圖9為讀操作狀態(tài)躍遷圖;
[0046] 圖10為系統(tǒng)地址空間分布圖;
[0047] 圖11為Vivado軟件下地址編輯界面;
[004引圖12為讀操作實(shí)際波形示意圖;
[0049] 圖13為數(shù)據(jù)文件示意圖;
[0050] 圖14為寫操作仿真示意圖;
[0051] 圖15為寫操作實(shí)際波形示意圖;
[0052] 圖16為軟件修改示意圖。
【具體實(shí)施方式】
[0053] 下面結(jié)合附圖和實(shí)例,詳細(xì)描述本發(fā)明的技術(shù)方案。本發(fā)明的所有內(nèi)容均已在 Xilinx巧nq系列SOC中實(shí)現(xiàn)。為了在有限的資源中實(shí)現(xiàn)本發(fā)明的所有細(xì)節(jié),對(duì)本發(fā)明的算 法在不影響性能的前提下,進(jìn)行有適當(dāng)?shù)暮?jiǎn)化。本發(fā)明軟件編譯環(huán)境為vivado2014.4和 petalinux2014.4.本發(fā)明的Block Design框圖如圖7所示。本發(fā)明預(yù)處理階段的流程圖如 圖8所示。本發(fā)明預(yù)處理階段狀態(tài)機(jī)躍遷圖如圖9所示。下面簡(jiǎn)述硬件。L部分)和軟件。S部 分)的實(shí)現(xiàn)方式。
[0054] 第1、經(jīng)過線路側(cè)SFP+或PHY處理后將線路側(cè)的電信號(hào)轉(zhuǎn)換為邏輯側(cè)的并行數(shù)字序 列一一即W太網(wǎng)報(bào)文,并傳輸至SOC的化中(可編程邏輯陣列FPGA),在化中(可編程邏輯陣 列FPGA)將得到的并行數(shù)字序列一一W太網(wǎng)報(bào)文進(jìn)行如下預(yù)處理:
[0055] 第1.1,將W太網(wǎng)報(bào)文加 W太網(wǎng)長(zhǎng)度信息,同時(shí)記錄每個(gè)W太網(wǎng)報(bào)文的到達(dá)時(shí)間, 并將該時(shí)間Wpcap的格式封裝到W太網(wǎng)報(bào)文中,得到pcap報(bào)文。
[0056] 第1.2,將W太網(wǎng)報(bào)文進(jìn)行數(shù)據(jù)流化處理,多字節(jié)對(duì)齊傳輸。數(shù)據(jù)經(jīng)過pcap封裝后 進(jìn)入Streamizer模塊,該模塊的主要功能為將各個(gè)W太網(wǎng)報(bào)文拼接成連續(xù)的8字節(jié)序列,W 方便后續(xù)模塊的處理。運(yùn)樣整個(gè)數(shù)據(jù)采集過程中只有最后一個(gè)時(shí)隙會(huì)有不滿足8字節(jié)整數(shù) 倍的情況,整個(gè)DDR存儲(chǔ)空間不會(huì)出現(xiàn)空桐。工程中的W太網(wǎng)數(shù)據(jù)總線寬度為64bit,運(yùn)樣如 果W太網(wǎng)的包長(zhǎng)不是8字節(jié)的整數(shù)倍時(shí),最后一個(gè)周期會(huì)出現(xiàn)有的字節(jié)為無效字節(jié)的情況, 為優(yōu)化帶寬,方便流處理,如果出現(xiàn)運(yùn)種情況,S化eamizer將下一包的包頭進(jìn)行移位,與上 一包的包尾進(jìn)行拼接操作,湊成8字節(jié)的整數(shù)倍,并進(jìn)行存儲(chǔ)至FIFO中等待傳輸。
[0057] 第2,將預(yù)處理后的W太網(wǎng)報(bào)文存入化里的緩沖FIFO中,并依據(jù)FIFO水位啟動(dòng)狀態(tài) 機(jī)向PS側(cè)HP 口發(fā)送AXI -Bur S t接口形式的數(shù)據(jù)報(bào)文。具體操作如下:
[0化引通過對(duì)FIFO水位進(jìn)行監(jiān)測(cè),當(dāng)FIFO水位達(dá)到128字節(jié),即滿足一次burSt操作所需 要的深度后,啟動(dòng)相應(yīng)的AXI-burst傳輸。本例中,總線帶寬為8字節(jié)。依據(jù)AMBA總線標(biāo)準(zhǔn),一 次Burst操作最多可W傳輸16beats,運(yùn)樣每次Burst操作最多可W傳輸128字節(jié)。在化側(cè)例 化邏輯FIFO為8字節(jié)寬度,當(dāng)FIFO水位超過16時(shí),狀態(tài)機(jī)啟動(dòng)即LL_TRANSF邸,即W最大長(zhǎng)度 進(jìn)行AXI-Burst操作;當(dāng)FIFO水位不滿16時(shí),且FIFO已長(zhǎng)時(shí)間沒有繼續(xù)收到數(shù)據(jù)報(bào)文,則狀 態(tài)機(jī)PART-TRANSF邸操作,即W當(dāng)前FIFO水位為準(zhǔn),將FIFO中剩下的數(shù)據(jù)一次性傳輸至PS側(cè) 的 HP 口。
[0059] AXI-Burst總線控制模塊依據(jù)FIFO的水位判斷如何發(fā)送FIFO中的W太網(wǎng)數(shù)據(jù),同 時(shí)也可W讀取Memory中的內(nèi)容,實(shí)現(xiàn)交互操作。其中圖9為寫操作狀態(tài)躍遷圖,圖10為讀操 作狀態(tài)躍遷圖。
[0060] 第2.1,讀操作:實(shí)現(xiàn)axi burst slave接口,接收從axi interconnect傳輸過來的 DDR數(shù)據(jù)。
[006。 由狀態(tài)機(jī)方式實(shí)現(xiàn),邏輯發(fā)起讀操作,通過外部接口配置,當(dāng)I_axi_rten檢測(cè)為 高,啟動(dòng)讀狀態(tài)機(jī)。在I_axi_;rd_en為高的同時(shí),義樣mem_rd_sta;rt_ad化和mem_;rd_length 信號(hào),該信號(hào)由操作系統(tǒng)通過AXI-Lite總線配置,分別表示讀的起始地址和讀操作 化ansfer的個(gè)數(shù),即總共需要burst的次數(shù),一次burst傳送128字節(jié)。因此傳輸IM數(shù)據(jù)需要 burst 2048次,W此推類。
[0062] 當(dāng)檢測(cè)到arready信號(hào)為1,則狀態(tài)機(jī)進(jìn)入ARADDR狀態(tài),否則在ARREADY狀態(tài)等待。 如果進(jìn)入ARADDR狀態(tài),則配置地址位和地址有效位,與AXI Master進(jìn)行地址交互。因?yàn)锳XI 協(xié)議中沒有地址response,所WARADDR狀態(tài)持續(xù)一拍后直接進(jìn)入數(shù)據(jù)傳輸狀態(tài),沒有等待 確認(rèn)操作。同時(shí)地址位和地址有效位歸0。
[0063] 期間增加超時(shí)檢查,即在一定時(shí)間內(nèi)沒有數(shù)據(jù)到來,判定讀錯(cuò)誤,設(shè)置err為1。
[0064] 在DATA狀態(tài)中,設(shè)置計(jì)數(shù)器,讀來一個(gè)beat (8字節(jié)),計(jì)數(shù)器加1,檢測(cè)運(yùn)個(gè)burSt是 否完成了 16個(gè)beats,如果完成,設(shè)置讀操作完成標(biāo)志。同時(shí)檢測(cè)response信號(hào)是否為成功 標(biāo)志,如果傳輸成功,則設(shè)置相關(guān)標(biāo)志位,表示一次burst讀操作傳輸完成。同時(shí)運(yùn)里也要設(shè) 置超時(shí)檢查,如果一個(gè)burst讀操作只傳了一半或者沒有收到response標(biāo)志,則設(shè)置錯(cuò)誤標(biāo) V巳、O
[00化]完成一次burst讀操作后,在進(jìn)行下一次burst讀操作之前,需要:
[0066] I,地址計(jì)數(shù)器加32'b100 0_0000,128字節(jié),從第一個(gè)burst之后的地址繼續(xù)讀取。
[0067] 2,Burst次數(shù)計(jì)數(shù)器加1,同時(shí)與軟件配置的值相比較,如果讀次數(shù)計(jì)數(shù)器與軟件 配置的值相等,表明已經(jīng)讀取了要求的字節(jié)數(shù),所W設(shè)置讀完成標(biāo)志,表明整個(gè)讀操作完 成,進(jìn)入IDLE狀態(tài)。如果沒有讀取到要求的字節(jié)數(shù),則系統(tǒng)進(jìn)入下一次burst操作,狀態(tài)機(jī)轉(zhuǎn) 到ARADDR中,如此往復(fù)。如果其中檢測(cè)到錯(cuò)誤標(biāo)志,則系統(tǒng)進(jìn)入邸R狀態(tài),退出讀狀態(tài),同時(shí) 向軟件報(bào)錯(cuò)。圖13為實(shí)際抓取的讀操作數(shù)據(jù),圖14為保存到文件中的讀取數(shù)據(jù)??梢姴僮飨?統(tǒng)與化中的字節(jié)序是相反的。
[0068] 第2.2,寫操作:實(shí)現(xiàn)axi slave側(cè)接口,與axi connect互聯(lián)。通用接口設(shè)計(jì),由于 前面已經(jīng)將報(bào)文進(jìn)行數(shù)據(jù)流處理,因此可W不考慮WStrb情形,默認(rèn)Sbyte傳輸,64bit, WStrb置為全1,初始狀態(tài)為idle態(tài),邏輯測(cè)流入的數(shù)據(jù)流緩存至64X1024FIF0中,F(xiàn)IFO輸出 信號(hào),表示fifo將要滿,運(yùn)是外部應(yīng)停止繼續(xù)向FIFO寫數(shù),否則將造成數(shù)據(jù)丟失。 該FIFO為異步FIFO。
[0069] 當(dāng)FIFO內(nèi)的數(shù)據(jù)滿16深度時(shí),即滿足一次完整的burst傳輸時(shí),狀態(tài)機(jī)跳轉(zhuǎn)至(:_ FU1X_TRANSFER狀態(tài)。如果f ifO內(nèi)的數(shù)據(jù)不能達(dá)到一次完整的16x8傳輸,則進(jìn) TRANSFm?狀態(tài)。判定條件為此時(shí)fifo內(nèi)的深度小于16,且一定時(shí)間內(nèi)沒有數(shù)據(jù)流入FIFO。如 果長(zhǎng)時(shí)間沒有數(shù)據(jù)進(jìn)入,開始讀取FIFO內(nèi)殘余數(shù)據(jù),目前該等待時(shí)間為2048個(gè)時(shí)鐘周期。
[0070] 當(dāng)awval id信號(hào)有效則進(jìn)孤R狀態(tài)。地址初始態(tài),經(jīng)歷了 一次C_WLL_TRANSFER后,在下一次操作之前將地址加128,經(jīng)歷了一次C_PART_TRANSFER 后,在下一次操作之前將地址加{S_axi_burst_count_set, 4 'bO}。I_reset_transf er信號(hào) 用于將地址寄存器歸C_BASE_WR_ADDR,由軟件設(shè)置。
[0071] 當(dāng)wready信號(hào)有效時(shí)進(jìn)入(:_04了4狀態(tài),開始傳輸數(shù)據(jù)。如果是從C_RJLL_TRANS陽(yáng)R 狀態(tài)躍遷過來,則一次寫入128字節(jié),如果是從C_PART_TRANSFER狀態(tài)躍遷過來,一次寫入 kount, 4 ' bO}字節(jié),其中count為FIFO中的剩余字節(jié)數(shù)。
[0072] C_TRANSFER_D0肥狀態(tài)主要用于檢測(cè)axi response信號(hào),如果長(zhǎng)時(shí)間沒有收到 response信號(hào),同樣進(jìn)入IDLE狀態(tài),但超時(shí)計(jì)數(shù)器置位,上報(bào)錯(cuò)誤。
[007引設(shè)置地址保護(hù),目前的基準(zhǔn)地址為0x38000000,DDR的地址范圍為OxO~ 0x40000000,因此預(yù)留的是高128MB地址空間作為共享空間。地址空間示意圖如圖11所示, Vivado軟件中的地址編輯界面如圖12所示??紤]W太網(wǎng)包長(zhǎng)度應(yīng)該小于16000,因此設(shè)置 0x3fffafff為保留地址口限,當(dāng)目前的寫入地址大于該口限,同時(shí)輸入的valid為低時(shí),停 止寫入fifo。該操作的目的是保存一個(gè)完整的包而不會(huì)導(dǎo)致截?cái)?。需要預(yù)留空間的計(jì)算方 式為16384+1024*8 = 0x6000,計(jì)算方式為最大包長(zhǎng)加上fifo中的剩余數(shù)據(jù),fifo為1024x8 字節(jié)。圖15為通過modelsim仿真得到發(fā)送時(shí)序圖,圖16為實(shí)際抓取波形得到的寫操作時(shí)序 圖。如圖所示,系統(tǒng)寫操作最大吞吐量在時(shí)鐘頻率200MHz時(shí)為200x64x16/20 = 10.24Gbps。 如想繼續(xù)提高吞吐量,則需要提高時(shí)鐘頻率。
[0074] 第3,修改操作系統(tǒng)設(shè)備樹文件,使高位地址空間對(duì)操作系統(tǒng)不可見,但是運(yùn)部分 地址空間在U-boot文件中已定義,操作系統(tǒng)視該地址空間為外設(shè),待數(shù)據(jù)報(bào)文抓取完畢后 操作系統(tǒng)通過mmapO函數(shù)映射該部分地址,從而可W訪問或修改該地址空間數(shù)據(jù)。
[0075] 修改操作系統(tǒng)設(shè)備樹文件,依據(jù)系統(tǒng)需求使高地址Memory空間從操作系統(tǒng)Memory 中隔離出來,W保證操作系統(tǒng)不會(huì)訪問該存儲(chǔ)空間,否則會(huì)導(dǎo)致操作系統(tǒng)崩潰。本例中將 Memo巧的高128M B^es從系統(tǒng)Memo巧隔離出來,運(yùn)樣該空間物理基地址為0x38000000 ,來 自化側(cè)的AXI-BurstW該地址為基地址進(jìn)行數(shù)據(jù)傳輸。修改方式如圖16所示,注意需要將地 址改為0x38000000。同時(shí),為了不使最后一個(gè)W太網(wǎng)報(bào)文被截?cái)啵到y(tǒng)中設(shè)置地址上限保 護(hù)。本系統(tǒng)中,系統(tǒng)上限地址為0x40000000,預(yù)留出一個(gè)W太網(wǎng)最長(zhǎng)包的長(zhǎng)度。當(dāng)AXI-Burst 地址超過該上限時(shí),停止數(shù)據(jù)采集,否則有報(bào)文截?cái)嗟娘L(fēng)險(xiǎn)。當(dāng)報(bào)文保存完畢后,操作系統(tǒng) 可W像訪問外設(shè)一樣通過mmapO函數(shù)訪問該高地址Memory空間。之后可W將該數(shù)據(jù)進(jìn)行 pcap封裝,W文件的形式保存在根文件系統(tǒng)中。
[0076] 第4,操作系統(tǒng)用戶空間通過程序?qū)?shù)據(jù)寫入根文件系統(tǒng),最終在PC機(jī)或其他嵌入 式設(shè)備通過Wireshark等相關(guān)軟件對(duì)數(shù)據(jù)進(jìn)行協(xié)議分析。
[0077] 待數(shù)據(jù)傳輸完畢或化側(cè)向操作系統(tǒng)通過AXI-Lite總線上報(bào)寫滿時(shí),由Linux用戶 空間將該空間地址通過mmapO函數(shù)映射進(jìn)操作系統(tǒng)中,再通過fwriteO等函數(shù)將數(shù)據(jù)寫入 指定區(qū)域,并最終W文件的形式保存在根文件系統(tǒng)中。
[0078] 當(dāng)轉(zhuǎn)包文件已經(jīng)保存完畢后,用戶可W在Linux環(huán)境下直接通過Wireshark等軟件 直接對(duì)抓包文件進(jìn)行協(xié)議分析,也可W將抓包文件保存在SD卡中,將文件拷貝到PC機(jī)中通 過PC機(jī)集中對(duì)數(shù)據(jù)文件進(jìn)行協(xié)議分析。
【主權(quán)項(xiàng)】
1. 一種基于SOC隔離Memory的lOGbps以太網(wǎng)實(shí)時(shí)數(shù)據(jù)采集方法,其特征在于所述方法 包括如下步驟: 第1,經(jīng)過線路側(cè)SFP+或PHY處理后將線路側(cè)的電信號(hào)轉(zhuǎn)換為邏輯側(cè)的并行數(shù)字序列即 以太網(wǎng)報(bào)文,并傳輸至S0C的PL中,在PL中將以太網(wǎng)報(bào)文進(jìn)行預(yù)處理; 第2,將預(yù)處理后的以太網(wǎng)報(bào)文存入PL里的緩沖FIFO中,并依據(jù)FIFO水位啟動(dòng)狀態(tài)機(jī)向 PS側(cè)HP 口發(fā)送AXI-Burst接口形式的數(shù)據(jù)報(bào)文; 第3,修改操作系統(tǒng)設(shè)備樹文件,使高位地址空間對(duì)操作系統(tǒng)不可見,但是這部分地址 空間在U-b〇〇t文件中已定義,操作系統(tǒng)視該地址空間為外設(shè),待數(shù)據(jù)報(bào)文抓取完畢后操作 系統(tǒng)通過mmap()函數(shù)映射該部分地址,從而可以訪問或修改該地址空間數(shù)據(jù); 第4,操作系統(tǒng)用戶空間通過程序?qū)?shù)據(jù)寫入根文件系統(tǒng),最終在PC機(jī)或其他嵌入式設(shè) 備通過Wireshark軟件對(duì)數(shù)據(jù)進(jìn)行協(xié)議分析。2. 根據(jù)權(quán)利要求1所述的方法,其特征在于第1步中所述的將以太網(wǎng)報(bào)文進(jìn)行預(yù)處理是 指進(jìn)行如下處理: 第1.1,將以太網(wǎng)報(bào)文加以太網(wǎng)長(zhǎng)度信息,同時(shí)記錄每個(gè)以太網(wǎng)報(bào)文的到達(dá)時(shí)間,并將 該時(shí)間以pcap格式封裝到以太網(wǎng)報(bào)文中,得到pcap報(bào)文; 第1.2,將以太網(wǎng)報(bào)文進(jìn)行數(shù)據(jù)流化處理,多字節(jié)對(duì)齊傳輸。3. 根據(jù)權(quán)利要求1所述的方法,其特征在于第2步所述的將以太網(wǎng)報(bào)文存入緩沖FIFO中 的具體操作是,當(dāng)FIFO水位達(dá)到128字節(jié),即滿足一次burst操作所需要的深度后,PL啟動(dòng)數(shù) 據(jù)發(fā)送狀態(tài)機(jī),通過AXI-Burst總線向PS側(cè)HP 口寫入報(bào)文數(shù)據(jù)。4. 根據(jù)權(quán)利要求1所述的方法,其特征在于第3步所述的操作系統(tǒng)用戶空間在報(bào)文采集 完畢后通過_ap〇函數(shù)得到該存儲(chǔ)空間的指針信息,將報(bào)文頭部統(tǒng)一添加至數(shù)據(jù)采集文件 中,并保存為pcap文件;該文件可以通過Linux系統(tǒng)下的相關(guān)軟件直接讀取分析,也可以將 其保存至SD卡中,在PC機(jī)上進(jìn)行協(xié)議分析。
【文檔編號(hào)】H04L12/863GK105939238SQ201610232256
【公開日】2016年9月14日
【申請(qǐng)日】2016年4月14日
【發(fā)明人】孟南
【申請(qǐng)人】天津市德力電子儀器有限公司