《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 適于底層協(xié)議棧開(kāi)發(fā)的數(shù)據(jù)采集與仿真系統(tǒng)
適于底層協(xié)議棧開(kāi)發(fā)的數(shù)據(jù)采集與仿真系統(tǒng)
黃建堯, 劉開(kāi)華, 李 琨
天津大學(xué) 電子信息工程學(xué)院, 天津 300072
摘要: 針對(duì)數(shù)字通信系統(tǒng)中底層協(xié)議棧開(kāi)發(fā)過(guò)程中處理數(shù)據(jù)量大,出現(xiàn)問(wèn)題不易再現(xiàn)、難于追蹤的問(wèn)題,設(shè)計(jì)了一種專(zhuān)門(mén)用于底層協(xié)議棧開(kāi)發(fā)的高速數(shù)據(jù)采集、仿真系統(tǒng)。系統(tǒng)采用USB總線(xiàn)作為高速數(shù)據(jù)通路,使用FPGA進(jìn)行格式轉(zhuǎn)換及數(shù)據(jù)緩沖。論述了仿真系統(tǒng)的工作原理和系統(tǒng)框架,分析了數(shù)據(jù)轉(zhuǎn)換、解析的流程,給出了系統(tǒng)仿真的一般模式。
中圖分類(lèi)號(hào): TP274
文獻(xiàn)標(biāo)識(shí)碼: A
Data acquisition and simulation system for underlying protocol stack development
HUANG Jian Yao, LIU Kai Hua, LI Kun
School of Electronic and Information Engineering, Tianjin University, Tianjin 300072, China
Abstract: A data acquisition and simulation system is developed for underlying protocol stack development to overcome the shortcomings such as large data quantity, difficult to reproduce and recover in the procedure of underlying protocol stack developing of digital communication systems. USB is adopted as the high speed data channel for the data acquisition system. FPGA is used for format converting and data buffering. The principle and framework of the simulation system is expounded. The procedure of data conversion and resolution are analyzed. A common pattern of the simulation system is shown.
Key words : data acquisition; simulation; USB; FPGA

    隨著軟件無(wú)線(xiàn)電思想與技術(shù)的發(fā)展,現(xiàn)代數(shù)字通信系統(tǒng)中,越來(lái)越多地使用DSP等數(shù)字信號(hào)處理器結(jié)合高速AD、DA轉(zhuǎn)換器進(jìn)行OSI 7層通信體系模型中物理層(信號(hào)的調(diào)制、解調(diào))和數(shù)據(jù)鏈路層(信道編、解碼)部分的數(shù)據(jù)處理工作。近年來(lái),數(shù)字信號(hào)處理理論發(fā)展迅猛,數(shù)字信號(hào)處理器工作頻率及能力不斷提高,數(shù)字通信系統(tǒng)中越來(lái)越多的工作能夠通過(guò)DSP來(lái)完成,因而DSP本身的程序結(jié)構(gòu)也越來(lái)越復(fù)雜。由于通信信號(hào)(尤其是無(wú)線(xiàn)通信)本身具有很強(qiáng)的實(shí)時(shí)性、隨機(jī)性的特點(diǎn),造成DSP的輸入數(shù)據(jù)缺乏規(guī)律性,一閃即逝,從而導(dǎo)致相應(yīng)的處理程序出現(xiàn)了問(wèn)題不易復(fù)現(xiàn),且問(wèn)題難于追蹤、捕捉,這就給DSP的程序設(shè)計(jì)與調(diào)試帶來(lái)了較大困難。針對(duì)這一問(wèn)題,本文根據(jù)一般底層通信協(xié)議棧的數(shù)據(jù)處理方法,設(shè)計(jì)了一套適合于對(duì)底層協(xié)議棧進(jìn)行開(kāi)發(fā)和調(diào)試的數(shù)據(jù)采集仿真系統(tǒng),以達(dá)到追蹤、再現(xiàn)問(wèn)題并查找程序缺陷的目的。
1 數(shù)據(jù)采集系統(tǒng)
    數(shù)據(jù)采集系統(tǒng)主要完成從正在工作中的通信終端中采集數(shù)據(jù)的任務(wù)。
1.1 采集點(diǎn)的選擇
    整個(gè)通信系統(tǒng)中有多個(gè)數(shù)據(jù)采集切入點(diǎn)可選,可以對(duì)中頻信號(hào)直接采樣,也可以對(duì)基帶信號(hào)采樣,還可以通過(guò)模擬系統(tǒng)中的AD數(shù)據(jù)接收時(shí)序,直接接收AD輸出數(shù)據(jù)。但前兩種采集點(diǎn)不能確保采集到的信號(hào)數(shù)據(jù)與DSP輸入數(shù)據(jù)完全一致,而模擬AD數(shù)據(jù)時(shí)序的方式則可能影響DSP與AD之間的主從關(guān)系,影響DSP協(xié)議棧的正常運(yùn)行,而且各種外部中斷的采集也比較困難。因而最為穩(wěn)妥的方式是DSP通過(guò)數(shù)據(jù)總線(xiàn)輸出其接收到的數(shù)據(jù)。這種方法的缺點(diǎn)是需要占用DSP少量資源,但這與協(xié)議棧運(yùn)行相比,完全可以忽略不計(jì),不計(jì)不會(huì)影響協(xié)議棧本身的運(yùn)行。
1.2 硬件連接
    參考文獻(xiàn)[1]對(duì)各種數(shù)據(jù)采集系統(tǒng)進(jìn)行了分析比較,并指出USB總線(xiàn)為數(shù)據(jù)采集卡與PC機(jī)較理想的接口,因此選用CY68013A作為USB接口芯片。采用1片FPGA進(jìn)行DSP與CY68013A之間數(shù)據(jù)格式的轉(zhuǎn)換,CY68013A固件程序存放在E2PROM中,通過(guò)I2C總線(xiàn)連接,連接方式如圖1所示。

    其中,DSP除了輸出16位數(shù)據(jù)總線(xiàn)之外,還引出7位地址線(xiàn)(A0~A6),用以區(qū)分不同的數(shù)據(jù)類(lèi)型。FPGA須將DSP外部總線(xiàn)輸出的數(shù)據(jù)格式轉(zhuǎn)換為CY68013A外部GPIF可兼容的格式。
1.3 FPGA程序設(shè)計(jì)
    CY68013A外部GPIF端口可作為數(shù)據(jù)輸入端口的僅有16位(FD0~FD15),而DSP輸出的信息數(shù)據(jù)一共有23位(16位數(shù)據(jù)線(xiàn)D0~D15和7位地址線(xiàn)A0~A6),故而需要將多出的7位地址信息嵌入到數(shù)據(jù)中去。將1個(gè)16位數(shù)據(jù)拆分成2個(gè),每個(gè)數(shù)據(jù)中的低8位(FD0~FD7)用于存儲(chǔ)原數(shù)據(jù)信息(D0~D7或D8~D15),高7位(FD8~FD14)存放地址類(lèi)型信息(A0~A6),最高位(FD15)用于標(biāo)識(shí)當(dāng)前數(shù)據(jù)中FD0~FD7是原數(shù)據(jù)的D0~D7或是D8~D15,具體格式如圖2(b)所示。CY68013A GPIF端口使用內(nèi)部48 MHz時(shí)鐘,根據(jù)參考文獻(xiàn)[2],每個(gè)GPIF信號(hào)周期為20.83 ns,二者時(shí)鐘不同步,FPGA為了與高速設(shè)備兼容,需要使用更高的時(shí)鐘源。因此,為了保證GPIF能夠采集到RDY信號(hào),F(xiàn)PGA輸出的信號(hào)至少需要保持1.5個(gè)GPIF信號(hào)周期。GPIF每次從外部讀取數(shù)據(jù)存入FIFO需要6個(gè)狀態(tài),故而每個(gè)輸出數(shù)據(jù)間隔應(yīng)大于6個(gè)GPIF信號(hào)周期。以TI公司C55系列DSP為例,主頻時(shí)鐘144 MHz,與FPGA連接的為EMIFS外部總線(xiàn),則FPGA轉(zhuǎn)換信號(hào)時(shí)序如圖2所示。其中,圖2(a)為DSP EMIFS輸出時(shí)序, 圖2(b)為經(jīng)FPGA轉(zhuǎn)換后的CY68013A GPIF輸入時(shí)序及數(shù)據(jù)格式。

    考慮到DSP輸出數(shù)據(jù)時(shí)鐘可能較CY68013A GPIF采集時(shí)鐘快,因而FPGA需要設(shè)計(jì)內(nèi)置的FIFO存儲(chǔ)器,用于緩存DSP輸出的數(shù)據(jù)。
1.4 USB固件設(shè)計(jì)
    由于CY68013A內(nèi)置的8051內(nèi)核時(shí)鐘周期較慢,不適于高速傳輸,因而采集程序中僅使用8051進(jìn)行初始化配置,而不干預(yù)數(shù)據(jù)傳輸過(guò)程。CY68013A通過(guò)外部GPIF讀取數(shù)據(jù)存入FIFO中,F(xiàn)IFO滿(mǎn)時(shí)通過(guò)USB傳入PC機(jī)。采用Cypress公司提供的通用程序框架以及圖形化GPIF設(shè)計(jì)工具,參照?qǐng)D2(b)的時(shí)序,編輯GPIF波形。USB總線(xiàn)選擇傳輸大量數(shù)據(jù)時(shí)比較常用的Bulk傳輸模式,硬件配置程序采用Cypress公司提供的程序模板,參考文獻(xiàn)[3]對(duì)該模板進(jìn)行了詳細(xì)說(shuō)明,這里不再贅述,程序框架與參考文獻(xiàn)[4、5]類(lèi)似。
1.5 PC機(jī)接收程序
    USB接口驅(qū)動(dòng)程序可直接使用Cypress公司提供的ez-usb驅(qū)動(dòng)。由于ez-usb驅(qū)動(dòng)沒(méi)有提供高級(jí)的文件操作IO方式,因而需要調(diào)用比較底層的DeviceIoControl函數(shù)來(lái)處理??紤]到Bulk傳輸方式完全是由主機(jī)端(PC機(jī))發(fā)起讀操作,從機(jī)端(采集板)只能被動(dòng)地等待,而當(dāng)CY68013A內(nèi)置的FIFO寫(xiě)滿(mǎn)之后,如果主機(jī)不能及時(shí)地發(fā)起讀操作,則FIFO不再接收數(shù)據(jù)寫(xiě)入操作,因而會(huì)有少量的數(shù)據(jù)丟失。對(duì)于底層協(xié)議棧調(diào)試,這種少量的數(shù)據(jù)丟失可能引起程序流程錯(cuò)誤,是不能接受的。因此PC機(jī)端接收程序應(yīng)采用多線(xiàn)程處理方式,將接收USB數(shù)據(jù)的工作列為單獨(dú)的線(xiàn)程,并將其優(yōu)先級(jí)設(shè)置為實(shí)時(shí)性最高的THREAD_PRIORITY_TIME_CRITICAL,防止接收數(shù)據(jù)過(guò)程被系統(tǒng)中其他進(jìn)程打斷,以確保每次讀操作能夠及時(shí)發(fā)出。同時(shí)也要保證負(fù)責(zé)數(shù)據(jù)采集的PC機(jī)操作系統(tǒng)中同時(shí)運(yùn)行的進(jìn)程盡量少,關(guān)掉不必要的后臺(tái)進(jìn)程。
    PC機(jī)接收到的數(shù)據(jù)先存入臨時(shí)文件中,以備后續(xù)解析、仿真程序使用。臨時(shí)文件以字(16 bit)為單位存儲(chǔ),每個(gè)數(shù)據(jù)用2個(gè)字來(lái)表示,低字節(jié)在前,與FPGA轉(zhuǎn)換后的數(shù)據(jù)格式一致,如表1所示。

2 仿真系統(tǒng)
    仿真系統(tǒng)使用采集系統(tǒng)采集到的數(shù)據(jù),再現(xiàn)通信終端中的協(xié)議棧運(yùn)行狀態(tài),便于開(kāi)發(fā)者隨時(shí)檢查程序錯(cuò)誤,對(duì)程序進(jìn)行調(diào)試。
2.1 系統(tǒng)框架
    要想再現(xiàn)底層協(xié)議棧運(yùn)行狀態(tài),除了保證協(xié)議棧整體輸入、輸出一致外,最大的難度在于系統(tǒng)的定時(shí),要能夠準(zhǔn)確再現(xiàn)各種事件的發(fā)生時(shí)刻。基于軟件無(wú)線(xiàn)電技術(shù)的數(shù)字通信系統(tǒng)大都采用過(guò)采樣方式,AD/DA速率都比較高而且穩(wěn)定,因而底層協(xié)議棧也大多以AD/DA的輸入、輸出中斷作為系統(tǒng)定時(shí)。當(dāng)通信終端作為接收機(jī)時(shí),底層協(xié)議棧需要以AD采樣數(shù)據(jù)作為其他部分(信道估計(jì)與均衡、解調(diào)、信道解碼等)的驅(qū)動(dòng)數(shù)據(jù);作為發(fā)射機(jī)時(shí),DA輸出數(shù)據(jù)是底層協(xié)議棧的最終輸出結(jié)果,需要仿真程序進(jìn)行驗(yàn)證。故而仿真程序可以采用AD/DA中斷來(lái)劃分程序運(yùn)行的最小時(shí)間片,其他各種事件的發(fā)生都通過(guò)中斷個(gè)數(shù)來(lái)計(jì)時(shí),仿真程序通過(guò)判斷AD/DA數(shù)據(jù)的個(gè)數(shù)調(diào)用各程序函數(shù)來(lái)再現(xiàn)底層協(xié)議棧運(yùn)行狀況及數(shù)據(jù)流向。這樣就可以在不增加開(kāi)銷(xiāo)的情況下,盡最大可能保證仿真程序與實(shí)際DSP中運(yùn)行的協(xié)議棧一致,方便再現(xiàn)問(wèn)題。
2.2  輸出數(shù)據(jù)
    根據(jù)1.1節(jié)所選擇的數(shù)據(jù)采集點(diǎn),需在DSP的底層協(xié)議棧代碼中輸出仿真時(shí)所用的數(shù)據(jù): (1)需要輸出的為前端AD/DA數(shù)據(jù),以及底層協(xié)議棧與上層協(xié)議棧之間的交互數(shù)據(jù),這是底層通信協(xié)議棧接收、發(fā)射信息時(shí)所需的輸入數(shù)據(jù)與最終的輸出結(jié)果; (2)其他外圍設(shè)備產(chǎn)生的中斷和輸入數(shù)據(jù)也會(huì)影響底層協(xié)議棧流程,是仿真時(shí)所必須的部分;(3)底層協(xié)議棧各任務(wù)掛起、運(yùn)行、結(jié)束等狀態(tài)變化需要輸出,以保證仿真程序運(yùn)行時(shí)刻與實(shí)際情況一致。另外,在2次AD/DA中斷之間會(huì)發(fā)生多次變化的全局變量也需要輸出,以彌補(bǔ)時(shí)間片劃分的不足。
2.3  數(shù)據(jù)解析
    1.5節(jié)中所存儲(chǔ)的接收數(shù)據(jù)不方便直接用于仿真,需要進(jìn)行格式轉(zhuǎn)換。根據(jù)2.1節(jié)中所述系統(tǒng)框架,所有事件通過(guò)AD/DA數(shù)據(jù)計(jì)時(shí),故而除AD/DA數(shù)據(jù)外,其他類(lèi)型數(shù)據(jù)需要記錄AD/DA數(shù)據(jù)個(gè)數(shù)信息,作為時(shí)間戳,因而可將所有數(shù)據(jù)分為兩大類(lèi):AD/DA數(shù)據(jù)和非AD/DA數(shù)據(jù)。為仿真方便,將這2種類(lèi)型數(shù)據(jù)分別存放于2個(gè)文件中。在解析數(shù)據(jù)時(shí),需要將1.3小節(jié)中為了與CY68013A兼容而通過(guò)FPGA拆分開(kāi)的2個(gè)16位數(shù)據(jù)重新合并為1個(gè),并將不同類(lèi)型的數(shù)據(jù)分開(kāi)。AD/DA數(shù)據(jù)一般長(zhǎng)度固定,由AD/DA轉(zhuǎn)換器分辨率(位數(shù))而定,例如,AD/DA數(shù)據(jù)為16位,每次中斷輸出1個(gè)數(shù)據(jù),則解析后的數(shù)據(jù)格式如表2所示。

  非AD/DA數(shù)據(jù)根據(jù)程序需求,長(zhǎng)度不固定,可在協(xié)議棧程序輸出數(shù)據(jù)中包含長(zhǎng)度信息,也可在接收程序與輸出程序中提前規(guī)定好數(shù)據(jù)長(zhǎng)度。例如,非AD/DA數(shù)據(jù)以字為單位,數(shù)據(jù)長(zhǎng)度為N,則解析后的數(shù)據(jù)格式如表3所示。

    由于底層協(xié)議棧需要兼顧外圍硬件控制,各種外部中斷比較多,很可能會(huì)打斷數(shù)據(jù)輸出,因而在解析數(shù)據(jù)時(shí),需要考慮各種數(shù)據(jù)之間的嵌套。為此,可以對(duì)每種數(shù)據(jù)采用單獨(dú)的緩沖區(qū),待解析到1條完整數(shù)據(jù)之后再存入文件中,同時(shí)還要保證文件中各種非AD/DA數(shù)據(jù)按照發(fā)生時(shí)間的先后順序排列。其流程如圖3所示。

2.4 系統(tǒng)仿真
    系統(tǒng)仿真之前,首先要將運(yùn)行于DSP中的底層協(xié)議棧代碼轉(zhuǎn)換為PC機(jī)上可運(yùn)行的代碼,一般DSP大多采用C語(yǔ)言和匯編語(yǔ)言相結(jié)合的方式進(jìn)行開(kāi)發(fā),C代碼基本上不需要進(jìn)行大量修改,而匯編代碼需要根據(jù)其工作原理,轉(zhuǎn)譯成C代碼。系統(tǒng)仿真時(shí)采用2.3節(jié)中解析后的數(shù)據(jù)文件作為輸入,按照2.1節(jié)定義的仿真系統(tǒng)框架,以AD/DA數(shù)據(jù)為驅(qū)動(dòng),通過(guò)判斷非AD/DA數(shù)據(jù)的發(fā)生時(shí)刻(AD/DA數(shù)據(jù)計(jì)數(shù)值)來(lái)調(diào)動(dòng)底層協(xié)議棧各部分任務(wù)運(yùn)行,以達(dá)到再現(xiàn)協(xié)議棧運(yùn)行狀況、調(diào)試程序的目的。仿真流程如圖4所示。有些硬件操作需要底層協(xié)議??刂?,仿真時(shí)可以按照“[發(fā)生時(shí)間] 硬件操作內(nèi)容”的格式寫(xiě)到文件中作為仿真程序的輸出。這樣通過(guò)查詢(xún)輸出文件,各種硬件操作的先后關(guān)系一目了然,更形象化,有利于發(fā)現(xiàn)硬件控制上的邏輯錯(cuò)誤。

    本文設(shè)計(jì)了一種專(zhuān)門(mén)用于底層協(xié)議棧開(kāi)發(fā)的數(shù)據(jù)采集與仿真系統(tǒng),利用USB高速傳輸特點(diǎn)以及物理連接的便利性,采用CY68013A進(jìn)行數(shù)據(jù)傳遞,充分利用其GPIF資源,使用FPGA進(jìn)行格式轉(zhuǎn)換。文中對(duì)仿真系統(tǒng)的整體框架和數(shù)據(jù)轉(zhuǎn)換細(xì)節(jié)進(jìn)行了詳細(xì)說(shuō)明。該系統(tǒng)可用于各種類(lèi)型協(xié)議棧調(diào)試,便于追蹤、再現(xiàn)問(wèn)題。經(jīng)過(guò)實(shí)驗(yàn)驗(yàn)證,系統(tǒng)可承受100 Mb/s的實(shí)時(shí)數(shù)據(jù)流,在數(shù)字集群手持終端開(kāi)發(fā)中進(jìn)行了廣泛應(yīng)用,不僅降低了協(xié)議棧的開(kāi)發(fā)難度,而且縮短了開(kāi)發(fā)周期,有很高的實(shí)用性。
參考文獻(xiàn)
[1]  劉澤西,程晶晶,孔力.基于USB2.0接口的高速實(shí)時(shí)數(shù)據(jù)采集系統(tǒng)[J].測(cè)控技術(shù),2007,26(2):34-37.
[2]  Cypress Semiconductor Corporation.CY7C68013A, CY7C-68014A, CY7C68015A, CY7C68016A, EZ-USB FX2LP  USB microcontroller high speed USB peripheral controller[EB/OL]. http://www.cypress.com/?rID=14181,2009-05-22.
[3]  梁鴻翔,王潤(rùn)田.基于USB2.0的同步高速數(shù)據(jù)采集器的設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2004,31(8):13-15.
[4]  安榮,任勇峰,李圣昆.基于FPGA和USB2.0的數(shù)據(jù)采集系統(tǒng)[J].儀器儀表與傳感器,2009(3):49-51.
[5] 周彬,??“?,魏嬌.基于USB2.0低功耗實(shí)時(shí)數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)[J].儀器儀表與傳感器,2009(4):33-35.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。