基于FPGA的QPSK信號源的設(shè)計與實現(xiàn)
相位累加器位數(shù)設(shè)置為32位,系統(tǒng)時鐘120MHz,這樣可實現(xiàn)小于0.03Hz的頻率分辨率,查找表相位截取低14位。累加器進(jìn)程如下:
本文引用地址:http://www.ex-cimer.com/article/86523.htmalways@(posedge clk_2x)
begin
if(dds_countT ==1'b0) //dds_countT為脈沖寬度計數(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是上位機控制起停標(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對于設(shè)置的QPSK載波頻率。
end;
if(dds_countT<=countF_set && dds_countT>1) // countF_set為設(shè)置的QPSK脈沖寬度對應(yīng)的數(shù)值。
dds_addr<=dds_acc[31:18] ;
else
dds_addr<=14'b00000000000000;
end;
end;
DDS信號的控制實現(xiàn)
上位機通過PCI總線實現(xiàn)信號參數(shù)的讀寫控制。因本系統(tǒng)中只需PCI實現(xiàn)信號參數(shù)的控制,數(shù)據(jù)量不大,故配置PCI9054為PCI的從目標(biāo)(Slave),C模式。
在FPGA中實現(xiàn)參數(shù)寄存器,實時讀取PCI總線的數(shù)據(jù)并更新。FPGA本地總線的讀寫通過三態(tài)門控制。實現(xiàn)代碼如下:
assign data_inout=(enout)? data_out:32'bzzzzzzzz;
always@(clk)
begin
data_in<=data_inout;
end
讀寫實現(xiàn)通過狀態(tài)機程序?qū)崿F(xiàn),讀寫狀態(tài)流程圖如圖3。
上位機程序設(shè)計
上位機安裝Windows系統(tǒng),傳統(tǒng)上,PCI的驅(qū)動通過微軟的DDK實現(xiàn)WDM驅(qū)動程序,本信號源設(shè)計中采用Windriver軟件,可方便地讀寫主機給PCI9054系統(tǒng)板分配的內(nèi)存及I/O資源,并可生成inf文件和基于VC等開發(fā)環(huán)境的程序文件。
結(jié)論
試驗表明,以本文所介紹的方法產(chǎn)生的信號源具有很好的性能,5MHz時連續(xù)波點頻的雜散SFDR達(dá)到70dB以上,輸出信號的頻率覆蓋短波波段,可達(dá)30MHz以上。在實際應(yīng)用中,還可以加上線性調(diào)頻等其他信號形式。若信號頻段在超短波以上,可用DDS產(chǎn)生固定中頻,經(jīng)數(shù)字上變頻和DAC芯片(如AD公司的AD9857)上變頻后輸出,該方法具有很強的可擴展性。
評論