本發(fā)明涉及虛擬無線電數(shù)據(jù)同步的技術(shù)領(lǐng)域,特別是涉及一種基于輪詢/中斷的實(shí)時(shí)虛擬無線電數(shù)據(jù)的同步方法。
背景技術(shù):
硬件與PC中的應(yīng)用程序之間的數(shù)據(jù)同步問題是虛擬無線電系統(tǒng)的難點(diǎn)之一。目前,有輪詢和中斷兩種數(shù)據(jù)同步方法?,F(xiàn)有技術(shù)中,最常用的是基于輪詢的數(shù)據(jù)同步方法,如為申請?zhí)?01410484793.9,發(fā)明名稱是《基于RTX實(shí)施擴(kuò)展子系統(tǒng)的PCI總線數(shù)據(jù)同步方法》的中國發(fā)明專利中公開一種基于RTX實(shí)時(shí)擴(kuò)展子系統(tǒng)的PCI總線數(shù)據(jù)同步方法,包括以下步驟,步驟(1)、將上位機(jī)安裝XP操作系統(tǒng)、下位機(jī)安裝RTX實(shí)時(shí)擴(kuò)展子系統(tǒng);步驟(2)、將RTX實(shí)時(shí)擴(kuò)展子系統(tǒng)內(nèi)開發(fā)PCI設(shè)備的驅(qū)動(dòng),以便進(jìn)行PCI總線上的實(shí)時(shí)數(shù)據(jù)傳輸,數(shù)據(jù)傳輸采用DMA模式;步驟(3)、在RTX實(shí)時(shí)擴(kuò)展子系統(tǒng)內(nèi)的PCI設(shè)備的驅(qū)動(dòng)中建立軟中斷機(jī)制;步驟(4)、上位機(jī)的XP操作系統(tǒng)與下位機(jī)的RTX實(shí)時(shí)擴(kuò)展子系統(tǒng),根據(jù)建立的建立軟中斷機(jī)制,實(shí)現(xiàn)數(shù)據(jù)同步通信。但是該方法中,RTX需要不斷輪詢底層硬件的標(biāo)志,本質(zhì)上還是輪詢的方式,沒有充分發(fā)揮RTX的實(shí)時(shí)特性。
基于中斷的數(shù)據(jù)同步方法是通過開發(fā)PC中的驅(qū)動(dòng)程序?qū)崿F(xiàn)的。如申請?zhí)枮?01210004050.8,發(fā)明名稱為《軟件無線電系統(tǒng)中基于PCI總線的數(shù)據(jù)同步方法及系統(tǒng)》的中國發(fā)明專利公開一種軟件無線電系統(tǒng)中基于PCI總線的數(shù)據(jù)同步方法,所述軟件無線電系統(tǒng)包括處理器模塊、射頻模塊和連接在所述處理器模塊和所述射頻模塊之間的接口控制模塊,其中,所述處理器模塊和所述接口控制模塊之間通過PCI總線相連,所述方法包括以下步驟:所述接口控制模塊根據(jù)所述射頻模塊的時(shí)鐘生成時(shí)間信息;所述接口控制模塊根據(jù)所述時(shí)間信息產(chǎn)生中斷,并通過所述PCI總線向所述處理器模塊發(fā)送中斷信號;所述處理器模塊的中斷響應(yīng)程序根據(jù)所述中斷信號接收所述時(shí)間信息,并觸發(fā)軟件無線電系統(tǒng)中相應(yīng)的無線系統(tǒng)物理層調(diào)制或解調(diào)程序以及高層協(xié)議棧程序,并根據(jù)所述時(shí)間信息進(jìn)行處理;通過所述PCI總線完成相應(yīng)數(shù)據(jù)的讀和/或?qū)懖僮?,并在所述接口控制模塊進(jìn)行緩存,以根據(jù)所述時(shí)間信息通過所述射頻模塊完成數(shù)據(jù)的接收和/或發(fā)送。該方法的優(yōu)點(diǎn)是能夠顯著提高處理器的利用率;缺點(diǎn)是實(shí)現(xiàn)復(fù)雜,由于在通用操作系統(tǒng)下實(shí)現(xiàn),容易被硬件中斷和高優(yōu)先級的線程中斷,無法提供實(shí)時(shí)的數(shù)據(jù)同步。
技術(shù)實(shí)現(xiàn)要素:
鑒于以上所述現(xiàn)有技術(shù)的缺點(diǎn),本發(fā)明的目的在于提供一種基于輪詢/中斷的實(shí)時(shí)虛擬無線電數(shù)據(jù)的同步方法,用于解決基于RTX和Windows的虛擬無線電系統(tǒng)中主機(jī)(PC)與射頻板卡(RCB)之間數(shù)據(jù)同步問題。
為實(shí)現(xiàn)上述目的及其他相關(guān)目的,本發(fā)明提供一種基于輪詢的實(shí)時(shí)虛擬無線電數(shù)據(jù)的同步方法,PC中的環(huán)形隊(duì)列用于存儲(chǔ)若干個(gè)BLOCK數(shù)據(jù)塊,每個(gè)BLOCK數(shù)據(jù)塊包括32對IQ兩路采樣數(shù)據(jù),每一路數(shù)據(jù)的最后一個(gè)無效位組成信息位;第一個(gè)信息位是標(biāo)志位,表示數(shù)據(jù)是否有效,第二個(gè)信息位是天線號,用于表明發(fā)送/接收數(shù)據(jù)的天線;最后一個(gè)信息位是時(shí)間戳,用于在接收數(shù)據(jù)時(shí)記錄采樣的時(shí)間點(diǎn);
所述基于輪詢的實(shí)時(shí)虛擬無線電數(shù)據(jù)的同步方法包括以下步驟:步驟S11、虛擬無線電系統(tǒng)中物理層狀態(tài)機(jī)根據(jù)收發(fā)指令,在PCI設(shè)備中的相關(guān)FPGA中的寄存器中寫入收發(fā)指令;步驟S12、PCI設(shè)備中的FPGA檢測寄存器中的指令,判斷為發(fā)送指令還是接收指令;若是接收指令,轉(zhuǎn)入步驟S13;若是發(fā)送指令,轉(zhuǎn)入步驟S14;步驟S13、FPGA接收數(shù)據(jù)并將接收的數(shù)據(jù)傳輸?shù)絇C中的環(huán)形隊(duì)列中,并在接收的數(shù)據(jù)大小首次超過一個(gè)BLOCK數(shù)據(jù)塊的大小時(shí)觸發(fā)中斷;PC響應(yīng)該中斷,開啟輪詢線程,不斷輪詢環(huán)形隊(duì)列,讀取環(huán)形隊(duì)列中的有效數(shù)據(jù)并傳遞到下一個(gè)通信模塊或者上層協(xié)議進(jìn)行后續(xù)的處理;步驟S14、每當(dāng)環(huán)形隊(duì)列中存儲(chǔ)N個(gè)有效BLOCK數(shù)據(jù)塊時(shí),PC就在FPGA中寫入一個(gè)標(biāo)志;FPGA根據(jù)該標(biāo)志,將PC中的環(huán)形隊(duì)列中的有效數(shù)據(jù)讀取到FPGA中的DMA數(shù)據(jù)區(qū),并在規(guī)定時(shí)間發(fā)送反饋幀。
根據(jù)上述的基于輪詢的實(shí)時(shí)虛擬無線電數(shù)據(jù)的同步方法,其中:每一個(gè)BLOCK數(shù)據(jù)塊的大小為128Bytes,采樣的位寬是16bits。
根據(jù)上述的基于輪詢的實(shí)時(shí)虛擬無線電數(shù)據(jù)的同步方法,其中:所述步驟S13中,F(xiàn)PGA將接收的數(shù)據(jù)打包成BLOCK數(shù)據(jù)塊,并設(shè)置每一個(gè)BLOCK的第一個(gè)I路的最后一位為0,同時(shí)設(shè)置BLOCK數(shù)據(jù)塊的天線號和時(shí)間戳。
根據(jù)上述的基于輪詢的實(shí)時(shí)虛擬無線電數(shù)據(jù)的同步方法,其中:所述環(huán)形隊(duì)列初始化時(shí)全部位都為1;所述步驟S13中,在讀取環(huán)形隊(duì)列中BLOCK數(shù)據(jù)塊的數(shù)據(jù)后,將BLOCK數(shù)據(jù)塊的所有位設(shè)置為1。
根據(jù)上述的基于輪詢的實(shí)時(shí)虛擬無線電數(shù)據(jù)的同步方法,其中:PC和FPGA中分別設(shè)定有超時(shí)時(shí)間T;如果FPGA在超時(shí)時(shí)間T內(nèi)檢測不到數(shù)據(jù),就停止接收數(shù)據(jù);如果PC在超時(shí)時(shí)間T內(nèi)檢測不到數(shù)據(jù),則中斷輪詢線程。
同時(shí),本發(fā)明還提供一種基于中斷的實(shí)時(shí)虛擬無線電數(shù)據(jù)的同步方法,PC中的環(huán)形隊(duì)列 用于存儲(chǔ)若干個(gè)BLOCK數(shù)據(jù)塊,每個(gè)BLOCK數(shù)據(jù)塊包括32對IQ兩路采樣數(shù)據(jù),每一路數(shù)據(jù)的最后一個(gè)無效位組成信息位;第一個(gè)信息位是標(biāo)志位,表示數(shù)據(jù)是否有效,第二個(gè)信息位是天線號,用于表明發(fā)送/接收數(shù)據(jù)的天線;最后一個(gè)信息位是時(shí)間戳,用于在接收數(shù)據(jù)時(shí)記錄采樣的時(shí)間點(diǎn);
所述基于中斷的實(shí)時(shí)虛擬無線電數(shù)據(jù)的同步方法包括以下步驟:
步驟S21、虛擬無線電系統(tǒng)中物理層狀態(tài)機(jī)根據(jù)收發(fā)指令,向PCI設(shè)備中的相關(guān)FPGA的寄存器中寫入收發(fā)指令,并設(shè)置中斷間隔;
步驟S22、PCI設(shè)備中的FPGA檢測寄存器中的指令,判斷為發(fā)送指令還是接收指令;若是接收指令,轉(zhuǎn)入步驟S23;若是發(fā)送指令,轉(zhuǎn)入步驟S24;
步驟S23、FPGA接收數(shù)據(jù)并將接收的數(shù)據(jù)傳輸?shù)絇C中的環(huán)形隊(duì)列中,并當(dāng)接收的數(shù)據(jù)達(dá)到設(shè)定的中斷間隔時(shí),觸發(fā)中斷;PC響應(yīng)該中斷,并讀取環(huán)形隊(duì)列中的有效數(shù)據(jù),傳輸?shù)较乱粋€(gè)通信模塊或者上層協(xié)議進(jìn)行后續(xù)處理;
步驟S24、每當(dāng)環(huán)形隊(duì)列中存儲(chǔ)N個(gè)有效數(shù)據(jù)塊時(shí),PC就在FPGA中寫入一個(gè)標(biāo)志;FPGA根據(jù)該標(biāo)志,將PC中的環(huán)形隊(duì)列中的有效數(shù)據(jù)讀取到FPGA中的DMA數(shù)據(jù)區(qū),并在規(guī)定時(shí)間發(fā)送反饋幀。
根據(jù)上述的基于中斷的實(shí)時(shí)虛擬無線電數(shù)據(jù)的同步方法,其中:每一個(gè)BLOCK數(shù)據(jù)塊的大小為128Bytes,采樣的位寬是16bits。
根據(jù)上述的基于中斷的實(shí)時(shí)虛擬無線電數(shù)據(jù)的同步方法,其中:所述中斷間隔為100個(gè)BLOCK數(shù)據(jù)塊的大小。
根據(jù)上述的基于中斷的實(shí)時(shí)虛擬無線電數(shù)據(jù)的同步方法,其中:所述步驟S23中,F(xiàn)PGA將接收的數(shù)據(jù)打包成BLOCK數(shù)據(jù)塊,并設(shè)置每一個(gè)BLOCK的第一個(gè)I路的最后一位為0;同時(shí)設(shè)置該BLOCK數(shù)據(jù)塊的天線號和時(shí)間戳。
根據(jù)上述的基于中斷的實(shí)時(shí)虛擬無線電數(shù)據(jù)的同步方法,其中:環(huán)形隊(duì)列在初始化時(shí)全部位都為1;所述步驟S23中,從環(huán)形隊(duì)列中讀取BLOCK數(shù)據(jù)塊中的有效數(shù)據(jù)后,將BLOCK數(shù)據(jù)塊的所有位設(shè)置為1。
如上所述,本發(fā)明的基于輪詢/中斷的實(shí)時(shí)虛擬無線電數(shù)據(jù)的同步方法中:
基于輪詢的數(shù)據(jù)同步方式有以下有益的技術(shù)效果:
(11)輪詢線程基于實(shí)時(shí)操作系統(tǒng)RTX(Real Time eXtension)實(shí)現(xiàn),能夠屏蔽所有的Windows硬件中斷和高優(yōu)先級的中斷,從而減少輪詢線程被掛起的概率,進(jìn)而減少有效數(shù)據(jù)被覆蓋的可能;
(12)在輪詢查詢和讀取數(shù)據(jù)時(shí),設(shè)置超時(shí)時(shí)間,若在超時(shí)時(shí)間內(nèi),輪詢線程查詢不到數(shù)據(jù),則終止該線程,從而顯著提高了CPU的利用率;
(13)設(shè)計(jì)了一種BLOCK的數(shù)據(jù)結(jié)構(gòu),其中的時(shí)間戳記錄了接收數(shù)據(jù)的采樣時(shí)間點(diǎn),如果需要在規(guī)定時(shí)間內(nèi)發(fā)送反饋幀,可以根據(jù)最后一個(gè)接收數(shù)據(jù)的時(shí)間戳計(jì)算發(fā)送反饋幀的時(shí)間,并將該時(shí)間點(diǎn)和反饋幀傳給FPGA,等待發(fā)送,從而提高了系統(tǒng)的實(shí)時(shí)性。
基于中斷的數(shù)據(jù)同步方式有以下有益的技術(shù)效果:
(21)充分利用RTX的實(shí)時(shí)特性,基于中斷實(shí)現(xiàn)數(shù)據(jù)同步,明顯提高CPU的處理效率;
(22)通過設(shè)定中斷間隔,可以兼容不同的通信協(xié)議對數(shù)據(jù)處理的要求;
(23)RTX中的中斷延時(shí)在微秒級,并且RTX的中斷服務(wù)例程具有較高的優(yōu)先級,從而顯著提高數(shù)據(jù)同步的實(shí)時(shí)性;
(24)設(shè)計(jì)了一種BLOCK的數(shù)據(jù)結(jié)構(gòu),通過記錄接收的最后一個(gè)BLOCK的時(shí)間戳,計(jì)算出待發(fā)送的反饋幀的發(fā)送時(shí)間,并將該時(shí)間傳遞給FPGA,F(xiàn)PGA在發(fā)送的時(shí)間點(diǎn)上發(fā)送反饋幀,從而滿足協(xié)議規(guī)定的實(shí)時(shí)性。
附圖說明
圖1顯示為現(xiàn)有技術(shù)中的基于RTX的虛擬無線電系統(tǒng)的結(jié)構(gòu)示意圖;
圖2顯示為本發(fā)明的PC和RCB之間的數(shù)據(jù)同步的結(jié)構(gòu)示意圖;
圖3顯示為本發(fā)明的BLOCK數(shù)據(jù)塊的結(jié)構(gòu)示意圖;
圖4顯示為本發(fā)明的基于輪詢的實(shí)時(shí)虛擬無線電數(shù)據(jù)的同步方法的流程圖;
圖5顯示為本發(fā)明的基于中斷的實(shí)時(shí)虛擬無線電數(shù)據(jù)的同步方法的流程圖。
具體實(shí)施方式
以下通過特定的具體實(shí)例說明本發(fā)明的實(shí)施方式,本領(lǐng)域技術(shù)人員可由本說明書所揭露的內(nèi)容輕易地了解本發(fā)明的其他優(yōu)點(diǎn)與功效。本發(fā)明還可以通過另外不同的具體實(shí)施方式加以實(shí)施或應(yīng)用,本說明書中的各項(xiàng)細(xì)節(jié)也可以基于不同觀點(diǎn)與應(yīng)用,在沒有背離本發(fā)明的精神下進(jìn)行各種修飾或改變。
需要說明的是,本實(shí)施例中所提供的圖示僅以示意方式說明本發(fā)明的基本構(gòu)想,遂圖式中僅顯示與本發(fā)明中有關(guān)的組件而非按照實(shí)際實(shí)施時(shí)的組件數(shù)目、形狀及尺寸繪制,其實(shí)際實(shí)施時(shí)各組件的型態(tài)、數(shù)量及比例可為一種隨意的改變,且其組件布局型態(tài)也可能更為復(fù)雜。
如圖1所示,在虛擬無線電系統(tǒng)的實(shí)現(xiàn)架構(gòu)中,硬件部分(如RCB)和RTX中的應(yīng)用程序之間的數(shù)據(jù)同步是該架構(gòu)的技術(shù)難點(diǎn)之一。PC和RCB之間的數(shù)據(jù)同步問題是指RCB和 PC中的數(shù)據(jù)交互問題,包括接收過程中將RCB接收后的數(shù)據(jù)傳遞給PC中的應(yīng)用程序以待后續(xù)處理,以及發(fā)送過程中將PC中的應(yīng)用程序處理后的數(shù)據(jù)發(fā)送到RCB中,以待發(fā)送。RCB中的主要功能是由FPGA實(shí)現(xiàn)的。因此,本發(fā)明所涉及的PC與RCB的數(shù)據(jù)同步也就是PC和FPGA的數(shù)據(jù)同步。
在虛擬無線電系統(tǒng)中,RCB和PC之間的數(shù)據(jù)同步結(jié)構(gòu)如圖2所示。具體地,RCB利用DMA的方式,將天線上接收到的數(shù)據(jù)通過PCI總線傳輸?shù)絇C中的環(huán)形隊(duì)列中;同時(shí),PC中虛擬無線電上層協(xié)議處理后的數(shù)據(jù)存到環(huán)形隊(duì)列中,然后通過DMA的方式傳輸?shù)絉CB中。
為了實(shí)現(xiàn)基于RTX和Windows的虛擬無線電系統(tǒng)中PC與RCB之間數(shù)據(jù)同步問題,本發(fā)明設(shè)計(jì)了一種數(shù)據(jù)塊結(jié)構(gòu)BLOCK,BLOCK數(shù)據(jù)塊的大小可以根據(jù)需要設(shè)定。由于PC和射頻板卡之間的數(shù)據(jù)傳輸是通過PCI總線實(shí)現(xiàn),而PCI總線的數(shù)據(jù)傳輸是按照TLP(交換層信息包)格式傳輸?shù)?。PCI規(guī)定TLP的大小為64—1024Bytes,而PC中處理通過PCI總線傳輸過來的數(shù)據(jù)是以128Bytes為單位進(jìn)行的。因此,本發(fā)明設(shè)定一個(gè)BLOCK數(shù)據(jù)塊的大小為128Bytes。在虛擬無線電系統(tǒng)中,采樣的位寬是16bits,分為IQ兩路。因此,在虛擬無線電系統(tǒng)中以(128*8)/(16*2)=32個(gè)采樣點(diǎn)來打包成BLOCK數(shù)據(jù)塊。BLOCK數(shù)據(jù)塊的格式如圖3所示。
具體地,對于每一個(gè)BLOCK數(shù)據(jù)塊的結(jié)構(gòu)如下:
1、每一個(gè)BLOCK數(shù)據(jù)塊包括32對IQ采樣數(shù)據(jù),采樣的位寬是16bits,BLOCK數(shù)據(jù)塊的大小為128Bytes。
2、無論是I路還是Q路,有效的位寬是12bits或14bits。
3、在每一個(gè)BLOCK數(shù)據(jù)塊內(nèi),取每一路數(shù)據(jù)的最后一個(gè)無效位組成信息位;其中第一個(gè)信息位是標(biāo)志位,占1bit,0表示數(shù)據(jù)有效,1表示數(shù)據(jù)無效;第二個(gè)信息位是天線號,占7bits,用于表明發(fā)送數(shù)據(jù)的天線,或者表明接收數(shù)據(jù)的天線;最后一個(gè)信息位是時(shí)間戳,占56bits,用于在接收數(shù)據(jù)時(shí),記錄采樣的時(shí)間點(diǎn)。
其中,時(shí)間戳主要用于控制數(shù)據(jù)塊的發(fā)送時(shí)間。例如有些協(xié)議規(guī)定接收數(shù)據(jù)結(jié)束需要在規(guī)定時(shí)間發(fā)送一個(gè)反饋幀(ACK幀)。這時(shí)可以解析接收到的數(shù)據(jù)的最后一個(gè)BLOCK數(shù)據(jù)塊的時(shí)間戳,計(jì)算出發(fā)送反饋幀的時(shí)間;然后將反饋幀和發(fā)送時(shí)間同時(shí)傳遞給FPGA,F(xiàn)PGA通過定時(shí)在準(zhǔn)確的時(shí)間點(diǎn)發(fā)送反饋幀。如果沒有嚴(yán)格的發(fā)送反饋幀的時(shí)間限制,時(shí)間戳可以忽略。
本發(fā)明的實(shí)時(shí)虛擬無線電數(shù)據(jù)的同步方法包括輪詢和中斷兩種數(shù)據(jù)同步方式。下面來分別闡述兩種數(shù)據(jù)同步方式。
實(shí)施例一
在本發(fā)明的基于輪詢的實(shí)時(shí)虛擬無線電數(shù)據(jù)的同步方法中,PC中的環(huán)形隊(duì)列用于存儲(chǔ)若干個(gè)BLOCK數(shù)據(jù)塊,每一個(gè)BLOCK數(shù)據(jù)塊的大小為128Bytes,包括32對IQ兩路采樣數(shù)據(jù),采樣的位寬是16bits;且在每一個(gè)BLOCK數(shù)據(jù)塊內(nèi),每一路數(shù)據(jù)的最后一個(gè)無效位組成信息位;第一個(gè)信息位是標(biāo)志位,表示數(shù)據(jù)是否有效,第二個(gè)信息位是天線號,用于表明發(fā)送/接收數(shù)據(jù)的天線;最后一個(gè)信息位是時(shí)間戳,用于在接收數(shù)據(jù)時(shí)記錄采樣的時(shí)間點(diǎn)。
參照圖4,本發(fā)明的基于輪詢的實(shí)時(shí)虛擬無線電數(shù)據(jù)的同步方法包括以下步驟:
步驟S11、虛擬無線電系統(tǒng)中物理層狀態(tài)機(jī)根據(jù)收發(fā)指令,在PCI設(shè)備中的相關(guān)FPGA中的寄存器中寫入收發(fā)指令。
步驟S12、PCI設(shè)備中的FPGA檢測寄存器中的指令,判斷為發(fā)送指令還是接收指令;若是接收指令,轉(zhuǎn)入步驟S13;若是發(fā)送指令,轉(zhuǎn)入步驟S14。
步驟S13、FPGA接收數(shù)據(jù)并將接收的數(shù)據(jù)利用DMA的方式,通過PCI總線傳輸?shù)絇C中的環(huán)形隊(duì)列中,并在接收的數(shù)據(jù)大小首次超過一個(gè)BLOCK數(shù)據(jù)塊的大小時(shí)觸發(fā)中斷;PC響應(yīng)該中斷,開啟輪詢線程,不斷輪詢環(huán)形隊(duì)列,讀取環(huán)形隊(duì)列中的有效數(shù)據(jù)并傳遞到下一個(gè)通信模塊或者上層協(xié)議進(jìn)行后續(xù)的處理。
其中,F(xiàn)PGA將接收的數(shù)據(jù)打包成BLOCK數(shù)據(jù)塊,并設(shè)置每一個(gè)BLOCK的第一個(gè)I路的最后一位為0,即設(shè)置BLOCK數(shù)據(jù)塊的標(biāo)志位為0,以表明該數(shù)據(jù)塊中的數(shù)據(jù)有效;同時(shí)設(shè)置該BLOCK數(shù)據(jù)塊的天線號和時(shí)間戳。
具體地,當(dāng)接收的數(shù)據(jù)第一次達(dá)到一個(gè)BLOCK數(shù)據(jù)塊的大小時(shí),F(xiàn)PGA觸發(fā)一個(gè)中斷,以觸發(fā)PC中的輪詢線程。需要說明的是,F(xiàn)PGA僅在接收的數(shù)據(jù)第一次滿足一個(gè)BLOCK數(shù)據(jù)塊大小時(shí)觸發(fā)中斷。
PC中的輪詢線程通過檢查BLOCK數(shù)據(jù)塊中的標(biāo)志位是否為0來判斷該BLOCK數(shù)據(jù)塊是否有效;如果有效,則讀取該BLOCK數(shù)據(jù)塊中的有效數(shù)據(jù)并傳輸?shù)较乱粋€(gè)通信模塊或者上層協(xié)議作后續(xù)處理,并且將BLOCK數(shù)據(jù)塊的所有位設(shè)置為1;如果無效,則PC的輪詢線程繼續(xù)檢測下一個(gè)BLOCK數(shù)據(jù)塊的有效性,直到數(shù)據(jù)接收結(jié)束。
在本發(fā)明中,環(huán)形隊(duì)列在初始化時(shí)是全部位都為1,在讀線程讀取環(huán)形隊(duì)列中的BLOCK數(shù)據(jù)塊的數(shù)據(jù)后也將其全部位設(shè)置為1。這是為了下一次讀取環(huán)形隊(duì)列是,能夠通過檢測BLOCK數(shù)據(jù)塊的標(biāo)志位是否為1,來判斷數(shù)據(jù)的有效性。
需要說明的是,PC和FPGA中分別設(shè)定有超時(shí)時(shí)間T;如果FPGA在超時(shí)時(shí)間T內(nèi)檢測不到數(shù)據(jù),就停止接收數(shù)據(jù);如果PC在超時(shí)時(shí)間T內(nèi)檢測不到數(shù)據(jù),則中斷輪詢線程,從 而提高CPU的利用率,避免不必要的空轉(zhuǎn)。
PC中的輪詢線程是基于實(shí)時(shí)操作系RTX實(shí)現(xiàn)的。輪詢線程不會(huì)被Windows系統(tǒng)的硬件中斷和高優(yōu)先級的線程打斷,從而顯著減少了數(shù)據(jù)沒被讀取就被覆蓋的可能,顯著提高了數(shù)據(jù)處理的實(shí)時(shí)性。
步驟S14、每當(dāng)環(huán)形隊(duì)列中存儲(chǔ)N個(gè)有效BLOCK數(shù)據(jù)塊時(shí),PC就在FPGA中寫入一個(gè)標(biāo)志;FPGA根據(jù)該標(biāo)志,利用DMA的方式,通過PCI總線將PC中的環(huán)形隊(duì)列中的有效數(shù)據(jù)讀取到FPGA中的DMA數(shù)據(jù)區(qū),并在規(guī)定時(shí)間發(fā)送反饋幀。
其中,N沒有具體的范圍限制,可以根據(jù)需要,設(shè)置成不同的大小。對于不同的通信協(xié)議,設(shè)置不同的大小,以達(dá)到實(shí)時(shí)性和性能的最優(yōu)。
其中,PC中的輪詢線程根據(jù)BLOCK數(shù)據(jù)塊中的信息位判斷發(fā)送反饋幀的時(shí)間,并將該時(shí)間發(fā)送到FPGA,F(xiàn)PGA通過定時(shí),在準(zhǔn)確的時(shí)間點(diǎn)上發(fā)送該ACK反饋幀。
本發(fā)明的一個(gè)實(shí)施例中,基于RTX的虛擬無線電實(shí)現(xiàn)802.11系列無線局域網(wǎng)協(xié)議。協(xié)議規(guī)定在接收完數(shù)據(jù)后,須在16us發(fā)送一個(gè)ACK幀。因此,當(dāng)數(shù)據(jù)發(fā)送結(jié)束,PC中的輪詢線程通過解析FPGA傳輸?shù)淖詈笠粋€(gè)BLOCK的時(shí)間戳來判斷接收時(shí)間,并計(jì)算出發(fā)送反饋幀的時(shí)間,即在時(shí)間戳上的時(shí)間加上16us,然后將該時(shí)間發(fā)送到FPGA,F(xiàn)PGA通過定時(shí),在準(zhǔn)確的時(shí)間點(diǎn)上發(fā)送該ACK反饋幀。
實(shí)施例二
在本發(fā)明的基于中斷的實(shí)時(shí)虛擬無線電數(shù)據(jù)的同步方法中,PC中的環(huán)形隊(duì)列用于存儲(chǔ)若干個(gè)BLOCK數(shù)據(jù)塊,每一個(gè)BLOCK數(shù)據(jù)塊的大小為128Bytes,包括32對IQ兩路采樣數(shù)據(jù),采樣的位寬是16bits;且在每一個(gè)BLOCK數(shù)據(jù)塊內(nèi),每一路數(shù)據(jù)的最后一個(gè)無效位組成信息位;第一個(gè)信息位是標(biāo)志位,表示數(shù)據(jù)是否有效,第二個(gè)信息位是天線號,用于表明發(fā)送/接收數(shù)據(jù)的天線;最后一個(gè)信息位是時(shí)間戳,用于在接收數(shù)據(jù)時(shí)記錄采樣的時(shí)間點(diǎn)。
參照圖5,本發(fā)明的基于中斷的實(shí)時(shí)虛擬無線電數(shù)據(jù)的同步方法包括以下步驟:
步驟S21、虛擬無線電系統(tǒng)中物理層狀態(tài)機(jī)根據(jù)收發(fā)指令,向PCI設(shè)備中的相關(guān)FPGA的寄存器中寫入收發(fā)指令,并設(shè)置中斷間隔。
具體地,中斷間隔可以根據(jù)需要設(shè)定。優(yōu)選地,將中斷間隔設(shè)定為100個(gè)BLOCK數(shù)據(jù)塊的大小,也就是3200個(gè)采樣點(diǎn)。FPGA每接收3200個(gè)采樣點(diǎn)的數(shù)據(jù),即觸發(fā)一次中斷。
步驟S22、PCI設(shè)備中的FPGA檢測寄存器中的指令,判斷為發(fā)送指令還是接收指令;若是接收指令,轉(zhuǎn)入步驟S23;若是發(fā)送指令,轉(zhuǎn)入步驟S24。
步驟S23、FPGA接收數(shù)據(jù)并將接收的數(shù)據(jù)利用DMA的方式,通過PCI總線傳輸?shù)絇C 中的環(huán)形隊(duì)列中,并當(dāng)接收的數(shù)據(jù)達(dá)到設(shè)定的中斷間隔時(shí),觸發(fā)中斷;PC響應(yīng)該中斷,并讀取環(huán)形隊(duì)列中的有效數(shù)據(jù),傳輸?shù)较乱粋€(gè)通信模塊或者上層協(xié)議進(jìn)行后續(xù)處理。
FPGA將接收的數(shù)據(jù)打包成BLOCK數(shù)據(jù)塊,并設(shè)置每一個(gè)BLOCK的第一個(gè)I路的最后一位為0,即設(shè)置BLOCK數(shù)據(jù)塊的標(biāo)志位為0,以表明該數(shù)據(jù)塊中的數(shù)據(jù)有效;同時(shí)設(shè)置該BLOCK數(shù)據(jù)塊的天線號和時(shí)間戳。
優(yōu)選地,當(dāng)FPGA接收的數(shù)據(jù)超過3200個(gè)采樣點(diǎn),即100個(gè)BLOCK,就觸發(fā)一個(gè)中斷。PC中相應(yīng)的中斷處理例程響應(yīng)該中斷,并從環(huán)形隊(duì)列中讀取100個(gè)BLOCK數(shù)據(jù)塊中的有效數(shù)據(jù),并將讀取的數(shù)據(jù)傳輸?shù)较乱粋€(gè)通信模塊或者上層協(xié)議進(jìn)行后續(xù)處理,并且將BLOCK數(shù)據(jù)塊的所有位設(shè)置為1;同時(shí)掛起該中斷處理例程,等待下一次中斷的到來。
環(huán)形隊(duì)列在初始化時(shí)是全部位都為1,在讀線程讀取環(huán)形隊(duì)列中的BLOCK數(shù)據(jù)塊的數(shù)據(jù)后也將其全部位設(shè)置為1。這是為了下一次讀取環(huán)形隊(duì)列是,能夠通過檢測BLOCK數(shù)據(jù)塊的標(biāo)志位是否為1,來判斷數(shù)據(jù)的有效性。
需要說明的是,在FPGA中設(shè)定有超時(shí)時(shí)間T;如果FPGA在超時(shí)時(shí)間T內(nèi)檢測不到數(shù)據(jù),就停止接收數(shù)據(jù),從而提高CPU的利用率,避免不必要的空轉(zhuǎn)。
步驟S24、每當(dāng)環(huán)形隊(duì)列中存儲(chǔ)N個(gè)有效數(shù)據(jù)塊時(shí),PC就在FPGA中寫入一個(gè)標(biāo)志;FPGA根據(jù)該標(biāo)志,利用DMA的方式,通過PCI總線將PC中的環(huán)形隊(duì)列中的有效數(shù)據(jù)讀取到FPGA中的DMA數(shù)據(jù)區(qū),并在規(guī)定時(shí)間發(fā)送反饋幀。
其中,N沒有具體的范圍限制,可以根據(jù)需要,設(shè)置成不同的大小。對于不同的通信協(xié)議,設(shè)置不同的大小,以達(dá)到實(shí)時(shí)性和性能的最優(yōu)。
具體地,一旦數(shù)據(jù)發(fā)送結(jié)束,PC中的中斷服務(wù)例程通過解析FPGA傳輸?shù)淖詈笠粋€(gè)BLOCK數(shù)據(jù)塊的時(shí)間戳來判斷接收時(shí)間,計(jì)算出發(fā)送反饋幀的時(shí)間,并將該時(shí)間發(fā)送到FPGA,F(xiàn)PGA通過定時(shí),在準(zhǔn)確的時(shí)間點(diǎn)上發(fā)送反饋幀。
本發(fā)明的一個(gè)實(shí)施例:基于RTX的虛擬無線電實(shí)現(xiàn)802.11系列無線局域網(wǎng)協(xié)議。協(xié)議規(guī)定在接收完數(shù)據(jù)后,須在16us發(fā)送一個(gè)ACK幀。因此,當(dāng)數(shù)據(jù)發(fā)送結(jié)束時(shí),PC中的中斷服務(wù)例程通過解析FPGA傳輸?shù)淖詈笠粋€(gè)BLOCK的時(shí)間戳判斷接收時(shí)間,并計(jì)算出發(fā)送反饋幀的時(shí)間,即在時(shí)間戳上的時(shí)間加上16us,然后將該時(shí)間發(fā)送到FPGA。FPGA通過定時(shí),在準(zhǔn)確的時(shí)間點(diǎn)上發(fā)送該反饋幀。
綜上所述,本發(fā)明的基于輪詢/中斷的實(shí)時(shí)虛擬無線電數(shù)據(jù)的同步方法中,基于輪詢的數(shù)據(jù)同步方式中輪詢線程基于實(shí)時(shí)操作系統(tǒng)RTX實(shí)現(xiàn),能夠屏蔽所有的Windows硬件中斷和高優(yōu)先級的中斷,從而減少輪詢線程被掛起的概率,進(jìn)而減少有效數(shù)據(jù)被覆蓋的可能;在輪 詢查詢和讀取數(shù)據(jù)時(shí),設(shè)置超時(shí)時(shí)間,若在超時(shí)時(shí)間內(nèi),輪詢線程查詢不到數(shù)據(jù),則終止該線程,從而顯著提高了CPU的利用率;設(shè)計(jì)了一種BLOCK的數(shù)據(jù)結(jié)構(gòu),其中的時(shí)間戳記錄了接收數(shù)據(jù)的采樣時(shí)間點(diǎn),如果需要在規(guī)定時(shí)間內(nèi)發(fā)送反饋幀,可以根據(jù)最后一個(gè)接收數(shù)據(jù)的時(shí)間戳計(jì)算發(fā)送反饋幀的時(shí)間,并將該時(shí)間點(diǎn)和反饋幀傳給FPGA,等待發(fā)送,從而提高了系統(tǒng)的實(shí)時(shí)性。基于中斷的數(shù)據(jù)同步方式充分利用RTX的實(shí)時(shí)特性,基于中斷實(shí)現(xiàn)數(shù)據(jù)同步,明顯提高CPU的處理效率;通過設(shè)定中斷間隔,可以兼容不同的通信協(xié)議對數(shù)據(jù)處理的要求;RTX中的中斷延時(shí)在微秒級,并且RTX的中斷服務(wù)例程具有較高的優(yōu)先級,從而顯著提高數(shù)據(jù)同步的實(shí)時(shí)性;設(shè)計(jì)了一種BLOCK的數(shù)據(jù)結(jié)構(gòu),通過記錄接收的最后一個(gè)BLOCK的時(shí)間戳,計(jì)算出待發(fā)送的反饋幀的發(fā)送時(shí)間,并將該時(shí)間傳遞給FPGA,F(xiàn)PGA在時(shí)間點(diǎn)上發(fā)送反饋幀,從而滿足協(xié)議規(guī)定的實(shí)時(shí)性。所以,本發(fā)明有效克服了現(xiàn)有技術(shù)中的種種缺點(diǎn)而具高度產(chǎn)業(yè)利用價(jià)值。
上述實(shí)施例僅例示性說明本發(fā)明的原理及其功效,而非用于限制本發(fā)明。任何熟悉此技術(shù)的人士皆可在不違背本發(fā)明的精神及范疇下,對上述實(shí)施例進(jìn)行修飾或改變。因此,舉凡所屬技術(shù)領(lǐng)域中具有通常知識者在未脫離本發(fā)明所揭示的精神與技術(shù)思想下所完成的一切等效修飾或改變,仍應(yīng)由本發(fā)明的權(quán)利要求所涵蓋。