專利名稱:適于數(shù)字通信終端底層協(xié)議棧的數(shù)據(jù)采集與仿真系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)字通信終端的數(shù)據(jù)采集與處理系統(tǒng),特別涉及一種適于數(shù)字通信終端底層協(xié)議棧的數(shù)據(jù)采集與仿真系統(tǒng)。
背景技術(shù):
隨著軟件無線電思想與技術(shù)的發(fā)展,現(xiàn)代數(shù)字通信系統(tǒng)中越來越多的使用通用數(shù)字信號(hào)處理器(DSP)結(jié)合高速模/數(shù)(A/D)、數(shù)/模(D/A)轉(zhuǎn)換器來進(jìn)行通信體系模型中物理層(信號(hào)的調(diào)制、解調(diào))和媒體接入層(信道編、解碼)的部分?jǐn)?shù)據(jù)處理工作。近年來,數(shù)字信號(hào)處理理論發(fā)展迅猛,數(shù)字信號(hào)處理器工作頻率及處理能力不斷提高,數(shù)字通信系統(tǒng)中越來越多的工作能夠通過DSP來完成,因而DSP本身的程序結(jié)構(gòu)也越來越復(fù)雜。由于通信信號(hào)(尤其是無線通信)本身具有很強(qiáng)的實(shí)時(shí)性、隨機(jī)性特點(diǎn),造成DSP的輸入數(shù)據(jù)缺乏規(guī)律性,一閃即逝,從而導(dǎo)致相應(yīng)的處理程序出現(xiàn)了問題不好復(fù)現(xiàn),而且問題難于追蹤、捕捉,這就給DSP的程序設(shè)計(jì)與調(diào)試帶來了較大困難。
常見的嵌入式系統(tǒng)調(diào)試手段有JTAG仿真器調(diào)試、串口輸出、通用輸入輸出端口(GPIO)輸出等幾種。
JTAG仿真器可以連接硬件電路,通過JTAG協(xié)議直接訪問芯片內(nèi)部寄存器,從而達(dá)到在線仿真的目的,可以設(shè)置斷點(diǎn)調(diào)試程序。但是由于底層協(xié)議棧所處理的通信信號(hào)有很強(qiáng)的實(shí)時(shí)性和隨機(jī)性,程序一旦出現(xiàn)異常,使用JTAG仿真器不具備實(shí)時(shí)調(diào)試能力,無法捕捉連續(xù)的信息,無法分析異常的前因后果,因而這種方式不適于底層協(xié)議棧調(diào)試。
串口輸出是嵌入式系統(tǒng)遠(yuǎn)程調(diào)試最常用的一種方法,主要是因?yàn)榇谑且环N比較常用的通信端口,協(xié)議簡(jiǎn)單,大多數(shù)設(shè)備都支持,另外在計(jì)算機(jī)上處理串口數(shù)據(jù)也很容易。調(diào)試時(shí),在目標(biāo)程序中添加一些調(diào)試信息從串口輸出,在計(jì)算機(jī)上通過接收到的串口數(shù)據(jù)可以比較容易的分析目標(biāo)程序的流程。但這種方法一個(gè)致命的弱點(diǎn)就是串口速率很低,最高只能達(dá)到115200bit/s。而對(duì)于底層通信協(xié)議棧來說,從信道接收到的數(shù)據(jù)一般都有較高的數(shù)據(jù)率,一般都達(dá)到幾Mbit/s甚至更高,如果需要跟蹤每個(gè)數(shù)據(jù)的處理流程,那么串口速率顯然是不夠用的。
GPIO是另一種比較常見的嵌入式程序調(diào)試方法,程序通過設(shè)置幾個(gè)GPIO引腳的狀態(tài),來表示某種流程或者結(jié)果,通過示波器來觀察GPIO的信號(hào)變化情況,從而得到程序的運(yùn)行狀態(tài)。由于GPIO變化速率很快,因而這種方式能夠跟蹤高速信號(hào),但其弱點(diǎn)是GPIO只能以電平的高低來表示兩種狀態(tài),即使使用多個(gè)GPIO端口也只能表示有限的狀態(tài)。一些算法的實(shí)現(xiàn)程序,調(diào)試時(shí)需要知道某一步計(jì)算結(jié)果的具體數(shù)值,這時(shí)候GPIO調(diào)試方式就無能為力了。
常見的數(shù)據(jù)采集系統(tǒng)一般通過A/D轉(zhuǎn)換器直接采集模擬信號(hào)。整個(gè)通信系統(tǒng)中有多個(gè)數(shù)據(jù)采集切入點(diǎn)可選,可以對(duì)中頻信號(hào)直接采樣,也可以對(duì)基帶信號(hào)采樣,但這種采集方式,采集系統(tǒng)需要直接連接到終端模擬信號(hào)通路上,很可能由于匹配等原因造成原信號(hào)的失真,直接影響底層協(xié)議棧解調(diào)部分的正常運(yùn)行。同時(shí)由于A/D轉(zhuǎn)換器本身的差異,也不能保證采集系統(tǒng)采集到的數(shù)據(jù)與DSP的輸入數(shù)據(jù)完全一致,那么就不能保證對(duì)底層協(xié)議棧運(yùn)行狀況再現(xiàn)時(shí)得到完全一致的數(shù)據(jù)流程。因而這種采集系統(tǒng)也不適合底層通信協(xié)議棧的調(diào)試。
發(fā)明內(nèi)容
鑒于上述技術(shù)現(xiàn)狀,本發(fā)明的目的是采用高速的數(shù)據(jù)采集系統(tǒng),來收集底層協(xié)議棧的運(yùn)行信息,之后根據(jù)收集到的信息,在計(jì)算機(jī)上進(jìn)行分析,以再現(xiàn)當(dāng)時(shí)底層協(xié)議棧的運(yùn)行狀況,方便查找問題。由此設(shè)計(jì)了適于數(shù)字通信終端底層協(xié)議棧的數(shù)據(jù)采集與仿真系統(tǒng)。
本發(fā)明為實(shí)現(xiàn)上述目的所采取的技術(shù)方案是一種適于數(shù)字通信終端底層協(xié)議棧的數(shù)據(jù)采集與仿真系統(tǒng),其特征在于包括數(shù)字信號(hào)處理器、數(shù)據(jù)采集系統(tǒng)和計(jì)算機(jī)仿真系統(tǒng),數(shù)據(jù)采集系統(tǒng)包括FPGA和USB接口芯片以及與之對(duì)應(yīng)的FPGA程序存儲(chǔ)器和USB接口芯片程序存儲(chǔ)器,計(jì)算機(jī)仿真系統(tǒng)包括計(jì)算機(jī)以及運(yùn)行于計(jì)算機(jī)之上的數(shù)據(jù)接收程序模塊和系統(tǒng)仿真程序模塊,所述的數(shù)字信號(hào)處理器分別通過地址總線、數(shù)據(jù)總線連接到數(shù)據(jù)采集系統(tǒng)內(nèi)的FPGA上,F(xiàn)PGA的采集輸出端連接到USB接口芯片的數(shù)據(jù)輸入端口及寫使能上,USB接口芯片通過USB總線連接到計(jì)算機(jī)仿真系統(tǒng)的計(jì)算機(jī)上,計(jì)算機(jī)上運(yùn)行的數(shù)據(jù)接收程序模塊與系統(tǒng)仿真程序模塊連接。
本發(fā)明所產(chǎn)生的有益效果是采用數(shù)據(jù)采集系統(tǒng)直接與數(shù)字信號(hào)處理器高速數(shù)據(jù)總線相連的方式,數(shù)字信號(hào)處理器將自身的輸入數(shù)據(jù)以及其它相關(guān)運(yùn)行狀態(tài)通過數(shù)據(jù)總線發(fā)送至數(shù)據(jù)采集系統(tǒng),能夠保證采集到的數(shù)據(jù)與底層協(xié)議棧輸入數(shù)據(jù)完全一致。由于數(shù)據(jù)總線讀寫速率極高,耗時(shí)極短,因而不會(huì)對(duì)底層協(xié)議棧運(yùn)行造成影響。該系統(tǒng)適合于對(duì)底層協(xié)議棧進(jìn)行開發(fā)、調(diào)試,從而能夠達(dá)到追蹤、再現(xiàn)問題,查找程序缺陷的目的。
圖1是本發(fā)明連接原理示意圖并作為摘要附圖; 圖2是本發(fā)明工作程序流程圖; 圖3是本發(fā)明的FPGA格式轉(zhuǎn)換時(shí)序圖; 其中圖a是DSP EMIFS總線輸出時(shí)序圖;圖b是CY7C68013A GPIF輸入時(shí)序圖; 圖4是本發(fā)明系統(tǒng)仿真程序流程圖; 圖5是本發(fā)明數(shù)據(jù)接收程序模塊中的數(shù)據(jù)解析程序流程圖。
具體實(shí)施例方式 以下結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步說明。
為了滿足高速采集的需要,數(shù)據(jù)采集系統(tǒng)可以采用PCI總線、USB總線等方式與計(jì)算機(jī)相連。采用PCI總線方式的采集卡應(yīng)用比較廣泛,也有很多優(yōu)勢(shì)。但是它需要將采集卡安裝在計(jì)算機(jī)機(jī)箱內(nèi),受機(jī)箱內(nèi)部復(fù)雜的電磁波干擾比較厲害,對(duì)于無線通信系統(tǒng)來說很可能會(huì)影響其正常工作。另一方面,PCI板卡安裝和拆卸不方便,不利于對(duì)移動(dòng)終端進(jìn)行現(xiàn)場(chǎng)數(shù)據(jù)采集。USB總線方式具有即插即用、連接簡(jiǎn)便的特點(diǎn),正好可以克服上述PCI總線的缺點(diǎn),只是傳輸速率略低,理論上能夠達(dá)到480Mbit/s,但這對(duì)于大多數(shù)應(yīng)用來說已經(jīng)足夠,因而USB總線是數(shù)據(jù)采集卡與計(jì)算機(jī)比較理想的接口。
如圖1所示,本系統(tǒng)包括數(shù)字信號(hào)處理器(DSP)、數(shù)據(jù)采集系統(tǒng)和計(jì)算機(jī)仿真系統(tǒng),數(shù)據(jù)采集系統(tǒng)包括現(xiàn)場(chǎng)可編程門陣列(FPGA)和USB接口芯片以及與之對(duì)應(yīng)的FPGA程序存儲(chǔ)器和USB接口芯片程序存儲(chǔ)器,計(jì)算機(jī)仿真系統(tǒng)包括計(jì)算機(jī)以及運(yùn)行于計(jì)算機(jī)之上的數(shù)據(jù)接收程序模塊和系統(tǒng)仿真程序模塊,DSP分別通過地址總線、數(shù)據(jù)總線、片選、寫使能連接到數(shù)據(jù)采集系統(tǒng)內(nèi)的FPGA上,F(xiàn)PGA的采集輸出端連接到USB接口芯片的數(shù)據(jù)輸入端口及寫使能上,USB接口芯片通過USB總線連接到計(jì)算機(jī)仿真系統(tǒng)的計(jì)算機(jī)上,計(jì)算機(jī)上運(yùn)行的數(shù)據(jù)接收程序模塊與系統(tǒng)仿真程序模塊連接。
DSP輸出數(shù)據(jù)格式與USB接口芯片輸入數(shù)據(jù)格式不匹配,DSP輸出數(shù)據(jù)不能直接通過USB接口芯片傳輸?shù)接?jì)算機(jī)上,需要對(duì)其進(jìn)行時(shí)序、邏輯轉(zhuǎn)換,因而采用FPGA作為中間接口芯片,實(shí)現(xiàn)二者的數(shù)據(jù)匹配。
DSP的地址總線與數(shù)據(jù)總線連接到數(shù)據(jù)采集系統(tǒng)中的FPGA上,選擇一組空閑的外部總線地址空間作為采集輸出,將對(duì)應(yīng)的片選(CS)與寫使能(WE)連接到數(shù)據(jù)采集系統(tǒng)上。數(shù)據(jù)采集系統(tǒng)內(nèi)部包含F(xiàn)PGA與USB接口芯片,以及與之對(duì)應(yīng)的程序存儲(chǔ)器。系統(tǒng)上電時(shí),F(xiàn)PGA及USB程序存儲(chǔ)器將內(nèi)部存儲(chǔ)的程序上載到對(duì)應(yīng)的芯片中。FPGA與目標(biāo)終端的DSP輸出總線相連,另一端與USB接口芯片的數(shù)據(jù)輸入端口相連。USB接口芯片通過USB總線連接到計(jì)算機(jī)上,計(jì)算機(jī)仿真系統(tǒng)中的數(shù)據(jù)接收模塊通過USB總線接收數(shù)據(jù),并將接收到的數(shù)據(jù)解析、存儲(chǔ)成仿真數(shù)據(jù)文件,作為系統(tǒng)仿真模塊的輸入。
如圖2所示,系統(tǒng)工作流程包括如下步驟 (1)、目標(biāo)終端底層協(xié)議棧運(yùn)行的DSP將需要采集的各種數(shù)據(jù)通過總線發(fā)送到數(shù)據(jù)采集系統(tǒng)中的FPGA上;不同的地址用來區(qū)分不同的數(shù)據(jù)類型。
(2)、FPGA將DSP總線地址、數(shù)據(jù)格式及時(shí)序轉(zhuǎn)換成USB接口芯片的輸入格式及時(shí)序,發(fā)送到USB接口芯片的數(shù)據(jù)接收端口,并通過寫使能信號(hào)通知USB接口芯片數(shù)據(jù)已經(jīng)準(zhǔn)備好,可以接收。
(3)、USB接口芯片對(duì)FPGA發(fā)送的數(shù)據(jù)進(jìn)行緩存,并將其轉(zhuǎn)換成USB總線格式,等待計(jì)算機(jī)發(fā)送讀取指令時(shí),將數(shù)據(jù)傳送到計(jì)算機(jī)上。
(4)、計(jì)算機(jī)仿真系統(tǒng)中的數(shù)據(jù)接收模塊通過底層驅(qū)動(dòng)程序,接收USB總線數(shù)據(jù),并進(jìn)行解析,存儲(chǔ)成仿真數(shù)據(jù)文件。
(5)、系統(tǒng)仿真程序模塊以仿真數(shù)據(jù)文件作為輸入數(shù)據(jù),對(duì)DSP底層協(xié)議棧運(yùn)行狀況進(jìn)行仿真再現(xiàn),方便開發(fā)人員查找問題。
在實(shí)際應(yīng)用中,目標(biāo)終端的DSP為TI公司OMAP5910雙核處理器中的C55x系列DSP芯片,F(xiàn)PGA選擇Altera公司的EP1C3芯片,USB接口芯片采用Cypress公司的CY7C68013A芯片。DSP的低七位地址總線A0~A6,十六位數(shù)據(jù)總線(D0~D15),慢速外部存儲(chǔ)器接口(EMIFS)的片選信號(hào)CS2,寫使能(WE)信號(hào)連接到FPGA上。FPGA與CY7C68013芯片的十六位數(shù)據(jù)輸入總線(FD0~FD15)以及寫使能(RDY)相連。
CY7C68013A芯片外部通用可編程接口(GPIF)可作為數(shù)據(jù)輸入端口的僅有十六位(FD0~FD15),而DSP輸出的攜帶信息數(shù)據(jù)一共有二十三位(十六位數(shù)據(jù)線D0~D15和七位地址線A0~A6),故而需要將多出的七位地址信息嵌入到數(shù)據(jù)中去,將一個(gè)十六位數(shù)據(jù)拆分成兩個(gè),每個(gè)數(shù)據(jù)中的低八位(FD0~FD7)用于存儲(chǔ)原數(shù)據(jù)信息(D0~D7或D8~D15),高七位(FD8~FD14)存放地址類型信息(A0~A6),最高位(FD15)用于標(biāo)識(shí)當(dāng)前數(shù)據(jù)中FD0~FD7是原數(shù)據(jù)的D0~D7,還是D8~D15,具體格式如圖3中的b圖所示。CY7C68013A芯片GPIF端口使用內(nèi)部48MHz時(shí)鐘,每個(gè)GPIF信號(hào)周期為20.83ns。而FPGA為了與高速設(shè)備兼容,需要使用更高的時(shí)鐘源,二者時(shí)鐘不同步,為了保證GPIF能夠采集到RDY信號(hào),F(xiàn)PGA輸出的信號(hào)至少需要保持1.5個(gè)GPIF信號(hào)周期。GPIF每次從外部讀取數(shù)據(jù)存入FIFO需要六個(gè)狀態(tài),故而每個(gè)輸出數(shù)據(jù)間隔應(yīng)大于六個(gè)GPIF信號(hào)周期。C55xDSP主頻時(shí)鐘144MHz,與FPGA連接的為EMIFS外部總線,則FPGA轉(zhuǎn)換信號(hào)時(shí)序如圖3所示,其中a圖為DSPEMIFS輸出時(shí)序,b圖為經(jīng)FPGA轉(zhuǎn)換后的CY7C68013A芯片GPIF輸入時(shí)序及數(shù)據(jù)格式。
由于CY7C68013A芯片內(nèi)置的8051內(nèi)核時(shí)鐘周期較慢,不適于高速傳輸,因而采集程序中僅使用8051內(nèi)核時(shí)鐘進(jìn)行初始化配置,而不干預(yù)數(shù)據(jù)傳輸過程。CY7C68013A芯片通過外部GPIF讀取數(shù)據(jù),存入其內(nèi)部的先進(jìn)先出(FIFO)存儲(chǔ)器中,等待計(jì)算機(jī)從USB總線發(fā)出讀取數(shù)據(jù)的指令時(shí)將FIFO中的數(shù)據(jù)通過USB總線傳入計(jì)算機(jī)中。采用Cypress公司提供的通用程序框架以及圖形化GPIF設(shè)計(jì)工具,參照?qǐng)D3中b圖的時(shí)序,編輯GPIF波形。USB總線選擇傳輸大量數(shù)據(jù)時(shí)比較常用的批量(Bulk)傳輸模式,硬件配置程序采用Cypress公司提供的程序模板。
計(jì)算機(jī)仿真系統(tǒng)在Windows操作系統(tǒng)下運(yùn)行,其中的數(shù)據(jù)接收程序模塊包括數(shù)據(jù)接收和數(shù)據(jù)解析兩個(gè)部分,數(shù)據(jù)接收程序使用USB驅(qū)動(dòng)程序接收數(shù)據(jù),USB接口驅(qū)動(dòng)程序可直接使用Cypress公司提供的ez-usb驅(qū)動(dòng),由于ez-usb驅(qū)動(dòng)沒有提供高級(jí)的文件操作IO方式,因而需要調(diào)用比較底層的DeviceIoControl函數(shù)來處理??紤]到Bulk傳輸方式完全是由主機(jī)端(計(jì)算機(jī))發(fā)起讀操作,從機(jī)端(數(shù)據(jù)采集系統(tǒng))只能被動(dòng)的等待,而當(dāng)CY7C68013A芯片內(nèi)置的FIFO緩存寫滿之后,如果主機(jī)不能及時(shí)的發(fā)起讀操作,則FIFO不再接收數(shù)據(jù)寫入操作,因而會(huì)有少量的數(shù)據(jù)丟失,對(duì)于底層協(xié)議棧調(diào)試來說,這種少量的數(shù)據(jù)丟失可能引起程序流程錯(cuò)誤,是不能接受的。故而數(shù)據(jù)接收程序應(yīng)采用多線程處理方式,將接收USB數(shù)據(jù)的工作列為單獨(dú)的線程,并將其優(yōu)先級(jí)設(shè)置為實(shí)時(shí)性最高的THREAD_PRIORITY_TIME_CRITICAL,防止接收數(shù)據(jù)過程被系統(tǒng)中其它進(jìn)程打斷,以確保每次讀操作能夠及時(shí)發(fā)出。同時(shí)也要保證計(jì)算機(jī)操作系統(tǒng)中同時(shí)運(yùn)行的進(jìn)程盡量少,關(guān)掉不必要的后臺(tái)進(jìn)程。
數(shù)據(jù)接收程序接收到的數(shù)據(jù)先存入臨時(shí)數(shù)據(jù)文件中,以備數(shù)據(jù)解析程序使用。臨時(shí)數(shù)據(jù)文件以字(十六位)為單位存儲(chǔ),低字節(jié)在前,每個(gè)數(shù)據(jù)用兩個(gè)字來表示,與FPGA轉(zhuǎn)換后的數(shù)據(jù)格式一致,每個(gè)字的低字節(jié)存儲(chǔ)數(shù)據(jù)信息,高字節(jié)存儲(chǔ)地址信息,如表1所示。
表1臨時(shí)數(shù)據(jù)文件存儲(chǔ)格式
要想再現(xiàn)底層協(xié)議棧運(yùn)行狀態(tài),除了保證底層協(xié)議棧整體輸入、輸出一致外,最大的難度在于系統(tǒng)定時(shí),要能夠準(zhǔn)確再現(xiàn)各種事件的發(fā)生時(shí)刻?;谲浖o線電技術(shù)的數(shù)字通信系統(tǒng)大都采用過采樣方式,A/D、D/A速率都比較高而且穩(wěn)定,因而底層協(xié)議棧也大多以A/D、D/A的輸入、輸出中斷作為系統(tǒng)定時(shí)。再者通信終端作為接收機(jī)時(shí),底層協(xié)議棧需要以A/D采樣數(shù)據(jù)作為其它部分(信道估計(jì)與均衡、解調(diào)、信道解碼等)的驅(qū)動(dòng)數(shù)據(jù);作為發(fā)射機(jī)時(shí),D/A輸出數(shù)據(jù)是底層協(xié)議棧的最終輸出結(jié)果,需要仿真程序進(jìn)行驗(yàn)證。故而仿真程序可以采用A/D、D/A中斷來劃分程序運(yùn)行的最小時(shí)間片,其它各種事件的發(fā)生都通過中斷個(gè)數(shù)來記時(shí),仿真程序通過判斷A/D、D/A數(shù)據(jù)的個(gè)數(shù)來調(diào)用各程序函數(shù)來再現(xiàn)底層協(xié)議棧運(yùn)行狀況及數(shù)據(jù)流向。這樣就可以在不增加開銷的情況下,盡最大可能保證仿真程序與實(shí)際DSP中運(yùn)行的協(xié)議棧一致,方便再現(xiàn)問題。
由前所述,仿真時(shí)所用的數(shù)據(jù)需在DSP的底層協(xié)議棧代碼中輸出。首先需要輸出的為前端A/D、D/A數(shù)據(jù),以及底層協(xié)議棧與上層協(xié)議棧之間的交互數(shù)據(jù),這是底層通信協(xié)議棧接收、發(fā)射信息時(shí)所需的輸入數(shù)據(jù)與最終的輸出結(jié)果。其次,其它外圍設(shè)備產(chǎn)生的中斷和輸入數(shù)據(jù)也會(huì)影響底層協(xié)議棧流程,是仿真時(shí)所必須的部分。再次,底層協(xié)議棧各任務(wù)喚醒、掛起、運(yùn)行、結(jié)束等狀態(tài)變化需要輸出,以保證仿真程序運(yùn)行時(shí)刻與實(shí)際情況一致。另外,在兩次A/D、D/A中斷之間會(huì)發(fā)生多次變化的全局變量也需要輸出,以彌補(bǔ)時(shí)間片劃分的不足。
表1所示的接收數(shù)據(jù)不便直接用于仿真,需要進(jìn)行格式轉(zhuǎn)換。仿真時(shí)所有事件通過A/D、D/A數(shù)據(jù)記時(shí),故而除A/D、D/A數(shù)據(jù)外,其它類型數(shù)據(jù)需要記錄A/D、D/A數(shù)據(jù)個(gè)數(shù)信息,作為時(shí)間戳,因而可將所有數(shù)據(jù)分為兩大類A/D、D/A數(shù)據(jù)和非A/D、D/A數(shù)據(jù)。為了便于仿真,將這兩種類型數(shù)據(jù)分別存放于兩個(gè)文件中,作為系統(tǒng)仿真模塊的輸入文件。在解析數(shù)據(jù)時(shí),需要將為了與CY68013A芯片兼容而通過FPGA拆分開的兩個(gè)十六位數(shù)據(jù)重新合并為一個(gè),并將不同類型的數(shù)據(jù)分開。A/D、D/A數(shù)據(jù)一般長(zhǎng)度固定,由A/D、D/A轉(zhuǎn)換器分辨率(位數(shù))而定,本例中為十六位,每次中斷輸出一個(gè)數(shù)據(jù),則解析后的數(shù)據(jù)格式如表2所示。
表2A/D、D/A數(shù)據(jù)存儲(chǔ)格式
非A/D、D/A數(shù)據(jù)根據(jù)程序需求,長(zhǎng)度不固定,可在協(xié)議棧程序輸出數(shù)據(jù)中包含長(zhǎng)度信息,也可在接收程序與輸出程序中提前規(guī)定好數(shù)據(jù)長(zhǎng)度,例如非A/D、D/A數(shù)據(jù)以字為單位,數(shù)據(jù)長(zhǎng)度為N,則解析后的數(shù)據(jù)格式如表3所示。
表3非A/D、D/A數(shù)據(jù)存儲(chǔ)格式
由于底層協(xié)議棧需要兼顧外圍硬件控制,各種外部中斷比較多,很可能會(huì)打斷數(shù)據(jù)輸出,因而在解析數(shù)據(jù)時(shí),需要考慮各種數(shù)據(jù)之間的嵌套。為此可以對(duì)每種數(shù)據(jù)采用單獨(dú)的緩沖區(qū),待解析到一條完整數(shù)據(jù)之后再存入文件中,同時(shí)還要保證文件中各種非A/D、D/A數(shù)據(jù)按照發(fā)生時(shí)間的先后順序排列。
如圖5所示,數(shù)據(jù)接收程序模塊的數(shù)據(jù)解析程序包括如下步驟 (1)、首先在臨時(shí)數(shù)據(jù)文件中讀取一個(gè)字,判斷最高位是否為1,若不為1,表示此數(shù)據(jù)低八位存儲(chǔ)的是DSP發(fā)送的數(shù)據(jù)D0~D7,按照表1的存儲(chǔ)格式,此時(shí)只收到一個(gè)數(shù)據(jù)中的第一個(gè)字(每個(gè)數(shù)據(jù)包含兩個(gè)字),需要將其緩存;若最高位為1,則表示此數(shù)據(jù)低八位存儲(chǔ)的是DSP發(fā)送數(shù)據(jù)的D8~D15,按照表1的存儲(chǔ)格式,此時(shí)已經(jīng)收全了一個(gè)數(shù)據(jù)中的兩個(gè)字,需要將二者低八位合并為原始數(shù)據(jù)。將當(dāng)前字最高位置0之后,則高八位僅表示數(shù)據(jù)類型信息A0~A6。
(2)、在緩沖區(qū)中從后向前搜索,是否找到高八位相同的數(shù)據(jù),若找到,將當(dāng)前低八位數(shù)據(jù)與找到的高八位數(shù)據(jù)合并為原始數(shù)據(jù),并記錄類型信息;若未找到,則表明當(dāng)前數(shù)據(jù)或之前緩沖的數(shù)據(jù)中有錯(cuò)誤發(fā)生,此時(shí)應(yīng)報(bào)告錯(cuò)誤信息。
(3)、判斷已經(jīng)合并好的數(shù)據(jù)類型是否為A/D、D/A數(shù)據(jù),若為A/D、D/A數(shù)據(jù),則存入A/D、D/A數(shù)據(jù)文件中,并將計(jì)數(shù)值加1;若為其它類型數(shù)據(jù),則根據(jù)當(dāng)前類型信息,查找與之匹配的緩沖區(qū)中是否已有數(shù)據(jù)存在,若已有數(shù)據(jù)存在,則將數(shù)據(jù)存入本類型緩沖區(qū);說明此條數(shù)據(jù)正在發(fā)送過程中,判斷已存在的數(shù)據(jù)個(gè)數(shù)是否已經(jīng)達(dá)到此類型數(shù)據(jù)定義的長(zhǎng)度,若已收到一條完整數(shù)據(jù),則將此條完整信息封存。若緩沖區(qū)中沒有數(shù)據(jù)存在,則說明當(dāng)前數(shù)據(jù)為新的一條數(shù)據(jù)的開始,此時(shí)應(yīng)開啟新的緩沖區(qū)用來存儲(chǔ)后來收到的同一類型數(shù)據(jù),并記錄當(dāng)前的A/D、D/A計(jì)數(shù)值,以此作為本條信息的開始時(shí)間。
(4)、對(duì)已經(jīng)封存的完整非A/D、D/A數(shù)據(jù)信息,需要按照時(shí)間發(fā)生的先后順序,存入數(shù)據(jù)文件中。由于底層協(xié)議棧中斷比較多,很有可能在發(fā)送仿真數(shù)據(jù)時(shí)被中斷打斷,同時(shí)在中斷服務(wù)程序中需要發(fā)送另一類型的數(shù)據(jù),這樣就會(huì)造成某一條數(shù)據(jù)信息中插入其它類型數(shù)據(jù)。為了對(duì)這種情況進(jìn)行正確解析,在收到一條完整非A/D、D/A數(shù)據(jù)之后,需要在所有正在處理的數(shù)據(jù)信息(包括已封存的完整數(shù)據(jù)和正在緩沖的不完整數(shù)據(jù))中進(jìn)行搜索,查找當(dāng)前數(shù)據(jù)是否為最早的數(shù)據(jù)信息,如果是,則將當(dāng)前數(shù)據(jù)存入非A/D、D/A數(shù)據(jù)文件中。之后繼續(xù)搜索已經(jīng)封存的完整數(shù)據(jù),查找是否有完整數(shù)據(jù)的起始時(shí)刻在剩余的正在處理數(shù)據(jù)中最早,將此條信息數(shù)據(jù)接著存入非A/D、D/A數(shù)據(jù)文件中,如此反復(fù)搜索,直到所有完整數(shù)據(jù)信息搜索完畢,此時(shí)完成一個(gè)解析過程,之后在臨時(shí)文件中讀取下一個(gè)數(shù)據(jù),開始一個(gè)新的解析過程,之后重復(fù)(1)~(4),如此往復(fù)直至臨時(shí)數(shù)據(jù)文件解析完畢,解析程序結(jié)束。
系統(tǒng)仿真模塊使用解析程序輸出的仿真數(shù)據(jù)文件對(duì)底層協(xié)議棧運(yùn)行情況進(jìn)行仿真再現(xiàn)。系統(tǒng)仿真之前,首先要將運(yùn)行于DSP中的底層協(xié)議棧代碼轉(zhuǎn)換為計(jì)算機(jī)上可運(yùn)行的代碼,一般DSP大多采用C語言和匯編語言相結(jié)合的方式進(jìn)行開發(fā),C代碼基本上不需進(jìn)行大量修改,匯編代碼需要根據(jù)其工作原理,轉(zhuǎn)譯成C代碼。系統(tǒng)仿真時(shí)以A/D、D/A數(shù)據(jù)為驅(qū)動(dòng),通過判斷非A/D、D/A數(shù)據(jù)的發(fā)生時(shí)刻(A/D、D/A數(shù)據(jù)計(jì)數(shù)值)來調(diào)動(dòng)底層協(xié)議棧各部分任務(wù)運(yùn)行,以達(dá)到再現(xiàn)協(xié)議棧運(yùn)行狀況,調(diào)試程序的目的。
如圖4所示,系統(tǒng)仿真模塊的仿真程序包括以下步驟 (1)、首先讀取一條非A/D、D/A數(shù)據(jù),記錄當(dāng)前數(shù)據(jù)的發(fā)生時(shí)刻; (2)、讀取一個(gè)A/D、D/A數(shù)據(jù),并進(jìn)行相關(guān)的處理,之后判斷是否達(dá)到非A/D、D/A數(shù)據(jù)的發(fā)生時(shí)刻,若未達(dá)到,則繼續(xù)讀取下一個(gè)A/D、D/A數(shù)據(jù),直到到達(dá)非A/D、D/A數(shù)據(jù)發(fā)生時(shí)刻為止;若已達(dá)到,則分析本條非A/D、D/A數(shù)據(jù)類型,并進(jìn)行相關(guān)處理。分析非A/D、D/A數(shù)據(jù)的內(nèi)容,調(diào)用協(xié)議棧相關(guān)程序處理本條數(shù)據(jù)。此時(shí)完成一個(gè)處理過程,之后再讀取下一條非A/D、D/A數(shù)據(jù),重復(fù)(1)~(2)步驟,直到非A/D、D/A數(shù)據(jù)文件處理完畢。
應(yīng)用效果舉例例如大多數(shù)通信系統(tǒng)都會(huì)用到卷積碼進(jìn)行前向糾錯(cuò)編碼,解碼時(shí)需要采用維特比譯碼算法,計(jì)算路徑度量,保留殘留路徑,若殘留路徑選擇錯(cuò)誤,則可能導(dǎo)致譯碼錯(cuò)誤。采用本系統(tǒng)進(jìn)行調(diào)試時(shí),可在終端協(xié)議棧程序中輸出維特比譯碼輸入數(shù)據(jù),以及每一條路徑的度量值和殘留路徑選擇結(jié)果,在仿真系統(tǒng)中對(duì)輸入數(shù)據(jù)進(jìn)行相同的譯碼運(yùn)算,對(duì)比接收到的路徑度量值和殘留路徑選擇結(jié)果,若發(fā)現(xiàn)不一致,則可以確定在哪一步,哪一個(gè)比特譯碼時(shí)出現(xiàn)問題,這樣有利于開發(fā)人員發(fā)現(xiàn)協(xié)議棧程序中的錯(cuò)誤,能夠快速、準(zhǔn)確定位問題,可以提高開發(fā)效率。又如有些硬件操作需要底層協(xié)議??刂?,仿真時(shí)可以按照“[發(fā)生時(shí)間]硬件操作內(nèi)容”的格式寫到文件中,作為仿真程序的輸出,這樣通過查詢輸出文件,各種硬件操作的先后關(guān)系一目了然,更形象化,有利于發(fā)現(xiàn)硬件控制上的邏輯錯(cuò)誤。
權(quán)利要求
1.一種適于數(shù)字通信終端底層協(xié)議棧的數(shù)據(jù)采集與仿真系統(tǒng),其特征在于包括數(shù)字信號(hào)處理器、數(shù)據(jù)采集系統(tǒng)和計(jì)算機(jī)仿真系統(tǒng),數(shù)據(jù)采集系統(tǒng)包括FPGA和USB接口芯片以及與之對(duì)應(yīng)的FPGA程序存儲(chǔ)器和USB接口芯片程序存儲(chǔ)器,計(jì)算機(jī)仿真系統(tǒng)包括計(jì)算機(jī)以及運(yùn)行于計(jì)算機(jī)之上的數(shù)據(jù)接收程序模塊和系統(tǒng)仿真程序模塊,所述的數(shù)字信號(hào)處理器分別通過地址總線、數(shù)據(jù)總線、片選、寫使能連接到數(shù)據(jù)采集系統(tǒng)內(nèi)的FPGA上,F(xiàn)PGA的采集輸出端連接到USB接口芯片的數(shù)據(jù)輸入端口及寫使能上,USB接口芯片通過USB總線連接到計(jì)算機(jī)仿真系統(tǒng)的計(jì)算機(jī)上,計(jì)算機(jī)上運(yùn)行的數(shù)據(jù)接收程序模塊與系統(tǒng)仿真程序模塊連接。
2.根據(jù)權(quán)利要求1所述的適于數(shù)字通信終端底層協(xié)議棧的數(shù)據(jù)采集與仿真系統(tǒng),其特征在于系統(tǒng)工作流程包括如下步驟
(1)、數(shù)字信號(hào)處理器將需要采集的各種數(shù)據(jù)通過總線發(fā)送到數(shù)據(jù)采集系統(tǒng)中的FPGA上;
(2)、FPGA將數(shù)字信號(hào)處理器總線的地址、數(shù)據(jù)格式及時(shí)序轉(zhuǎn)換成USB接口芯片的輸入格式及時(shí)序,發(fā)送到USB接口芯片的數(shù)據(jù)接收端口,并通過寫使能信號(hào)通知USB接口芯片數(shù)據(jù)已經(jīng)準(zhǔn)備好,可以接收;
(3)、USB接口芯片對(duì)FPGA發(fā)送的數(shù)據(jù)進(jìn)行緩存,并將其轉(zhuǎn)換成USB總線格式,等待計(jì)算機(jī)發(fā)送讀取指令時(shí),將數(shù)據(jù)傳送到計(jì)算機(jī)上;
(4)、計(jì)算機(jī)仿真系統(tǒng)中的數(shù)據(jù)接收程序模塊通過底層驅(qū)動(dòng)程序,接收USB總線數(shù)據(jù),并進(jìn)行解析,存儲(chǔ)成仿真數(shù)據(jù)文件;
(5)、系統(tǒng)仿真程序模塊以仿真數(shù)據(jù)文件作為輸入數(shù)據(jù),對(duì)數(shù)字信號(hào)處理器底層協(xié)議棧運(yùn)行狀況進(jìn)行仿真再現(xiàn)。
3.根據(jù)權(quán)利要求1或2所述的適于數(shù)字通信終端底層協(xié)議棧的數(shù)據(jù)采集與仿真系統(tǒng),其特征在于數(shù)據(jù)接收程序模塊中的數(shù)據(jù)解析程序包括如下步驟
(1)、首先在臨時(shí)數(shù)據(jù)文件中讀取一個(gè)字,判斷最高位是否為1,若不為1,將其緩存;若最高位為1,則將當(dāng)前字最高位置0;
(2)、在緩沖區(qū)中是否找到高八位相同的數(shù)據(jù),若找到,將當(dāng)前數(shù)據(jù)低八位數(shù)據(jù)與找到數(shù)據(jù)的低八位數(shù)據(jù)合并為原始數(shù)據(jù),并記錄類型信息;若未找到,則報(bào)告錯(cuò)誤信息;
(3)、判斷已經(jīng)合并好的數(shù)據(jù)類型是否為A/D、D/A數(shù)據(jù),若為A/D、D/A數(shù)據(jù),則存入A/D、D/A數(shù)據(jù)文件中,并將計(jì)數(shù)值加1;若為其它類型數(shù)據(jù),則根據(jù)當(dāng)前類型信息,查找與之匹配的緩沖區(qū)中是否已有數(shù)據(jù)存在,若已有數(shù)據(jù)存在,則將數(shù)據(jù)存入本類型緩沖區(qū);若緩沖區(qū)中沒有數(shù)據(jù)存在,則開啟新的緩沖區(qū),并記錄當(dāng)前的A/D、D/A計(jì)數(shù)值;
(4)、在收到一條完整非A/D、D/A數(shù)據(jù)之后,在所有正在處理的數(shù)據(jù)信息中進(jìn)行搜索,查找當(dāng)前數(shù)據(jù)是否為最早的數(shù)據(jù)信息,如果是,則將當(dāng)前數(shù)據(jù)存入非A/D、D/A數(shù)據(jù)文件中,之后繼續(xù)搜索已經(jīng)封存的完整數(shù)據(jù),查找是否有完整數(shù)據(jù)的起始時(shí)刻在剩余的正在處理數(shù)據(jù)中最早,將此條信息數(shù)據(jù)接著存入非A/D、D/A數(shù)據(jù)文件中,如此反復(fù)搜索,直到所有完整數(shù)據(jù)信息搜索完畢,之后重復(fù)(1)~(4)的步驟,直至臨時(shí)數(shù)據(jù)文件解析完畢。
4.根據(jù)權(quán)利要求1或2所述的適于數(shù)字通信終端底層協(xié)議棧的數(shù)據(jù)采集與仿真系統(tǒng),其特征在于系統(tǒng)仿真程序模塊包括以下步驟
(1)、首先讀取一條非A/D、D/A數(shù)據(jù),記錄當(dāng)前數(shù)據(jù)的發(fā)生時(shí)刻;
(2)、讀取一個(gè)A/D、D/A數(shù)據(jù),之后判斷是否達(dá)到非A/D、D/A數(shù)據(jù)的發(fā)生時(shí)刻,若未達(dá)到,則繼續(xù)讀取下一個(gè)A/D、D/A數(shù)據(jù),若已達(dá)到,則分析本條非A/D、D/A數(shù)據(jù)類型,調(diào)用底層協(xié)議棧的仿真程序進(jìn)行相關(guān)處理,之后重復(fù)(1)~(2)的步驟,直至非A/D、D/A仿真數(shù)據(jù)文件處理完畢。
全文摘要
本發(fā)明涉及一種適于數(shù)字通信終端底層協(xié)議棧的數(shù)據(jù)采集與仿真系統(tǒng)。該系統(tǒng)包括DSP、數(shù)據(jù)采集系統(tǒng)和計(jì)算機(jī)仿真系統(tǒng),數(shù)據(jù)采集系統(tǒng)包括FPGA和USB接口芯片以及與之對(duì)應(yīng)的存儲(chǔ)器,計(jì)算機(jī)仿真系統(tǒng)包括計(jì)算機(jī)以及運(yùn)行于計(jì)算機(jī)之上的數(shù)據(jù)接收程序模塊和系統(tǒng)仿真程序模塊,DSP分別通過地址總線、數(shù)據(jù)總線、片選、寫使能連接到FPGA上,F(xiàn)PGA的采集輸出端連接到USB接口芯片的數(shù)據(jù)輸入端,USB接口芯片通過USB總線連接到計(jì)算機(jī)上。采用數(shù)據(jù)采集系統(tǒng)直接與DSP高速數(shù)據(jù)總線相連的方式,能夠保證采集到的數(shù)據(jù)與底層協(xié)議棧輸入數(shù)據(jù)完全一致。由于數(shù)據(jù)總線讀寫速率極高,耗時(shí)極短,因而不會(huì)對(duì)底層協(xié)議棧運(yùn)行造成影響。該系統(tǒng)適于對(duì)底層協(xié)議棧進(jìn)行開發(fā)、調(diào)試,從而達(dá)到追蹤、再現(xiàn)問題,查找程序缺陷的目的。
文檔編號(hào)G06F11/36GK101770424SQ20101003130
公開日2010年7月7日 申請(qǐng)日期2010年1月5日 優(yōu)先權(quán)日2010年1月5日
發(fā)明者黃建堯, 肖文雄, 王長(zhǎng)嵩, 吳華榮, 侯運(yùn)林 申請(qǐng)人:天津七一二通信廣播有限公司