DDS信号发生器EDA技术课程设计2.docx
《DDS信号发生器EDA技术课程设计2.docx》由会员分享,可在线阅读,更多相关《DDS信号发生器EDA技术课程设计2.docx(13页珍藏版)》请在冰豆网上搜索。
![DDS信号发生器EDA技术课程设计2.docx](https://file1.bdocx.com/fileroot1/2023-2/28/beece088-e8fb-4676-b99f-1cecdbac38ce/beece088-e8fb-4676-b99f-1cecdbac38ce1.gif)
DDS信号发生器EDA技术课程设计2
EDA技术课程设计报告
课题名称:
DDS直接数字式频率合成器的设计
学生姓名:
李艳凤091809017
同组姓名:
张苗091809037
学生班级:
应电Q0931班
指导老师:
张淑玲
所属院系:
管理技术学院
设计时间:
2011-06-20
目录
一概述1
(一)设计背景及意义1
(二)设计要求1
二设计方案1
(一)直接数字式频率合成器(DDS)的基本结构1
(二)基本DDS结构的常用参量计算2
(三)DDS的工作原理2
三软硬件设计3
(一)VHDL程序3
(二)ROM源代码7
(三)ROM定制7
(四)仿真波形图8
(五)D/A转换电路8
四调试过程8
五实验结果9
六心得体会9
七参考文献9
直接数字式频率合成器(DDS)的设计
一、设计任务与要求
1、设计任务
设计并制作一个直接数字式频率合成器(DDS),包括加法器、寄存器、存储器和D/A转换器,基本结构如图1所示:
图1直接数字式频率合成器(DDS)的基本结构
2、设计要求
a)输出一路5V的正弦波、方波和三角波信号;
b)频率范围:
10kHz200kHz;
c)结果能用示波器显示。
二、设计方案
直接数字式频率合成(DirectDigitalFrequencySynthesis,简称DDS或DDFS)是近年来发展起来的一种新的频率合成技术。
其主要优点是相对带宽很宽、频率转换时间极短(可小于20ns)、频率分辨率很高(典型值为0.001Hz)、全数字化结构便于集成、输出相位连续、频率、相位和幅度均可实现程控。
DDS由于其频率分辨率极低、频率捷变速度极快、频率跳变时相位连续、相位噪声低、集成度高、体积小、价格较低以及可灵活产生多种信号等传统频率合成技术无可比拟的优点。
2.1基本DDS结构的常用参量计算
a)DDS的输出频率fout。
b)DDS的产生的相位。
c)DDS的频率分辨率。
d)DDS的频率输入字FW计算。
2.2DDS的工作原理
2.2.1相位累加器与频率控制字FW
每来一个时钟脉冲fclk,N位加法器将频率控制字FW与累加寄存器输出的累加相位数据相加,把相加后的结果送至累加寄存器的输入端。
累加寄存器一方面将在上一时钟周期作用后所产生的新的相位数据反馈到加法器的输入端,使加法器在下一时钟的作用下继续与频率控制字FW相加;另一方面将该值作为存储器的地址输出相应的波形数据。
最后经D/A转换成所需要的模拟波形。
相位累加器在基准时钟的作用下,进行线性相位累加,当相位累加器加满量时就会产生一次溢出,这样就完成了一个周期,这个周期也就是DDS信号的频率周期。
DDS输出信号的频率:
=
设基准时钟为50MHz,累加器为32位,则
假定FW=001h,则Fout=(1/
)*50MHz=11.6MHz。
可见,通过设定相位累加器位数和频率控制字可确定输出频率。
2.2.2相位控制字PW
每来一个时钟脉冲fclk,加法器将相位控制字PW与累加寄存器输出的数据相加,把相加后的结果作为波形存储器(ROM)的相位取样地址,这样就可把存储在波形存储器内的波形取样值(二进制编码)经查找表查出,完成相位到幅值转换。
波形存储器的输出送到D/A转换器,将数字量转换成所要求合成频率的模拟量信号。
2.2.3数据存储器
数据存储器采用LPM模块的VHDL文本调用方式实现。
1、ROM的深度为1024,输出的数据为8位;
2、rom_data.mif可参阅下例,设计时根据D/A转换器的输出极性确定相应的取样公式。
rom_data.mif8位正弦波数据文件,用C语言生成。
rom_data.mif
WIDTH=8;
DEPTH=1024;
ADDRESS_RADIX=DEC;
DATA_RADIX=DEC;
CONTENTBEGIN
0:
127;
1:
128;
2:
129;
3:
129;
...
1019:
123;
1020:
124;
1021:
125;
1022:
125;
1023:
126;
END;
三、软硬件设计
3.1VHDL程序
3.1.132位锁存器的VHDL程序
libraryieee;
useieee.std_logic_1164.all;
entityreg32bis
port(load:
instd_logic;
din:
instd_logic_vector(31downto0);
dout:
outstd_logic_vector(31downto0));
end;
architecturebehavofreg32bis
begin
process(load)
begin
ifload'eventandload='1'thendout(31downto0)<=din(31downto0);
endif;
endprocess;
endbehav;
3.1.232位加法器的VHDL程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityadder32bis
port(a:
instd_logic_vector(31downto0);
b:
instd_logic_vector(31downto0);
s:
outstd_logic_vector(31downto0));
end;
architectureoneofadder32bis
begin
s<=a+b;
end;
3.1.3数字移相信号发生器顶层VHDL程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitydds_vhdlis
port(clk:
instd_logic;
fword:
instd_logic_vector(9downto0);
fout:
outstd_logic_vector(7downto0));
end;
architectureoneofdds_vhdlis
componentreg32b
port(load:
instd_logic;
din:
instd_logic_vector(31downto0);
dout:
outstd_logic_vector(31downto0));
endcomponent;
componentadder32b
port(a:
instd_logic_vector(31downto0);
b:
instd_logic_vector(31downto0);
s:
outstd_logic_vector(31downto0));
endcomponent;
componentsin_rom1
port(address:
instd_logic_vector(9downto0);
inclock:
instd_logic;
q:
outstd_logic_vector(7downto0));
endcomponent;
signalf32b,d32b,din32b:
std_logic_vector(31downto0);
begin
f32b(31downto22)<=fword;
f32b(21downto0)<="0000000000000000000000";
u1:
adder32bportmap(a=>f32b,b=>d32b,s=>din32b);
u2:
reg32bportmap(dout=>d32b,din=>din32b,load=>clk);
u3:
sin_rom1portmap(address=>d32b(31downto22),q=>fout,inclock=>clk);
end;
3.2Rom定制
3.3仿真波形图
32位锁存器的仿真波形图
32位加法器仿真波形图
ROM正弦波得仿真波形图
顶层三角波的仿真波形图
顶层方波的仿真波形图
顶层正弦波的仿真波形图
3.4D/A转换电路
数字部分在EDA实验箱上采用VHDL编程实现,输出的信号值由ROM存储,采用查表法输出的数字信号经过D/A转换器DAC0832和LM358(或者为OP07)运放后产生0V到5V之间的电压信号。
图2D/A转换单极性输出设计图
四.调试过程
1、对aader32b和reg32b的调试
Adder32b是加法器,reg32b寄存器主要问题是对仿真波形的调整,把各的时钟设置统一,。
对adder32b加法器的a,b设置为十进制,寄存器的设置为16进制,结果易于观察,仿真图都验证了结果的正确性。
2、对dds_vhdl顶层文件的调试
包括sin_rom的三个波形图的制作,包括做三个波形图,正弦波,方波,三角波的制作,三个波形图通过C语言程序实现,生成zhengxianbo.mif、fangbo.mif、sanjiao.mif文件,再逐个得出仿真波形图。
3、D/A转换电路的调试
在做管脚锁定时候出现的问题是device的修改,接下来就比较顺利了。
4、输出波形调试
然后是连实际D/A电路,和开发板相连接。
电路虽然简单,由于疏忽也出现了一点小问题,导线没有接好,开路了。
接着是做开发板的连接,主要是把管脚锁定的引脚和电路板相联系。
都很顺利
五.实验结果
fword
正弦波
方波
三角波
1
11.36(kHZ)
22.72(kHZ)
45.44(kHZ)
2
11.36(kHZ)
22.72(kHZ)
45.44(kHZ)
4
11.36(kHZ)
22.72(kHZ)
45.44(kHZ)
实验结果证明了结果的正确性
正弦波的波形图
方波的波形图
三角波的波形图
六.心得体会
在整个课程设计中,遇到过很多问题,不过解决问题才是关键,才能在实验中得到经验、获得更牢固的知识。
在实验过程中,最开始总是编译有问题,然后发现自己的没建工程,然后是License中的IP,每次编译的时候我们总是忽略了这个问题从而出现问题;还有在自己写程序的时候,要注意的一些符号,笔误方面;还有,我们保存的文件一定要跟自己命名的文件名一致;还有一点要注意的是,做仿真波形要遭7.2做,而引脚锁定要在10.0中做,这也是个比较关键的一个问题,因为10.0版本和7.2版本对器件的要求不一样,7.2的版本需要使用CycloneIVEEP4CE115F29C8,而在10.0版本中需用CycloneⅡEP2C35F672C8。
最后我们要注意的是,与开发板连接的时候,连线不要连错了。
在此次课程设计中,我们收获了很多,熟练的掌握了quartus2软件的使用,并且还了解了开发板的使用方法和其中的一些原理,而从这次课程设计中,我们学会了新建工程、制图、VHDL编程、制作元件、编译仿真等等,虽然掌握的并不是很好,但也让我们了解了很多这方面的知识。
七.参考文献
《EDA技术及其应用》……………………………潘松赵敏笑编著