基于FPGA的QPSK信号源的设计与实现
相位累加器位数设置为32位,系统时钟120MHz,这样可实现小于0.03Hz的频率分辨率,查找表相位截取低14位。累加器进程如下:
本文引用地址:https://www.eepw.com.cn/article/86523.htmalways@(posedge clk_2x)
begin
if(dds_countT ==1'b0) //dds_countT为脉冲宽度计数器,时钟为clk_2x。
dds_start<=1'b1;
else
dds_start<=1'b0;
if(dds_stop=1'b0 && dds_stop_set=1'b0) //dds_stop是周期起停标志,dds_stop_set是上位机控制起停标志
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对于设置的QPSK载波频率。
end;
if(dds_countT<=countF_set && dds_countT>1) // countF_set为设置的QPSK脉冲宽度对应的数值。
dds_addr<=dds_acc[31:18] ;
else
dds_addr<=14'b00000000000000;
end;
end;
DDS信号的控制实现
上位机通过PCI总线实现信号参数的读写控制。因本系统中只需PCI实现信号参数的控制,数据量不大,故配置PCI9054为PCI的从目标(Slave),C模式。
在FPGA中实现参数寄存器,实时读取PCI总线的数据并更新。FPGA本地总线的读写通过三态门控制。实现代码如下:
assign data_inout=(enout)? data_out:32'bzzzzzzzz;
always@(clk)
begin
data_in<=data_inout;
end
读写实现通过状态机程序实现,读写状态流程图如图3。
上位机程序设计
上位机安装Windows系统,传统上,PCI的驱动通过微软的DDK实现WDM驱动程序,本信号源设计中采用Windriver软件,可方便地读写主机给PCI9054系统板分配的内存及I/O资源,并可生成inf文件和基于VC等开发环境的程序文件。
结论
试验表明,以本文所介绍的方法产生的信号源具有很好的性能,5MHz时连续波点频的杂散SFDR达到70dB以上,输出信号的频率覆盖短波波段,可达30MHz以上。在实际应用中,还可以加上线性调频等其他信号形式。若信号频段在超短波以上,可用DDS产生固定中频,经数字上变频和DAC芯片(如AD公司的AD9857)上变频后输出,该方法具有很强的可扩展性。
评论