预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共40页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

DDS技术是一种把一系列数字形式的信号通过DAC转换成模拟形式的信号合成技术,目前使用最广泛的一种DDS方式是利用高速存储器作查找表,然后通过高速DAC输出已经用数字形式存入的正弦波。 DDS技术具有频率切换时间短(<20ns),频率分辨率高(0.01Hz),频率稳定度高,输出信号的频率和相位可以快速程控切换,输出相位可连续,可编程以及灵活性大等优点,它以有别于其他频率合成方法的优越性能和特点成为现代频率合成技术中的姣姣者。DDS广泛用于接受机本振、信号发生器、仪器、通信系统、雷达系统等,尤其适合跳频无线通信系统。 11.2系统设计方案图11.1DDS基本原理图11.2.2DDS的FPGA实现设计 根据图11.1,并假定相位控制字为0,这时DDS的核心部分相位累加器的FPGA的设计可分为如下几个模块:相位累加器SUM99、相位寄存器REG1、正弦查找表ROM和输出数据寄存器REG2,其内部组成框图如图11.2所示。图中,输入信号有时钟输入CLK,使能端EN,复位端RESET,频率控制字K,输出信号为Q。 图11.2DDS内部组成框图首先利用MATLAB或C语言编程对正弦函数进行采样;然后对采样数据进行二进制转换,其结果作为查找表地址的数值。 用MATLAB语言编写的正弦函数数据采集程序如下: CLEARTIC; T=2*PI/1024; t=[0:T:2*pi]; y=255*sin(t); round(y); 用C语言编写的正弦函数数据采样程序如下: #include"stdio.h" #include"math.h" Main() {intI; Floats;For(i=0;i<1024;i++) {s=sin(actan(1)*8*i/1024); Printf("%d,%d;\n",(int)((s+1)*1023/2)); } } 两个程序运行之后所得结果是一致的。 11.3主要VHDL源程序CLK:INSTD_LOGIC; EN:INSTD_LOGIC; RESET:INSTD_LOGIC; OUT1:OUTSTD_LOGIC_VECTOR(9DOWNTO0)); ENDENTITYSUM99; ARCHITECTUREARTOFSUM99IS SIGNALTEMP:STD_LOGIC_VECTOR(9DOWNTO0); BEGIN PROCESS(CLK,EN,RESET)IS BEGIN IFRESET='1'THEN TEMP<="0000000000"; ELSE IFCLK'EVENTANDCLK='1'THEN IFEN='1'THEN TEMP<=TEMP+K; ENDIF; ENDIF; ENDIF; OUT1<=TEMP; ENDPROCESS; ENDARCHITECTUREART;11.3.2相位寄存器REG1的VHDL源程序 --REG1.VHD(REG2.VHD与REG1.VHD相似) LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; ENTITYREG1IS PORT(D:INSTD_LOGIC_VECTOR(9DOWNTO0); CLK:INSTD_LOGIC; Q:OUTSTD_LOGIC_VECTOR(9DOWNTO0)); ENDENTITYREG1; ARCHITECTUREARTOFREG1IS BEGIN PROCESS(CLK)IS BEGIN IF(CLK'EVENTANDCLK='1')THEN Q<=D; ENDIF; ENDPROCESS; ENDARCHITECTUREART; 11.3.3正弦查找表ROM的VHDL源程序 --ROM.VHD LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; USEIEEE.STD_LOGIC_ARITH.ALL; USEIEEE.STD_LOGIC_UNSIGNED.ALL; ENTITYROMIS PORT(ADDR:INSTD_LOGIC_VECTOR(9DOWNTO0); CLK:INSTD_LOGIC; OUTP:OUTSIGNED(8DOWNTO0));ENDENTITYROM; ARCHITECTUREARTOFROMIS BEGIN PROCESS(CLK)IS BEGIN IF(CLK'EVENTANDCLK='1')THEN CASEADDRIS WHEN"0000000000"=>OUTP<="000000000"; WHEN"0000000001"=>OUTP<="000000010"; WHEN"0000000010"=>OUTP<="000000011"; WHEN"0000000011"=>OUTP<="000000101";WHEN"