DDS电路设计.docx
- 文档编号:709764
- 上传时间:2022-10-12
- 格式:DOCX
- 页数:14
- 大小:445.26KB
DDS电路设计.docx
《DDS电路设计.docx》由会员分享,可在线阅读,更多相关《DDS电路设计.docx(14页珍藏版)》请在冰豆网上搜索。
DDS电路设计
DDS电路设计
摘要
本文介绍了DDS的原理,给出了用AlteraCyclone1EP1CQ240C8FPGA芯片实现直接数字频率合成器的工作原理、设计思路、电路结构和仿真结果以及频谱纯度分析。
关键词:
直接数字频率合成(DDS);现场可编程门阵列(FPGA);相位累加器
1、DDS原理概述
1、DDS在基本原理
框图如图所示。
它主要由标准参考频率源、相位累加器、波形存储器、数/模转换器、低通平滑滤波器等构成。
其中,参考频率源一般是一个高稳定度的晶体振荡器,其输出信号用于DDS中各部件同步工作。
DDS的实质是对相位进行可控等间隔的采样。
为实现全数字化的频率可调的频率合成器,本系统基于FPGA采用VerilogHDL设计而成直接数字频率合成器(DDS)。
系统由加法器、累加寄存器、波形存储器、D/A转换器、低通滤波器构成。
在FPGA里面做到的是D/A转换器之前的部分。
图一DDS原理图
DDS系统的核心是相位累加器,它由一个N位累加器与N位相位寄存器构成。
时钟脉冲每触发一次,累加器便将频率控制数据与相位寄存器输出的累加相位数据相加,然后把相加后的结果送至相位寄存器的数据输入端。
相位寄存器将累加器在上一个时钟作用后所产生的新相位数据反馈到累加器的输入端,以使加法器在下一个时钟的作用下继续与频率控制数据相加。
这样,相位累加器在参考时钟的作用下将进行线性相位累加,当相位累加器累加满时,就会产生一次溢出,以完成一个周期性的动作,这个周期就是DDS合成信号的一个频率周期,相位累加器的溢出频率就是DDS输出的信号频率。
2、DDS参数计算
相位寄存器每经过2N/M个fc时钟后回到初始状态,相应地正弦查询表经过一个循环回到初始位置,整个DDS系统输出一个正弦波。
输出正弦波频率:
本设计中,N=10,M为位宽为32的频率控制字,fc=20Mhz
2、DDS电路结构设计
1、电路描述
接口信号
名称
位宽
方向
描述
备注
freq
32
输入
输入频率字
reset
1
输入
复位
高电平异步复位
clock
1
输入
时钟
上升沿有效
sinout
8
输出
输出波形
2补码格式
2、电路结构
DDS模块RTLViewer
累加器ACC模块RTLViewer
ROM模块RTLViewer
3、DDS电路仿真结果
1、Quartus时序仿真
设定时序分析工具为Classtiminganalyzertool,观察电路最大运行频率fMAX
用二补码格式观察
2、Modelsim时序仿真
参考时钟fc=20Mhz
(1)当freq=32'b0000_0001_0000_0000_0000_0000_0000_0000;
Modelsim仿真波形如图fo=78Khz
(2)当freq=32'b0000_0010_0000_0000_0000_0000_0000_0000;
Modelsim仿真波形如图fo=156Khz
(3)当freq=32'b0000_0100_0000_0000_0000_0000_0000_0000;
Modelsim仿真波形如图fo=
(4)当freq=32'b0000_1000_0000_0000_0000_0000_0000_0000;
Modelsim仿真波形如图fo=625Khz
4、频谱纯度分析
可见,随着频率控制字的减小,频谱的杂散现象越来越严重。
这是由相位截断所造成的。
5、代码附录
1、dds模块(顶层模块)
moduledds(reset,clk20,freq,sinout);
inputreset,clk20;
input[31:
0]freq;
output[7:
0]sinout;
wire[31:
0]A;
wire[9:
0]address;
assignaddress=A[31:
22];
accu0(.reset(reset),.clock(clk20),.dataa(freq),.sum(A));
romu1(.clock(clk20),.address(address),.RD(sinout));
endmodule
2、acc模块
moduleacc(reset,clock,dataa,sum);
inputreset,clock;
input[31:
0]dataa;
reg[31:
0]datar;
output[31:
0]sum;
reg[31:
0]sum;
always@(posedgeclockorposedgereset)begin
if(reset)begin
sum<=0;
datar<=0;
end
elsebegin
sum<=sum+datar;
datar<=dataa;
end
end
endmodule
3、Rom模块
。
。
。
。
。
。
。
10'd1020:
RD=#1-8'd3;//-3
10'd1021:
RD=#1-8'd2;//-2
10'd1022:
RD=#1-8'd2;//-2
10'd1023:
RD=#1-8'd1;//-1
endcase
endmodule
//modulerom,asynchronizedrom
modulerom(
clock,//clock
address,//readaddress
RD);//readdata
inputclock;
input[9:
0]address;
output[7:
0]RD;
reg[7:
0]RD;
always@(posedgeclock)
case(address)
10'd0:
RD=#18'd0;//0
10'd1:
RD=#18'd1;//1
10'd2:
RD=#18'd2;//2
10'd3:
RD=#18'd2;//2
clear
depth=1024;%存储单元数2^10;
widths=8;%数据宽度为8位;
fidc=fopen('','wt');%以"wt"的形式打开,\n为换行
for(x=1:
depth)
y=round(127*sin(2*pi*(x-1)/1024));
ify>=0
fprintf(fidc,'10''d%d:
RD=#18''d%d;//%d\n',x-1,y,y);
else
fprintf(fidc,'10''d%d:
RD=#1-8''d%d;//%d\n',x-1,-y,y);
end
end
fclose(fidc);
其中,rom表的数据用matlab脚本自动生成,代码如下
*另外,为了做频谱分析,避免数据制式转换带来的麻烦,写ROM的时候,我又在原来的正弦波基础上加了个直流分量。
clear
depth=1024;%存储单元数2^10;
widths=8;%数据宽度为8位;
fidc=fopen('','wt');%以"wt"的形式打开,\n为换行
for(x=1:
depth)
y=round(127*sin(2*pi*(x-1)/1024)+128);%加上一个直流分量
fprintf(fidc,'10''d%d:
RD=#18''d%d;\n',x-1,y);
end
fclose(fidc);
等到要从Modelsim中读取数据再导入到matlab的时候,我又把这个直流分量减去。
clear
fs=;
W=2048;
fid=fopen('','r');
fori=1:
1024;
num(i)=fscanf(fid,'%d',1)-128;
end
fclose(fid);
plot(num);
gridon
title('原始信号')
xlabel('时间')
N=length(num);%计算波形数据的长度
Hamming=window(@hamming,N)';%加窗函数Hanning窗
dataout=num.*Hamming;
H=fft(dataout,W);%傅立叶变换
magH=abs(H);
dBH=20*log10(magH);%幅度换算成dB值
f=fs*(1:
W)/W;
figure
%画图
xlabel('Frequencyofthewave/Hz');
ylabel('Amplitudeofthewave/V');
plot(f(1:
W/8),dBH(1:
W/8));
gridon
xlabel('Hz');
ylabel('dB');
因为没有找到很好的解决数据制式问题的办法,所以我就用这个办法也能从matlab中再把波形还原出来。
Testbench
`timescale1ns/1ps
moduledds_vlg_tst();
regclk20;
reg[31:
0]freq;
regreset;
wire[7:
0]sinout;
integerw_file;
ddsi1(
lk20(clk20),
.freq(freq),
.reset(reset),
.sinout(sinout)
);
parameterperiod=50;
initial
begin
clk20=0;
freq=32'b0000_0001_0000_0000_0000_0000_0000_0000;
w_file=$fopen("");
forever
#(period/2)clk20=~clk20;
end
initial
begin
reset=1;
#1000reset=0;
end
always@(posedgeclk20)begin
$fdisplay(w_file,"%d",sinout);
end
endmodule
参考文献
[1]张厥盛,曹丽娜.锁相与频率合成技术[M].成都:
电子科技大学出版社
[2]AlteraCorporation,2001
[3]夏宇闻Verilog数字系统设计教程[M].北京航空航天大学出版社.2003
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DDS 电路设计