当前位置:文档之家› FPGA_ASIC-基于FPGA的正交数字混频器的设计与验证

FPGA_ASIC-基于FPGA的正交数字混频器的设计与验证

基于FPGA的正交数字混频器的设计与验证摘 要:本文研究了用DDS加乘法器实现正交数字混频器的设计及其完整的验证方法,用DDS产生的正/余弦正交本振序列与模拟信号通过A/D采样数字化后的数字序列相乘,再通过数字低通滤波实现数字混频。

其中DDS采用正弦和余弦波形幅值存储功能依靠片内EAB 实现,省去了片外ROM,符合片上系统(SoC)的思想;用MATLAB软件增强QUARTUS的仿真功能,得到的仿真结果完整而且直观。

关键词:FPGA;NCO;DDS;MATLAB 中图分类号:TN773Design and Certification of Quadrature NCO Based on FPGA Abstrct: The paper mainly studies the design and certification of quadrature NCO realized by DDS and multiplication based on FPGA, sin and cos sequences are produced by DDS, and the two output sequences then multiplicate with the input digital sequence, after by LPF we can get the results of quadrature NCO. in which, the wave amplitude are stored in memory of on-chip EAB. The emulational function of QUARTUS are enganced by MATLAB, and the result is rounded and intuitionistic.Key Words: FPGA;NCO;DDS;MATLAB1 概述数字混频器是数字通讯中调制解调单元必不可少的部分,同时也是各种数字频率合成器和数字信号发生器的核心。

随着数字通信技术的发展,对传送数据的精度和速率要求越来越高。

如何得到可数字的高精度的高频载波信号是实现高速数字通信系统必须解决的问题,利用FPGA(现场可编程逻辑门阵列)实现数字混频具有设计灵活、精确度高、频率高和稳定性好等优点,可以产生各种调制信号,广泛应用于通信、遥测、电子对抗和仪表工业等领域。

数字混频可采用CORDIC加累加器或DDS加乘法器实现,由于DDS加乘法器实现比较简捷因此得到普遍应用, DDS产生正/余弦正交本振序列与模拟信号通过A/D采样数字化后的数字序列相乘,再通过数字低通滤波实现数字混频。

2 DDS的实现2.1 DDS的原理与设计DDS的作用是产生正交的正弦和余弦样本。

正(余)弦样本可以用实时计算的方法产生,但这只适用于信号采样频率很低的情况。

在软件无线电超高速信号采样频率的情况下,用实时计算的方法实现比较困难。

此时,产生正弦波样本的最有效、最简便的方法就是查表法,即事先根据各个正弦波相位计算好相位的正弦值,并按相位角度作为地址存储该相位的正弦值数据,因此,DDS采用图1所示的顶层电路。

其基本功能包括:接收频率控制字FSW进行相位累加;以相位累加器的输出为地址,对存有正 (余) 弦幅度值的存储器进行寻址。

输出的离散幅度码即为DDS的输出结果,用查表法实现DDS的性能指标取决于查表的深度和宽度,即取决于表示相位数据的位数和表示正弦值数据的位数。

假设存储器有1024个波形数据,系统时钟频率FCLK为1.024MHZ,相位累加器字长N=10:当频率字FSW=1,在系统时钟作用下,相位累加器累加1024个系统时钟后溢出,即经过1024个系统时钟输出波形循环一周,系统输出频率FOUT=FCLK/1024=1KHZ。

当频率字FSW=2,相位累加器累加512个系统时钟后溢出,即经过512个系统时钟输出波形循环一周,系统输出频率FOUT=FCLK/512=2KHZ。

可见,输出频率FOUT与系统时钟频率FCLK关系为FOUT=FSW*FCLK/2N,从存储器中读出数据的过程是对存储器所存储波形的再次采样,一个周期查表的点数即为采样点数,根据奈奎斯特定理,每个周期至少采样2点才能重构波形,这样理论上最大输出频率FMAX=FCLK/2, 而最小输出频率FMIN=FCLK/2N,也是系统的频率分辨率。

根据上述原理, 系统输出频率FOUT只与频率字FSW, 系统时钟频率FCLK和相位累加器字长N有关, 当系统输出频率FOUT和相位累加器字长N固定时,通过改变频率字FSW可以方便地改变系统输出频率FOUT; 频率分辨率则只与系统时钟频率FCLK和相位累加器字长N有关。

图1 DDS的顶层电路因此,DDS的设计可分为两个功能模块:相位累加器模块和正 (余)弦幅值存储器模块。

两个模块的设计过程如下。

(1)相位累加器模块采用VHDL语言实现:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity jia isport( clk: in std_logic;freqin: in std_logic_vector(9 downto 0);fankui: inout std_logic_vector(9 downto 0);adder: inout std_logic_vector(9 downto 0);romadd: out std_logic_vector(9 downto 0));end entity jia;architecture behave of jia issignal temp:std_logic_vector(9 downto 0);beginprocess(clk)begintemp<=freqin;if clk'event and clk='1' thenadder<=temp+fankui;fankui<=adder;end if;romadd<=adder;end process;end architecture behave;(2)正 (余)弦幅值存储器模块采用两个ROM宏实现, 其所包含的ROM表为相位-幅度表,数据由MATLAB语言产生,并以.mif格式作为ROM宏的初始化文件。

2.2 DDS的仿真当FSW=1和512时,QUARTUS下简单的时序仿真结果分别如下图2所示:图2 FSW=1和512时,QUARTUS的时序仿真结果显然,QUARTUS简单的时序仿真难以简单直观的验证结果的正确性,普通用户一般并不会接触到大型专用仿真软件,最常用的还是MATLAB之类软件,下面就用MATLAB软件来增强QUARTUS的仿真功能。

将上述仿真后的波形输入文件另存为.TBL文件,并将最前面段英文要删除,最后一行删除后,用MATLAB分别读出FSW=1和FSW=512时的.TBL文件中相应的内容,得到仿真结果如图3。

%读取tbl文件clc;clear all;fid=fopen('fmin.tbl','r'); % ,'fmax.tbl's=fscanf(fid,'%s',1); % 文件读指针指向第一个字符i=1;N=3; % 输出的16进制数据位数while feof(fid)~=1s1=s(1,1:length(s)-1); % s1为时间字符,该字符最后一位为>,必须除去(即-1) time=str2num(s1); % 将CHAR转为NUMclk_temp=fscanf(fid,'%s',1); % 指向下一个符号equal=fscanf(fid,'%s',1); % 跳过一个符号,s指向"="test=mod(time,5); % 以5为周期对数据取样,剔除野值outputcos_temp=fscanf(fid,'%s',1); % fid指向输出第一个数据,COSoutputsin_temp=fscanf(fid,'%s',1); % fid指向输出第二个数据,SINif (equal== '=')&(test==0) % 剔除周期以外的野值,并确认数据之前为"="outputcos(i)=hex2dec(outputcos_temp(1,1:N)); % 将16进制数转为10进制数if outputcos(i)>=(2^(4*N-1)) % 负数补码转为10进制outputcos(i)=-(2^(4*N))+outputcos(i);endoutputsin(i)=hex2dec(outputsin_temp(1,1:N)); % 将16进制数转为10进制数if outputsin(i)>=(2^(4*N-1)) % 负数补码转为10进制outputsin(i)=-(2^(4*N))+outputsin(i);endtt(i)=time/1000; % t单位ns,转换为us.clk(i)=str2num(clk_temp);i=i+1;ends=fscanf(fid,'%s',1); % 指向下一行第一个符号endfclose(fid);figure(1);subplot(3,1,1),plot(clk);grid;subplot(3,1,2),plot(outputcos,'b');subplot(3,1,3),plot(outputsin,'g');grid;图3 用MATLAB读出.TBL文件的仿真结果(FSW分别为1和512时的系统时钟, 余弦和正弦波形)3 乘法器的实现用原理图法设计乘法器,可使用Altera 参数化模型库中的宏模块“lpm_mult”。

设计的12×12 位有符号二进制数乘法器的电路图。

将图1的产生的正/余弦正交本振序列分别与模拟信号通过A/D采样数字化后的数字序列相乘,再通过数字低通滤波即可实现数字混频。

4 结论本文创新点:利用VHDL语言完成了DDS加乘法器实现正交数字混频器的设计,用MATLAB 软件增强QUARTUS的仿真功能,得到的仿真结果完整直观,该方法可以解决用FPGA设计复杂模块时QUARTUS设计软件存在的仿真结果不完整需要多次在硬件上测试修改的问题,而且也不需要大型的仿真软件。

相关主题