FPGA基于DDS的移相调频调幅信号发生器.docx
- 文档编号:10214314
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:21
- 大小:4.83MB
FPGA基于DDS的移相调频调幅信号发生器.docx
《FPGA基于DDS的移相调频调幅信号发生器.docx》由会员分享,可在线阅读,更多相关《FPGA基于DDS的移相调频调幅信号发生器.docx(21页珍藏版)》请在冰豆网上搜索。
FPGA基于DDS的移相调频调幅信号发生器
《EDA》课程设计报告
实验题目:
基于DDS的数字移相信号发生器
基于DDS的数字移相信号发生器
一、课程设计目的
1、进一步熟悉QuartusⅡ的软件使用方法;
2、熟悉利用VHDL设计数字系统并学习LPMROM的使用方法;
3、学习FPGA硬件资源的使用和控制方法;
4、掌握DDS基本原理,学习利用此原理进行信号发生器的设计。
二、设计任务
1、完成8位输出数据宽度的频率可调的移相正弦信号发生器。
2、完成8位输出数据宽度的频率可调的移相三角波、方波信号发生器。
3、以上三种波形使用一个按键依次切换。
4、波形发生器实现幅度可调。
5、信号发生器的原始数据存储在外部存储器里,由FPGA进行读取,经过D/A转换输出,由示波器观察最终结果。
三、基本原理
直接数字频率合成器(DDS)是通信系统中常用到的部件,利用DDS可以制成很有用的信号源。
与模拟式的频率锁相环PLL相比,它有许多优点,突出为
(1)频率的切换迅速;
(2)频率稳定度高。
一个直接数字频率合成器由相位累加器、波形ROM、D/A转换器和低通滤波器构成。
DDS的原理框图如下所示:
图1直接数字频率合成器原理图
其中K为频率控制字,fc为时钟频率,N为相位累加器的字长,D为ROM数据位及D/A转换器的字长。
相位累加器在时钟fc的控制下以步长K作为累加,输出N位二进制码作为波形ROM的地址,对波形ROM进行寻址,波形ROM输出的幅码S(n)经D/A转换器变成梯形波S(t),再经低通滤波器平滑后就可以得到合成的信号波形了。
合成的信号波形形状取决于波形ROM中存放的幅码,因此用DDS可以产生任意波形。
本设计中直接利用D/A转换器得到输出波形,省略了低通滤波器这一环节。
1、频率预置与调节电路
不变量K被称为相位增量,也叫频率控制字。
DDS方程为:
f0=fcK/2n,f0为输出频率,fc为时钟频率。
当K=1时,DDS输出最低频率(也既频率分辩率)为fc/2n
DDS的最大输出频率由Nyguist采样定理决定,即fc/2,也就是说K的最大值为2n-1.因此,只要N足够大,DDS可以得到很细的频率间隔。
要改变DDS的输出频率,只要改变频率控制字K即可。
2、累加器
相位累加器的原理图如下图
图2相位累加器原理图
相位累加器由N为加法器与N位寄存器级联构成。
每来一个时钟脉冲fc,加法器将频率控制字与寄存器输出的累加相位数据相加,再把相加后的结果送至寄存器的数据输入端,寄存器将加法器在上一个时钟作用后所产生的下数据反馈到加法器的输入端;以使加法器在下一个时钟作用下继续频率控制字进行相加。
这样,相位累加器在时钟的作用下,进行相位累加,当相位累加器累加满量时,就产生一次溢出,完成一个周期性的动作,这个周期应为uk=2n/GCD(2N;k),其中GCD表示最大公约数。
3、波形存储器
用相位累加器输出的数据作为波形存储器的取样地址进行波形的相位——幅值转换,即可在给定的时间上确定输出的波形的抽样幅值。
N位的寻址ROM相当于把00---3600的正弦信号离散成具有2n样值的序列,若波形ROM有D位数据位,则2n个样值的幅值以D位二进制数值固化在ROM中,按照地址的不同可以输出相宜相位的正弦信号的幅值。
相位----幅值变换原理图如下所示。
图3相位-幅度变换原理图
4、D/A转换器
D/A转换器的作用是把已经合成的正弦波的数字量转换成模拟量,正弦幅度量化序列S(n)经D/A转换后变成了包络为正弦波的阶梯波S(t),S(t)的周期为T=uk*Tc.。
需要注意的是,频率合成器对D/A转换器的分辨率有一定的要求,D/A转换器的分辨率越高,合成的正弦波S(t)台阶数就越多,输出波形的精度也就越高。
四、DDS逻辑电路图
五、实验结果:
1、波形选择功能
正弦波
方波
三角波
2、调频功能
2、调幅功能
波形分析:
变频功能:
所设计的变频功能是采用对时钟进行等间距的分频,能实现对时钟信号从1/8至1倍的分频,实测结果和理论一样。
调幅功能:
所设计的调幅功能能实现2、4、6、8倍调幅;实测结果和事先设计结果一样。
波形切换:
设计的波形地址宽度为512,内部rom地址采用宽度11位,0-511为正弦波,512-1023为方波,1024-1535为三角波,1536-2047为正弦波。
当按键切换的时候,按一下为方波,再按一下为三角波,再按一下为正弦波,再按一下为正弦波,而后从头循环,实测结果和所设计的结果一致。
调相功能:
因为考虑到在写rom的时候,波形间的地址挨的很近,如果再加调相信号,会导致波形偏移到其他的波形上去,所以未加调相的控制模块。
附录:
工程的相关程序
分频器:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYDIVIS
PORT(CLK:
INSTD_LOGIC;
KEYf:
INSTD_LOGIC;
D_CLK:
OUTBIT);
ENDENTITY;
ARCHITECTUREBEHAVOFDIVIS
SIGNALJ:
STD_LOGIC_VECTOR(2DOWNTO0);
SIGNALCNT:
STD_LOGIC_VECTOR(2DOWNTO0);
SIGNALCLK1:
BIT;
BEGIN
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'THEN
CNT<=CNT+1;
IFCNT=JTHEN
CLK1<=NOTCLK1;CNT<="000";
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(KEYf)
BEGIN
IFKEYf='1'THENJ<=J+'1';
ENDIF;
ENDPROCESS;
D_CLK<=CLK1;
ENDARCHITECTURE;
累加器:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYSUMIS
PORT(CLK:
INSTD_LOGIC;
OPT:
OUTSTD_LOGIC_VECTOR(8DOWNTO0));
ENDENTITYSUM;
ARCHITECTUREBEHAVOFSUMIS
SIGNALTEM:
STD_LOGIC_VECTOR(8DOWNTO0);
BEGIN
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'THEN
TEM<=TEM+1;
ENDIF;
ENDPROCESS;
OPT<=TEM;
ENDARCHITECTUREBEHAv;
波形切换:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCHOOSEIS
PORT(CLK:
INSTD_LOGIC;
KEY:
INBIT;
ADD_IN:
INSTD_LOGIC_VECTOR(14DOWNTO0);
ADD_OUT:
OUTSTD_LOGIC_VECTOR(14DOWNTO0));
ENDCHOOSE;
ARCHITECTUREBEHAVOFCHOOSEIS
SIGNALKEY_BUFER:
STD_LOGIC_VECTOR(1DOWNTO0);
SIGNALADD_BUFER:
STD_LOGIC_VECTOR(14DOWNTO0);
BEGIN
PROCESS(KEY)
BEGIN
IFKEY='1'THENKEY_BUFER<=KEY_BUFER+'1';
ENDIF;
ENDPROCESS;
PROCESS(KEY_BUFER)
BEGIN
CASEKEY_BUFERIS
WHEN"00"=>ADD_BUFER<="000000000000000";
WHEN"01"=>ADD_BUFER<="000001000000000";
WHEN"10"=>ADD_BUFER<="000010000000000";
WHEN"11"=>ADD_BUFER<="000011000000000";
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESS;
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'THEN
ADD_OUT<=ADD_IN+ADD_BUFER;
ENDIF;
ENDPROCESS;
ENDBEHAV;
外部rom的读写:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCONTROLIS
PORT(WR:
OUTBIT;
CLKWD:
INSTD_LOGIC;
WRRD:
INSTD_LOGIC;
RD:
OUTBIT;
address:
instd_logic_vector(14downto0);
outadd:
outstd_logic_vector(14downto0);
D:
INSTD_LOGIC_VECTOR(7DOWNTO0);
QQ:
INoutSTD_LOGIC_VECTOR(7DOWNTO0));
ENDENTITYCONTROL;
ARCHITECTUREBEHAV1OFCONTROLIS
SIGNALFLAG:
BIT;
BEGIN
PROCESS(CLKWD)
BEGIN
IFCLKWD'EVENTANDCLKWD='1'THEN
IFFLAG='0'THEN
OUTADD<=ADDRESS;--adress
RD<=FLAG;WR<=NOTFLAG;
QQ<=D;--writedata
elsIFFLAG='1'THEN
OUTADD<=ADDRESS;--adress
RD<=FLAG;WR<=NOTFLAG;--readdata
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(WRRD)
BEGIN
IFWRRD'EVENTANDWRRD='1'THEN
FLAG<=NOTFLAG;
ENDIF;
ENDPROCESS;
ENDARCHITECTUREBEHAv1;
调幅:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYAMIS
PORT(KEYAM:
INBIT;
K:
INSTD_LOGIC_VECTOR(7DOWNTO0);
Q:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDAM;
ARCHITECTUREBEHAVOFAMIS
SIGNALKEY_BUFER:
STD_LOGIC_VECTOR(1DOWNTO0);
BEGIN
PROCESS(KEYAM)
BEGIN
IFKEYAM='1'THEN
KEY_BUFER<=KEY_BUFER+'1';
ENDIF;
ENDPROCESS;
PROCESS(KEY_BUFER)
BEGIN
CASEKEY_BUFERIS
WHEN"00"=>Q<=K;
WHEN"01"=>Q<='0'&K(7DOWNTO1);
WHEN"10"=>Q<="00"&K(7DOWNTO2);
WHEN"11"=>Q<="000"&K(7DOWNTO3);
ENDCASE;
ENDPROCESS;
ENDBEHAV;
地址宽度变化:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYcutIS
PORT(CLK:
INSTD_LOGIC;
ALLIN:
INSTD_LOGIC_VECTOR(14DOWNTO0);
OPT:
OUTSTD_LOGIC_VECTOR(10DOWNTO0));
ENDENTITYcut;
ARCHITECTUREBEHAVOFcutIS
BEGIN
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'THEN
OPT<=ALLIN(10downto0);
ENDIF;
ENDPROCESS;
ENDARCHITECTUREBEHAv;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FPGA 基于 DDS 调频 调幅 信号发生器
![提示](https://static.bdocx.com/images/bang_tan.gif)