直接数字合成器静
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《直接数字合成器》
设计报告
姓名:王静
学号: 20095006 班级:微电子一班
专业:微电子
指导教师:杨小平、杞宁
时间: 2012年7月12日星期四
目录
1 课程设计题目及要求 (2)
2 DDS信号发生器原理…………………………………2-3
3基本DDS结构…………………………………………3-4 4各模块功能及介绍……………………………………4-10
5仿真结果 (10)
6硬件调试结果及分析………………………………11-12
7心得与体会 (12)
8 参考书目 (13)
一、课程设计题目及要求
课程设计题目:直接数字合成器(DDS)
课程设计要求:
①输入不少于8位频率控制字,不少于8位相位控制字。
②10位2进制数据输出,直接接GW-ADDA板上的D/A。
③时钟信号使用GW48-PK2上提供的信号
④以正弦信号为例。
⑤撰写规范的课程设计报告,要求小四字体,内容加图片不少
于8页。
二. DDS信号发生器原理
对于正弦信号发生器,它的输出可以用下式来描述:
其中,Sout是指该信号发生器的输出信号波形,fout只输出
信号对应的频率。
上式的表述对于时间t是连续的,为了用数
字逻辑实现该表达式,必须进行离散化处理,用基准时钟clk
进行抽样,令正弦信号的的相位θ为
在一个clk周期Tclk,相位θ的变化量为
其中fclk指clk的频率对于2π可以理解为“满”相位,为了
对Δθ进行数字量化,把2π切割成2N,用词每个clk周期的相
位增量Δθ用量化值BΔθ来描述:BΔθ=(Δθ·2N)/2π,
且BΔθ为整数与上式联立可得:
显然,信号发生器可以描述
其中θk-1指前一个clk周期的相位值,同样得出
由以上推倒可以得出,只要对相位的量化值进行简单的累加
运算,就可以得到正弦信号的当前相位值,而用于累加的香
味增量量化值BΔθ决定了信号的输出频率fout并呈现简单
的线性关系。
三、基本DDS结构
直接数字合成器DDS就是根据以上原理而设计的数控频率合
成器,下图为其基本DDS结构,主要有相位累加器、相位调制
器、正弦ROM查找表构成图中的相位累加器、相位调制器、正
弦ROM查找表是DDS结构中的数字部分,
1. 相位累加器
相位累加器是DDS的核心,完成相位累加的过程其输入可以称
为频率字输入在输入时增加一个寄存器可以使频率字改变时
不会干扰相位累加器的正常工作
2. 相位调制器
相位调制器接受相位累加器的相位输出,加上一个相位偏移值,可用于信号的相位调制。
加一个寄存器可用于
信号的同步保持。
如图10所示
3. 正弦ROM查找表
正弦ROM的输入是相位调制器的输出,即ROM的地址值,输出送往DAC转化为模拟信号。
四、各模块功能及介绍
1、频率控制字的十进制加法器
主要是用于在输入一个频率字的时候,使之产生一系列数字,
从而产生相应的地址,对应相应的rom数据,具体程序如下:
module Fadd(out,clk,A,B);
output[9:0] out;
input clk;
input[9:0]A,
B;
reg[9:0] out;
always @(posedge clk )
out=A+B;
endmodule
2、相位控制字的十进制加法器
主要是用于在输入一个相位字的时候,产生相位偏移值,可用于信号的相位调制,具体程序如下:
module Padd(out,clk,A,B);
output[9:0] out;
input clk;
input[9:0]A,
B;
reg[9:0] out;
always @(posedge clk )
out=A+B;
endmodule
3、正弦ROM查找表
正弦ROM的输入是相位调制器的输出,即ROM的地址值,输出送往DAC转化为模拟信号。
首先通过程序生成sin.mif文件,这个程序如下
clear;
depth=1024;
width=10;
T=2*pi;
fsin=fopen('sin.mif','wt'); %以"wt"的形式打开,与C相同
% 写入sin_rom.mif %
fprintf(fsin,'DEPTH=%d;\n',depth);
fprintf(fsin,'WIDTH=%d;\n',width);
fprintf(fsin,'ADDRESS_RADIX=DEC;\n'); %dec为十进制缩写,与hex意义相同
fprintf(fsin,'DATA_RADIX =DEC;\n');
fprintf(fsin,'CONTENT BEGIN\n');
for(x=0:depth-1)
fprintf(fsin,'%d:%d;\n',x,round(1023*(sin(T*x/1024)+ 1)/2));
end
fprintf(fsin,'end;');
fclose(fsin);
然后会生成ROM数据文件sin.mif,
主程序会调用这个模块,但必须通过以下设置:
在Quartus II界面点击“MegaWizard Plug-In Manager”,
设置好后点击next:
这里我们用的是10位,要设置下,接着继续next
点击next,所有选项默认不变直到最后finish。
最后主程序为
`include "Padd.v"
`include "Fadd.v"
`include "reg_10.v"
module DDS(rst,FW,clk,Q,PW,rst2);
output[9:0] Q;
input rst,
clk,
FW,
PW,
rst2;
wire[7:0] FW,
PW;
wire[9:0] AR;
wire[9:0] Q1,
Q2;
reg[9:0] Q,
QF,
QP;
/*频率控制字和相位控制字的同步寄存器*/ always @(posedge clk or posedge rst2) if(rst2)
begin
QF<=0;
QP<=0;
end
else
begin
QF<=FW;
QP<=PW;
end
/*功能模块调用*/
Fadd fadd(.clk(clk),
.A(Q2),
.B(QF),
.out(Q1));
reg10 addreg (.clk(clk),
.rst(rst),
.Q_out(Q2),
.D_int(Q1));
Padd padd(.clk(clk),
.A(Q2),
.B(QP),
.out(AR));
ROMS IC(.address(AR),
.inclock(clk),
.q(Q));
endmodule
在经过以上设置后,主程序便可以仿真。
五、仿真结果
从仿真结果可以看出,第一个地址输出需要5个时钟,后面只需要2个时钟就可以的得到一个地址。
六、硬件调试结果及分析
在“Assignment”菜单下选择”pins”项,进行管脚锁定。
管脚锁定后再次进行编译,成功后选择“tools”菜单下“programmer”项进行下载。
用示波器进行波形观察。
选择模式1。
键1键2用来控制频率字的输入,键3键4控制相位字的输入,clock0选择12MHz,。
按动键1键2调节频率子输入,键3键4调节相位字输入
结果如图所示:
当改变频率字时波形变化如图所示
当改变相位字时波形如所示
当同时改变频率字与相位字时,波形如图所示
硬件调试结果分析:该调试的结果满足了实验的要求,验证了DDS信号发生器的功能,即能够调节频率与相位。
七、心得与体会
通过这次的课程设计,我复习并进一步熟练了QuartusⅡ的基本功能和操作,掌握了Verilog HDL语言的设计输入、编译、仿真和调试等过程。
我的几点体会如下:首先,在编写顶层文件的过程中,要注意保证设计的芯片与书上要求的一致,这样才能减少在编译过程中的错误;其次,ROM中关于波形的设置要与.m文件中的参数一致,以减少波形的失真;最后,连接试验箱下载时要注意示波器与实验箱连接处是否良好,以减少波形失真。
此外通过调节实验箱上的幅度按钮可以保证示波形的完整。
通过这次实验,我也发现了自己的知识缺陷。
在定制ROM的过程中,没将波形参数与.m文件中的参数保持一致,导致后面的步骤出现了误差。
在使用硬件实验箱进行下载时,由于对实验箱构造不熟练,浪费了大量时间。
这次的EDA课程设计让我感觉到,QuartusⅡ这款软件的功能的强大,也深深体会到自己掌握的功能只是九牛一毛!提升的空间还很大,后面的学习中,我将积极的把所学知识与实际操作相结合,增加动手实践的经历,探索并掌握更多QuartusⅡ的未知功能。
八、参考书目:
[1]夏宇闻.Verilog数字系统设计教程:北京航空航天大学出版社.2008.
[2]张文爱. EDA技术与FPGA应用设计:电子工业出版社.2011。