,
(1.西安電子科技大學(xué) 電子工程學(xué)院,西安 710071;2.電子信息控制重點(diǎn)實(shí)驗(yàn)室)
隨著無線電通信行業(yè)的迅猛發(fā)展,相關(guān)的各類無線電通信業(yè)務(wù)應(yīng)用日益廣泛,無線電信號監(jiān)測已成為了民用無線電管理的主要需求。目前市場的無線電信號監(jiān)測設(shè)備大多是采用射頻變頻接收模塊,將射頻無線電信號放大變頻至中頻,在模數(shù)轉(zhuǎn)換之后,以FPGA+DSP作為下位機(jī)、以PC機(jī)作為上位機(jī)實(shí)施信號分析,這樣的結(jié)構(gòu)不僅體積龐大,不便攜帶,而且功耗較高,無法適應(yīng)靈活的應(yīng)用環(huán)境。
本文研究并設(shè)計(jì)了一種以Zynq-7000系列SoC為核心,AD9361為采樣前端的無線電信號采集監(jiān)測系統(tǒng),Zynq-7000系列是目前應(yīng)用十分廣泛的ARM+FPGA架構(gòu)的SoC,以它為核心的設(shè)計(jì)難點(diǎn)在于軟硬件協(xié)同開發(fā)。我們所設(shè)計(jì)的這套系統(tǒng)將信號變頻接收、采集、處理、顯示、存儲(chǔ)、傳輸融為一體,并定制了嵌入式Linux操作系統(tǒng),具有實(shí)時(shí)性強(qiáng)、便于攜帶、升級簡單的優(yōu)點(diǎn)。
Zynq-7000是Xilinx公司推出的新一代全編程片上系統(tǒng)架構(gòu),其系列產(chǎn)品以ARM+FPGA為主要結(jié)構(gòu),使得ARM和FPGA之間可以優(yōu)勢互補(bǔ)。本設(shè)計(jì)采用的型號是XC7Z045,該產(chǎn)品是Zynq-7000系列中配置較為高端的一款片上系統(tǒng)。整個(gè)系統(tǒng)分為PS(Processing System)和PL(Programming Logic)兩部分,如圖1所示。
圖1 Zynq-7000 XC7Z045結(jié)構(gòu)
其中,PS含有ARM雙核Cortex-A9處理器,每個(gè)核都配備了NEON和浮點(diǎn)運(yùn)算單元,最高運(yùn)行頻率為1 GHz。每個(gè)單核都具有獨(dú)立的L1緩存和MMU,是典型的異構(gòu)多核處理器。PS中還擁有豐富的外設(shè),包括各種外設(shè)接口。
PS擁有自己的時(shí)鐘源和存儲(chǔ)器接口,不需要借助PL配置即可啟動(dòng)運(yùn)行。
圖3 采集系統(tǒng)整體結(jié)構(gòu)
PL部分屬于Xilinx典型的FPGA結(jié)構(gòu),其性能和邏輯密度相當(dāng)于Xilinx Kintex-7 FPGA器件,還具備了大量的Block RAM和DSP Slice,完全可以勝任復(fù)雜的邏輯設(shè)計(jì)。在非調(diào)試模式下,PL無法單獨(dú)啟動(dòng),系統(tǒng)總是優(yōu)先啟動(dòng)PS并從存儲(chǔ)器中導(dǎo)入Bitstream文件后才能配置PL。
PS和PL之間可通過多種方式進(jìn)行通信,包括GP、HP、ACP、EMIO、IRQ、DMA等接口。
本設(shè)計(jì)采用ADI公司推出的AD-FMComms3-EBZ評估板作為數(shù)據(jù)采集前端。該評估板是一款以AD9361為核心,高性能、高集成度的射頻收發(fā)器。這套評估板具有兩套獨(dú)立的收發(fā)設(shè)備,即兩個(gè)接收通道和兩個(gè)發(fā)射通道,每個(gè)通道均可以工作在70 MHz~6 GHz的頻段范圍內(nèi),由于系統(tǒng)對模擬信號采取了零中頻正交采樣的方式,因此每個(gè)通道在基帶又可分為I路子通道和Q路子通道,每個(gè)子通道都具有獨(dú)立的12位ADC/DAC,其基帶采樣頻率從200 kHz~56 MHz。其中接收通道的結(jié)構(gòu)圖2所示。
圖2 AD9361內(nèi)部接收電路結(jié)構(gòu)圖
本設(shè)計(jì)的整體框圖如圖3所示,信號由監(jiān)測天線進(jìn)入AD9361,經(jīng)過放大、下變頻、正交采樣后得到IQ兩路數(shù)據(jù),并傳入PL中。數(shù)據(jù)由AD9361控制器IP接收并打包成64位數(shù)據(jù)后存入FIFO當(dāng)中,通過PS中DMA將FIFO的數(shù)據(jù)傳入內(nèi)存中,PS中的程序通過訪問內(nèi)存獲得了采樣數(shù)據(jù),并利用協(xié)處理器NEON和VFP引擎對其進(jìn)行處理,最終進(jìn)行數(shù)據(jù)可視化之后,通過HDMI輸出顯示內(nèi)容,同時(shí)可以將有用的數(shù)據(jù)保存在SDHC卡中。
本設(shè)計(jì)開發(fā)可以分成三個(gè)階段:第一階段是硬件邏輯設(shè)計(jì),包括對PL中的IP核進(jìn)行邏輯設(shè)計(jì)和布局,開發(fā)環(huán)境為Vivado,最終生成hdf文件和Bitstream文件。第二階段是嵌入式Linux軟件環(huán)境定制,包括對Linux的定制和移植,以及驅(qū)動(dòng)程序的編寫調(diào)試,主要在Xilinx SDK和PetaLinux中完成。第三階段是在Linux平臺下編寫無線電信號采集監(jiān)測的軟件應(yīng)用程序,包括對利用協(xié)處理器對數(shù)據(jù)進(jìn)行計(jì)算和數(shù)據(jù)可視化,在QT中實(shí)現(xiàn)。
AD9361的通信接口可分為數(shù)據(jù)接口和控制接口。
數(shù)據(jù)接口主要負(fù)責(zé)采樣數(shù)據(jù)的通信,有LVDS和CMOS兩種接口形式,二者速率均可達(dá)122.88 MHz,本設(shè)計(jì)采用LVDS模式,時(shí)序如圖4所示。
參照此時(shí)序,設(shè)計(jì)了AD9361接收模塊IP,每個(gè)通道的采樣位數(shù)是12位,根據(jù)半字(16位)對齊,將差分的時(shí)序信號轉(zhuǎn)換并成32位的數(shù)據(jù)格式。
圖4 AD9361數(shù)據(jù)接口時(shí)序
控制接口的通信方式是SPI總線,主要是負(fù)責(zé)訪問AD9361內(nèi)部寄存器。通過配置8位寄存器來實(shí)現(xiàn)對接收鏈路的控制和狀態(tài)監(jiān)測。其寄存器有統(tǒng)一的編址,如控制內(nèi)部VCO以分頻產(chǎn)生RF信號的寄存器RF PLL_Deviders,其地址是0x005。AD9361的初始化寄存器配置十分復(fù)雜,但在通常情況下,開發(fā)者不需要了解寄存器配置的信息,因?yàn)锳DI公司已經(jīng)為開發(fā)者提供了配置AD9361的板級支持包(BSP),開發(fā)者只需要調(diào)用特定的API函數(shù),就可以完成AD9361相應(yīng)的配置。
如使用ad9361_set_rx_sampling_freq()函數(shù)設(shè)置接收設(shè)備的采樣頻率。PS部分具備SPI控制器,無需在PL中實(shí)現(xiàn)IP核,但需要在對PS的邏輯設(shè)計(jì)中使能SPI控制器。
本設(shè)計(jì)中的FIFO IP如圖5所示。
圖5 FIFO邏輯IP核
FIFO是信號采集系統(tǒng)中一個(gè)重要的設(shè)計(jì)。在高速信號采集中,采集速度往往超過數(shù)據(jù)處理速度,因此通常采取的策略是利用FIFO存儲(chǔ)足夠長時(shí)間的數(shù)據(jù),再送到處理單元處理,因此FIFO的大小決定了數(shù)據(jù)采集系統(tǒng)的最大采樣深度和最大采樣寬度。本設(shè)計(jì)的前端采樣速率最大為50 MHz,而通常無線通信信號的碼片長度不會(huì)超過100 ms,因此本設(shè)計(jì)中將FIFO的深度設(shè)置為8 MB,單路數(shù)據(jù)寬度為16位,這樣在系統(tǒng)以最高采樣速率運(yùn)行時(shí)FIFO仍可以記錄160 ms以上的數(shù)據(jù)。
Vivado提供了邏輯IP核Processing System 7作為PL連接PS的接口,如圖6所示。在本設(shè)計(jì)中,PS部分需要通過自身的DMAC將PL部分FIFO中的數(shù)據(jù)讀入內(nèi)存,并接收來自PL的中斷。同時(shí),PL中還例化了VDMA和HDMI接口邏輯IP核,作為視頻輸出控制器,VDMA則通過AXI Stream總線與PS連接。由于AD9361的SPI總線連接的是XC7Z045的PL引腳,因此需要將PS部分SPI控制器的引腳通過內(nèi)部互聯(lián)總線映射到對應(yīng)的PL引腳上。
圖6 Processing System 7邏輯IP核(局部)
完成硬件邏輯設(shè)計(jì)之后,通過Vivado的驗(yàn)證、分析和綜合,最終得到硬件描述文件system.hdf和FPGA配置文件Bitstream。
由于整個(gè)系統(tǒng)要實(shí)現(xiàn)采集、處理、存儲(chǔ)及顯示等多種任務(wù),采用裸機(jī)運(yùn)行顯然無法勝任,因此本設(shè)計(jì)為Zynq-7000移植了操作系統(tǒng)。
Zynq-7000 PS軟件程序啟動(dòng)分為三個(gè)階段。
系統(tǒng)上電之后,最先執(zhí)行的是內(nèi)部BootROM存儲(chǔ)的固件代碼,這部分代碼用戶無法修改,其功能是初始化ARM內(nèi)核和與啟動(dòng)模式相關(guān)的外設(shè),并讀取MIO config引腳的狀態(tài),根據(jù)引腳的狀態(tài)決定下一階段的啟動(dòng)模式(如SD卡啟動(dòng)、Flash啟動(dòng)等)。在該段程序結(jié)束時(shí),系統(tǒng)將把下一階段的代碼從相應(yīng)的存儲(chǔ)設(shè)備里載入到OCM(on-chip memory,片上存儲(chǔ)器)。
第二階段所執(zhí)行的代碼稱為FSBL(the First Stage Boot Loader),這部分代碼由用戶自行燒寫到存儲(chǔ)設(shè)備中,其作用通常是初始化整個(gè)PS所需的外設(shè),加載中斷向量表,如果檢測到FPGA配置文件,則還會(huì)將配置文件燒入PL中。但由于OCM存儲(chǔ)容量有限,一個(gè)FSBL代碼的長度為192 KB,無法運(yùn)行較為復(fù)雜的程序,所以FSBL在結(jié)束時(shí)會(huì)調(diào)用函數(shù)FsblHandoff(),將處理器的程序流程定位到用戶自定義的程序入口中,從而進(jìn)入第三階段。對于裸機(jī)系統(tǒng)而言,第三階段程序入口就是用戶程序中的主函數(shù)main(),對于Linux操作系統(tǒng)而言則是u-boot。
通常,F(xiàn)SBL的制作是在Xilinx的軟件開發(fā)環(huán)境XSDK中完成。對于Zynq-7000器件,XSDK提供了模板工程,開發(fā)者可以在此工程的基礎(chǔ)上定制FSBL。FSBL程序流程如圖7所示。本設(shè)計(jì)采用SD啟動(dòng)模式,將所有的程序下載至SD卡中。在XSDK中創(chuàng)建FSBL模板工程,編寫相應(yīng)程序,由XSDK編譯生成可執(zhí)行文件fsbl.elf。
圖7 FSBL程序流程
一個(gè)完整的Linux系統(tǒng)由bootloader、設(shè)備樹、內(nèi)核以及文件系統(tǒng)組成。相關(guān)介紹如表1所列。
表1 Linux組成部分
上述目標(biāo)文件生成后,利用PetaLinux進(jìn)行打包。PetaLinux是Xilinx公司推出的專門為含Xilinx FPGA器件的嵌入式系統(tǒng)定制Linux操作系統(tǒng)的開發(fā)工具。其人機(jī)交互主要以命令行的方式,能夠快速地幫助開發(fā)者構(gòu)建Linux鏡像。在Ubuntu 16.04中安裝PetaLinux組件后,可以直接通過petalinux-package- -boot命令實(shí)現(xiàn)打包生成鏡像。該命令的主要參數(shù)如下:
- -fsbl FSBL:指定FSBL文件
- -fpga BITSTREAM:指定Bitstream文件
- -u-bootUBOOT-IMG:指定u-boot鏡像文件
- -kernel KERNEL-IMG:指定Linux內(nèi)核鏡像文件
- -output OUTPUTFILE:指定輸出文件
圖8 SDHC卡分區(qū)
因而本設(shè)計(jì)使用如下指令生成鏡像:
petalinux-package - -boot - -fsbl fsbl.elf - -fpga design_1.hdf - -u-boot u-boot.elf - -kernel image.ub - -output.
將生成的鏡像文件燒寫入SD卡,最終在SD卡上會(huì)形成圖8所示分區(qū)。
將SD卡插入zc706開發(fā)板中,將啟動(dòng)模式配置為SD啟動(dòng),上電后開發(fā)板將自動(dòng)進(jìn)入Linux系統(tǒng)。
為了發(fā)揮ARM Cortex-A處理器的性能,本設(shè)計(jì)在軟件上采取了多線程設(shè)計(jì),將數(shù)據(jù)按流式處理方式分成了獲取、處理和可視化顯示三個(gè)階段,每個(gè)階段設(shè)計(jì)了單獨(dú)的線程,使得這三個(gè)階段的任務(wù)可以在軟件中并發(fā)執(zhí)行,縮短了時(shí)延,提高了效率。三個(gè)線程的任務(wù)分配如表2所列。
表2 線程任務(wù)分配
線程之間通過帶有讀寫鎖的共享緩存?zhèn)鬟f數(shù)據(jù),使得各線程在讀寫數(shù)據(jù)時(shí)不產(chǎn)生沖突。通過Qt的信號/槽機(jī)制傳遞控制參數(shù)。圖9表明了軟件中各線程在程序處理流程中的位置和作用。
圖9 軟件流程
數(shù)據(jù)處理階段的主要處理算法是FFT,同時(shí)還會(huì)計(jì)算信號的平均功率、方差、估算噪底、搜索極值、將時(shí)、頻域的數(shù)據(jù)寫入disp_buffer之后,由main_thread線程將數(shù)據(jù)展現(xiàn)給用戶。
ARM硬件加速的基礎(chǔ)是ARMv7架構(gòu)中的兩大應(yīng)用擴(kuò)展——NEON和VFP(Vector Floating-Point)。NEON是ARMv7中一個(gè)重要的協(xié)處理器,它允許開發(fā)者使用SIMD(Single Instruction,Multiple Data)操作,即多組數(shù)據(jù)并行操作。NEON擁有16個(gè)128位寄存器(又可視為32個(gè)64位寄存器),并有專門的指令集,可以對大量的操作數(shù)進(jìn)行向量化的操作,如果向量加法。VFP是與NEON緊密相連的又一重要的協(xié)處理器,它是傳統(tǒng)FPU(浮點(diǎn)運(yùn)算單元)的提升,它除了提供浮點(diǎn)數(shù)的基本運(yùn)算(加、減、乘、除、開方、比較、取反)之外,還具有向量化的功能,即同時(shí)支持8組單精度和4組雙精度的浮點(diǎn)數(shù)運(yùn)算。為了能在算法程序中使用NEON和VFP,必須在編寫算法程序的基礎(chǔ)上完成兩方面的工作。
(1)使用ARMC語言擴(kuò)展類型
在程序中添加頭文件
(2)設(shè)置GCC編譯選項(xiàng)
在編譯使用了NEON和VFP的源文件時(shí),應(yīng)當(dāng)添加如表3所列的編譯選項(xiàng),以產(chǎn)生NEON和VFP指令。
表3 GCC生成NEON指令的配置選項(xiàng)
本文以一個(gè)4 096點(diǎn)的基2-FFT程序作為硬件加速的測試。測試結(jié)果如表4所列。
表4 硬件加速測試
可見使用了NEON和VFP,數(shù)據(jù)處理的時(shí)間得以大幅縮短。
為了便于使用者觀察數(shù)據(jù),本文基于Qt擴(kuò)展組件Qwt設(shè)計(jì)了用戶界面,如圖12所示。main_thread線程設(shè)置每個(gè)0.2 s讀取一次緩存中的數(shù)據(jù),故兩個(gè)坐標(biāo)圖的刷新速率是5 Hz。用戶通過圖形界面將設(shè)定的參數(shù)傳入main_thread線程,main_thread將用戶配置參數(shù)打包成信號發(fā)射到processing_thread線程的接收槽中,然后processing_thread線程根據(jù)參數(shù)調(diào)整數(shù)據(jù)處理過程,并通過調(diào)用AD9361 API,完成配置。
完成硬件設(shè)計(jì)后,Vivado將會(huì)生成FPGA資源使用情況報(bào)告,如圖10所示??梢奪ynq-7000完成可以勝任無線電信號采集監(jiān)測系統(tǒng)的設(shè)計(jì)。
圖10 FPGA使用情況報(bào)告
測試平臺采用Xilinx zc706評估板,采集前為ADI FMCOMMS3無線收發(fā)板卡,如圖11所示,測試分為單一頻段測試和全頻段掃頻測試。
圖11 采集系統(tǒng)板卡
測試方法:由射頻信號發(fā)生器在該系統(tǒng)附近發(fā)送2 880 MHz單頻信號,在控制面板的“頻道”下拉框中選擇2.90 GHz,“顯示”下拉框選擇“功率譜”,單位為“dB”。則系統(tǒng)將會(huì)監(jiān)測2.85~2.95 GHz范圍內(nèi)的時(shí)頻數(shù)據(jù)。顯示結(jié)果如圖12所示。可以觀察到頻譜中顯示了兩個(gè)峰值,分別處于2 880 MHz和2 920 MHz,其中2 920 MHz信號是鏡頻泄漏。
圖12 用戶界面
測試方法:在控制面板上設(shè)置“起始頻率”為500 MHz,終止頻率為3 000 MHz,則系統(tǒng)將以每次50 MHz帶寬的速度掃描指定頻率范圍。最終生成如圖13所示的頻譜,其RBW為200 kHz。從頻譜中可以觀察到通信頻段1 900 M的狀態(tài),證明了系統(tǒng)的可行性。
圖13 掃頻結(jié)果
[1] 高亞棟,范夢蘭,譚曉波,等.基于虛擬儀器技術(shù)的頻譜監(jiān)測與分析系統(tǒng)的實(shí)現(xiàn)[J].無線通信技術(shù),2014,23(1):14-18,23.
[2] 董淵,王生原,陳嘉,等.嵌入式CPU軟硬件協(xié)同開發(fā)中的操作系統(tǒng)設(shè)計(jì)[J].清華大學(xué)學(xué)報(bào):自然科學(xué)版,2005(7):973-976.
[3] 郭星煌.基于AD9361的便攜式無線電信號監(jiān)測采集系統(tǒng)設(shè)計(jì)[J].科技創(chuàng)新與應(yīng)用,2016(11):7-8.
[4] 馮莉.一款基于嵌入式的頻譜監(jiān)測軟件設(shè)計(jì)及實(shí)現(xiàn)[J].數(shù)字通信世界,2017(7):5,18.
[5] 周鴻順.我國無線電監(jiān)測工作的現(xiàn)狀與發(fā)展[J].郵電設(shè)計(jì)技術(shù),2002(8):9-15.
[6] Implementation of baseband transmitter design based on QPSK modulation on Zynq-7000 all-programmable System-on-Chip[C]//2017 International Symposium on Electronics and Smart Devices (ISESD), Yogyakarta, Indonesia, 2017:138-143.
[7] Tongxiang Shi, Wenbin Guo, Lishan Yang ,et al.Remote wideband data acquiring system based on ZC706 and AD9361[C]//2015 IEEE International Wireless Symposium (IWS 2015), Shenzhen, 2015: 1-4.
徐劍韜(碩士研究生),主要研究方向?yàn)殡娮訉?;石榮(研究員),主要研究方向?yàn)殡娮訉埂?/p>
單片機(jī)與嵌入式系統(tǒng)應(yīng)用2018年4期