前言
調(diào)相脈沖信號(hào)可以獲得較大的壓縮比,它作為一種常用的脈沖壓縮信號(hào),在現(xiàn)代雷達(dá)及通信系統(tǒng)中獲得了廣泛應(yīng)用。隨著近年來(lái)軟件無(wú)線電技術(shù)和電子技術(shù)的發(fā)展,DDS(直接數(shù)字頻率合成)用于實(shí)現(xiàn)信號(hào)產(chǎn)生的應(yīng)用越來(lái)越廣。DDS技術(shù)從相位的概念出發(fā)進(jìn)行頻率合成,它采用數(shù)字采樣存儲(chǔ)技術(shù),可以產(chǎn)生點(diǎn)頻、線性調(diào)頻、ASK、PSK及FSK等各種形式的信號(hào),其幅度和相位一致性好,具有電路控制簡(jiǎn)單、相位精確、頻率分辨率高、頻率切換速度快、輸出信號(hào)相位噪聲低、易于實(shí)現(xiàn)全數(shù)字化設(shè)計(jì)等突出優(yōu)點(diǎn)。
目前,DDS的ASIC芯片如AD公司的AD9852、AD9854等,對(duì)于相位調(diào)制信號(hào),可方便地產(chǎn)生BPSK,但 是,對(duì)QPSK或8PSK等則實(shí)現(xiàn)困難,它們對(duì)控制更新脈沖要求極高,一旦偏差超過(guò)DDS內(nèi)極高的系統(tǒng)時(shí)鐘,輸出相位就會(huì)錯(cuò)誤。本文介紹了一種通過(guò)FPGA實(shí)現(xiàn)QPSK或更高階PSK信號(hào)的方法,可靈活地通過(guò)上位機(jī)的PCI總線控制參數(shù),產(chǎn)生不同載波頻率、不同脈沖寬度、不同占空比、不同重復(fù)周期等的QPSK信號(hào),對(duì)雷達(dá)等系統(tǒng)的設(shè)計(jì)者具有很好的借鑒意義。
QPSK信號(hào)源的設(shè)計(jì)方案
DDS原理
DDS是一種全數(shù)字化的頻率合成器,由相位累加器、正弦波形ROM存儲(chǔ)器、D/A轉(zhuǎn)換器和低通濾波器構(gòu)成,其基本原理如圖1。
輸出信號(hào)的頻率為fout=fclk?Δφ/2N,而最小頻率分辨率為Δfo=fomin=fo/2N,可見(jiàn)改變頻率控制字N即可改變輸出信號(hào)的頻率。當(dāng)參考時(shí)鐘頻率給定后,輸出信號(hào)的頻率取決于頻率的控制字,頻率分辨率取決于累加器的位數(shù),相位分辨率取決于ROM的地址線位數(shù),幅度量化取決于ROM的數(shù)據(jù)字長(zhǎng)和D/A轉(zhuǎn)換器的位數(shù)。
為了提高DDS輸出信號(hào)的頻譜指標(biāo)和降低正弦的ROM存儲(chǔ)器,近來(lái)發(fā)展了如在相位截?cái)嗪蠹訑?shù)字反sinc濾波,利用三角函數(shù)對(duì)稱性只存取1/4周期查找表,基于CORDIC、泰勒級(jí)數(shù)加權(quán)的頻率合成方法等技術(shù)。
QPSK信號(hào)源的設(shè)計(jì)方案
在FPGA中,通過(guò)正弦查找表和相位累加器實(shí)現(xiàn)DDS,通過(guò)計(jì)數(shù)器實(shí)現(xiàn)QPSK信號(hào)的起?刂。在計(jì)數(shù)器計(jì)數(shù)到零時(shí),設(shè)置標(biāo)志位,讀取寄存器中的QPSK控制碼,從而設(shè)置初始相位。在計(jì)數(shù)到根據(jù)QPSK脈沖寬度設(shè)定的值后,計(jì)數(shù)器置0并重新開(kāi)始計(jì)數(shù)。運(yùn)行完設(shè)置碼元的個(gè)數(shù)及次數(shù)后,使能輸出禁止標(biāo)志位。
QPSK信號(hào)的重復(fù)周期也通過(guò)計(jì)數(shù)器實(shí)現(xiàn)。根據(jù)周期的范圍和系統(tǒng)時(shí)鐘,設(shè)置計(jì)數(shù)器的位數(shù)并使其滿足要求。在計(jì)數(shù)器計(jì)數(shù)到設(shè)定值后,清除輸出禁止的標(biāo)志位。需要注意的是周期計(jì)數(shù)器應(yīng)該與QPSK碼元寬度計(jì)數(shù)器同步。
QPSK信號(hào)參數(shù)控制通過(guò)PCI總線實(shí)現(xiàn),包括QPSK信號(hào)的開(kāi)始、結(jié)束、碼元個(gè)數(shù)、次數(shù)、碼字以及QPSK信號(hào)重復(fù)周期等。在FPGA內(nèi)通過(guò)寄存器讀取、保存參數(shù)。
硬件設(shè)計(jì)
系統(tǒng)組成與結(jié)構(gòu)
FPGA選用XILINX公司Spartan3系列的XC3S1000,為100萬(wàn)門(mén)大規(guī)?删幊唐骷K鼉(nèi)部具有432kbit的Block Ram和120kbit的Distributed Ram;4個(gè)時(shí)鐘管理單元DCM;24個(gè)乘法器。配置采用XILINX的專用PROM XCF04S,4M位的串行Flash PROM。XC3S1000通過(guò)XCF04S實(shí)現(xiàn)主串配置,M0、M1、M2均置低。系統(tǒng)框圖如圖2。
高速DAC選用AD公司的AD9767,它是雙通道14位精度的高速CMOS DAC。它內(nèi)部集成1.2V的電壓基準(zhǔn),SFDR和IMR可達(dá)83dBc,最高轉(zhuǎn)換率為125MSPS,滿量程電流可調(diào)范圍為2mA~20mA,兩路D/A輸出后經(jīng)兩片高速、寬帶放大器AD8047放大,然后經(jīng)濾波器輸出,AD8047增益為1,實(shí)現(xiàn)電流到電壓的轉(zhuǎn)換。
PCI接口芯片采用PCI9054,是PlX公司應(yīng)用廣泛的32位、33MHz的PCI橋芯片,實(shí)現(xiàn)PCI總線和本地總線的轉(zhuǎn)換。PCI9054可工作在主、從模式,支持DMA,支持猝發(fā)操作。PCI9054的上電通過(guò)2k位的EEPROM NM93CS56配置,包括PCI9054的本地總線控制、PCI配置空間寄存器的配置等。PCI9054在PCB設(shè)計(jì)中應(yīng)注意PCI總線和時(shí)鐘的長(zhǎng)度約束。
為了提高板上的存儲(chǔ)容量,F(xiàn)PGA通過(guò)CYPRESS的CY7C1372C-200擴(kuò)展了(512k×36)/1M×18位的ZBT SRAM。以零等待狀態(tài)讀寫(xiě)速率可達(dá)200MHz,最大訪問(wèn)時(shí)間為3ns,支持Burst操作,適用高速的數(shù)據(jù)讀寫(xiě)。
系統(tǒng)通過(guò)SMA外接時(shí)鐘,同時(shí)內(nèi)部50MHz晶振經(jīng)時(shí)鐘緩沖芯片CY2308輸出,分別作為PCI9054和FPGA的本地時(shí)鐘。外接時(shí)鐘的輸入阻抗為50Ω,注意通過(guò)信號(hào)源提供時(shí)鐘時(shí)應(yīng)使其峰峰值在2V以上。
復(fù)位電路采用MAXIM的看門(mén)狗及電壓監(jiān)控芯片MAX708實(shí)現(xiàn)。
電源由PCI總線提供,3.3V電壓直接從PCI總線的3.3V引出,通過(guò)凌特公司的LT1764實(shí)現(xiàn)2.5V電壓,采用TI公司的TPS54612實(shí)現(xiàn)1.2V電壓,分別作為FPGA的輔助電壓Vccaux和核電壓Vccint。TPS54612輸入電壓為3-6V,在3.3V、5V均可使用,輸出可高達(dá)6A,且開(kāi)關(guān)控制器內(nèi)部集成FET場(chǎng)效應(yīng)管,方便應(yīng)用。AD8047的正負(fù)電壓輸入分別為+5V和-5V,分別由從PCI總線接入的+12V和-12V電壓經(jīng)穩(wěn)壓器7805和7905提供。
軟件設(shè)計(jì)
QPSK信號(hào)的生成
QPSK信號(hào)產(chǎn)生的原理在前面已作詳述,F(xiàn)PGA的外接60MHz時(shí)鐘通過(guò)內(nèi)部的時(shí)鐘管理器倍頻實(shí)現(xiàn)120MHz時(shí)鐘,通過(guò)Block RAM 資源實(shí)現(xiàn)只讀ROM,然后通過(guò)累加器進(jìn)程、讀QPSK碼字進(jìn)程、重復(fù)周期計(jì)數(shù)進(jìn)程等實(shí)現(xiàn)DDS功能,通過(guò)乘法器還可實(shí)現(xiàn)輸出信號(hào)的幅度控制。以下是部分源程序,采用Verilog HDL語(yǔ)言編寫(xiě)。
時(shí)鐘管理單元,使用XILINX的DCM實(shí)現(xiàn)倍頻,由60MHz變?yōu)?20MHz。
dcm60 dcmclk60 (
.CLKIN_IN(clk_in),
.RST_IN(~reset),
.CLKIN_IBUFG_OUT(clk_ibufg_out),
.CLK0_OUT(clk_0),
.CLK2X_OUT(clk_2x),
.LOCKED_OUT(locked_out60) );
單口只讀ROM,使用IP核,實(shí)現(xiàn)正弦查找表,數(shù)據(jù)寬度為14位,深度為16384字(14地址位)。ROM核接收的數(shù)據(jù)文件為COE文件,然后轉(zhuǎn)換為mif二進(jìn)制文件格式,COE文件可通過(guò)C語(yǔ)言或MATLAB生成。ROM核的實(shí)現(xiàn)如下:
rom16384 rom16384(
.addr(dds_addr),
.clk(clk_2x),
.dout(dds_data),
.sinit(~reset),);
相位累加器位數(shù)設(shè)置為32位,系統(tǒng)時(shí)鐘120MHz,這樣可實(shí)現(xiàn)小于0.03Hz的頻率分辨率,查找表相位截取低14位。累加器進(jìn)程如下:
always@(posedge clk_2x)
begin
if(dds_countT ==1'b0) //dds_countT為脈沖寬度計(jì)數(shù)器,時(shí)鐘為clk_2x。
dds_start<=1'b1;
else
dds_start<=1'b0;
if(dds_stop=1'b0 && dds_stop_set=1'b0) //dds_stop是周期起停標(biāo)志,dds_stop_set是上位機(jī)控制起停標(biāo)志
begin
if(dds_start==1'b1 )
case (psk)
2'b00:dds_acc<=phase1;
2'b01:dds_acc<=phase2;
2'b10:dds_acc<=phase3;
2'b11:dds_acc<=phase4;
endcase;
else
dds_acc<=dds_acc + dds_freq_add;//dds_freq_add對(duì)于設(shè)置的QPSK載波頻率。
end;
if(dds_countT<=countF_set && dds_countT>1) // countF_set為設(shè)置的QPSK脈沖寬度對(duì)應(yīng)的數(shù)值。
dds_addr<=dds_acc[31:18] ;
else
dds_addr<=14'b00000000000000;
end;
end;
DDS信號(hào)的控制實(shí)現(xiàn)
上位機(jī)通過(guò)PCI總線實(shí)現(xiàn)信號(hào)參數(shù)的讀寫(xiě)控制。因本系統(tǒng)中只需PCI實(shí)現(xiàn)信號(hào)參數(shù)的控制,數(shù)據(jù)量不大,故配置PCI9054為PCI的從目標(biāo)(Slave),C模式。
在FPGA中實(shí)現(xiàn)參數(shù)寄存器,實(shí)時(shí)讀取PCI總線的數(shù)據(jù)并更新。FPGA本地總線的讀寫(xiě)通過(guò)三態(tài)門(mén)控制。實(shí)現(xiàn)代碼如下:
assign data_inout=(enout)? data_out:32'bzzzzzzzz;
always@(clk)
begin
data_in<=data_inout;
end
讀寫(xiě)實(shí)現(xiàn)通過(guò)狀態(tài)機(jī)程序?qū)崿F(xiàn),讀寫(xiě)狀態(tài)流程圖如圖3。