FPGA设计与应用
直接数字频率合成器DDS实验报告
班级: 1105103 姓名: 郭诚 学号: 1110510304 日期:2014年10月19日
哈尔滨工业大学电子与信息工程学院 FPGA设计与应用 实验指导书
实验性质:验证性 开课单位:电信院 一、实验目的
实验类型:必做 学时:2学时
1、了解直接数字频率合成器的基本原理; 2、掌握利用MATLAB生成正弦波波形数据的方法; 3、掌握使用LPM_ROM的方法;
4、掌握利用SignalTap II将数字信号转换为模拟信号观测的方法 二、实验准备
2.1 直接数字频率合成器基本原理(1分)
答:DDS(Direct Digital Frequency Synthesis)是第三代频率合成技术,从”相位”的概念出发进行频率合成,这种方法不仅可以产生不同频率的正弦波,而且可以控制波形的初始相位。主要由标准参考频率源、相位累加器、波形存储器、数/模转换器、低通平滑滤波器等构成(本次实验未使用DAC和低通平滑滤波器)。其框图如下:
随着地址计数器逐步执行每个存储器位置,每个位置相应的信号数字幅度会驱动D/A转换器,生成模拟信号输出。
如果系统时钟为fclk,频率字为M,N为量化位宽,那么直接数字频率合成器输出的时钟频率为
fout?M?fclk2N
2.2 直接数字频率合成器的仿真验证(1分) 答:仿真的波形如下: 学号为4,频率字为9。
1
哈尔滨工业大学电子与信息工程学院 FPGA设计与应用 实验指导书
三、代码及测试
3.1 MATLAB生成正弦波波形数据的代码(1分) 答:用MATLAB生成正弦波数据的代码如下:
a=0:1/1024:1;
b=1024*0.5*(1+sin(2*pi*a)); dec2bin(b,10)
3.2 直接数字频率合成器的原理图及代码(1分) 答:原理图及相位累加器代码如下:
代码如下: library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; library lpm;
use lpm.lpm_components.all; entity phase_adder is port(
clk : in std_logic;
freq_word : in std_logic_vector(3 downto 0); addr_out : out std_logic_vector(9 downto 0)
2
哈尔滨工业大学电子与信息工程学院 FPGA设计与应用 实验指导书
);
end phase_adder;
architecture behavior of phase_adder is
signal addr_temp : std_logic_vector(9 downto 0); signal freq_temp : std_logic_vector(9 downto 0); begin
freq_temp <= \addr_gen: process(clk) begin
if clk'event and clk='0' then
addr_temp <= addr_temp + freq_temp; end if; end process addr_gen; addr_out <= addr_temp; end behavior;
3.3 SignalTap II波形测试结果(1分) 答:逻辑分析仪波形测试结果如下:
四、论述
依据自己学号所对应的fclk值(规则为:50MHz+学号最后两位*2MHz,例如学号为1090510215同学所对应的频率为80MHz),假设频率字位宽为4,正弦波每周期采样点数为210,试讨论该直接数字频率合成器的频率精度及所能输出的正弦信号的频率范围。(1分)
答:学号为4,对应的F=58MHZ 频率精度为: F/210=56641Hz
当频率字为0001时,输出频率为: 1*56641=56641HZ 当频率字为1111时,输出频率为:15*56641=849615 MHZ 所以DDS能输出的频率范围为:80078HZ~1.2MHZ。
3

