实验二 DDS波形发生器设计实验报告.docx

上传人:b****2 文档编号:24551210 上传时间:2023-05-28 格式:DOCX 页数:10 大小:172.50KB
下载 相关 举报
实验二 DDS波形发生器设计实验报告.docx_第1页
第1页 / 共10页
实验二 DDS波形发生器设计实验报告.docx_第2页
第2页 / 共10页
实验二 DDS波形发生器设计实验报告.docx_第3页
第3页 / 共10页
实验二 DDS波形发生器设计实验报告.docx_第4页
第4页 / 共10页
实验二 DDS波形发生器设计实验报告.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

实验二 DDS波形发生器设计实验报告.docx

《实验二 DDS波形发生器设计实验报告.docx》由会员分享,可在线阅读,更多相关《实验二 DDS波形发生器设计实验报告.docx(10页珍藏版)》请在冰豆网上搜索。

实验二 DDS波形发生器设计实验报告.docx

实验二DDS波形发生器设计实验报告

实验二DDS波形发生器设计实验报告

一.实验任务及要求

任务:

利用FPGA+DAC,设计一个DDS信号发生器。

要求:

(1)分辨率优于1Hz

(2)ROM表长度8位、位宽10位

(3)输出频率优于100kHz(每周期大于50个点)

(4)显示信号频率/频率控制字

二.实验设计方案

用CPLD,FPGA实现DDS波形发生器设计

用QuartusII的原理图输入来完成系统的顶层设计。

相位累加器调用用HDL编写。

波形存储器通过调用lpm_rom元件实现,其LPM_FILE的值*.mif是一个存放波形幅值的文件。

频率-频率控制字之间的转换,可用乘、除法模块(LPM)设计以及用VHDL语言编写。

其具体实现方案如下原理图

输出频率:

(1)通过时钟频率,改变输出波形的频率

(2)改变寻址的步长来改变输出信号的频率—DDS

设:

相位累加器为N位,Sin表的大小为2P,累加器的高P位用于寻址Sin表.时钟频率为fC,若累加器按步进为M地累加直至溢出,称M为频率控制字。

三.系统硬件设计

1)DDS参数计算

相位寄存器每经过2N/M个时钟fc后回到初始状态,相应地正弦查询表经过一个循环回到初始位置,整个DDS系统输出一个正弦波。

则输出正弦波周期To=Tc*2n/M

即输出正弦波频率fout=M×fc/2n

要求分辨率优于1Hz则fc/2n<1

输出频率优于100kHz(每周期大于50个点)

则fout=M×fc/2n>100KH

2n/M>50

可得输入频率fc>5MHZ,在实验中我们设脉冲频率为10MHZ。

2)在实验中采用24位相位累加器(即n=24),用VHDL创建功能模块。

原理:

通过频率控制字控制相位累加,直至溢出,取其高8位作为查询sin表的地址,从而控制输出的波形。

3)频率控制字M的设置,用VHDL创建功能模块aa

设置a1,a2,a3三个输入端,其不同的输入组合对应控制频率控制字M的各个位,确定控制位后,通过输入单脉冲控制其大小,直到输入所需控制字,同时设置了复位端rst1。

4)LPM_ROM模块功能及原理

通过公式1023/2*[sin(2*3.14*A/256)+1]制作sin表,设置长度8位、位宽10位。

波形存储器通过调用lpm_rom元件实现,其LPM_FILE的值*.mif是制作的sin表文件。

5)输出频率-频率控制字之间的转换,用VHDL创建功能模块chang。

通过设置使能端en,控制输出频率与频率控制字之间的显示转换。

6)输出频率显示设置,采用乘、除法模块(LPM)设计以及用VHDL语言编写。

其中通过编写VHDL,设置其输出单位,创建功能模块ij和xz。

当LED1灯亮时则输出单位为KHZ,否则为HZ。

并且通过乘除法的转换输出使数码管最后一位显示的为小数位。

因为数码管为16进制显示所以在设置输出时,把fout=M×fc/2n之后乘以16,这样在数码管上显示的最后一位即为小数位。

7)具体电路原理图见附录1

四.系统软件设计

1)部分功能模块流程图

相位累加器(ljq)流程图

输出频率-频率控制字转换(chang)流程图

2)具体程序清单见附录2

五.系统测试

1)电路的测试方案

通过参数的计算公式fout=M×fc/2n,控制M的大小,测出输出频率并与理论数据相比较。

2)电路测试结果

通过调试得到完整稳定的波形图

当输入控制字M大小为28F14H(十进制167700)时,经理论计算得输出频率为100KHZ;示波器中显示输出频率为99.9578KHZ;此时实验箱中LED1灯变亮,数据显示为665,因为数码管最后一位显示为小数,则显示输出数据应为(66.5H)KHZ,转换为10进制即102.03125KHZ.

当输入控制字M大小为68DH(十进制1677)时,经理论计算得输出频率为1KHZ;示波器中显示输出频率为999.578HZ;此时实验箱中LED1灯未变亮,数据显示为10,同上,则显示输出数据应为(1.0H)KHZ,转换为10进制即1KHZ.

当输入控制字M大小为10400H(十进制66560)时,经理论计算得输出频率为1KHZ;示波器中显示输出频率为999.578HZ;此时实验箱中LED1灯未变亮,数据显示为10,同上,则显示输出数据应为(1.0H)KHZ,转换为10进制即1KHZ.

当输入控制字M大小为1H(十进制1)时,经理论计算得输出频率为596mHZ;示波器中显示输出频率为599.3mHZ;此时实验箱中LED1灯未变亮,数据显示为0,同上,则显示输出数据应为0HZ,最小输出频率。

当输入控制字M大小为FFFFFH,经理论计算得输出频率为625KHZ;示波器中显示输出频率为625.004KHZ;此时实验箱中LED1灯未变亮,数据显示为2712,同上,则显示输出数据应为(271.2H)KHZ,转换为10进制即625.125KHZ.即为最大书出频率。

六.实验结论

由电路测试数据可知,测试结果与理论数据几乎相等,则实验设计正确。

在实验过程中,在对小数进行处理时出现了一些问题,为了在数码管中显示出一位小数点,即显示的数据向左移动一位,刚开始直接在数据输出显示fout=M×fc/2n之后乘以10,忘了数码管显示为16进制,从而导致了数据显示结果总是与理论相差很多。

通过这次实验,我们对数字系统设计的方法有了更进一步的掌握。

 

附录1

附录2

程序清单

1.控制字M的设置

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

entityaais

port(a1,a2,a3,rst1:

inbit;

q1,q2,q3,q4,q5:

bufferunsigned(3downto0);

cp:

inbit);

endaa;

architecturertlofaais

signaltmp_in:

bit_vector(2downto0);

begin

tmp_in<=a3&a2&a1;

process(cp,tmp_in,rst1)

begin

ifrst1='1'thenq1<="0000";q2<="0000";q3<="0000";q4<="0000";q5<="0000";

elsifcp'eventandcp='1'then

iftmp_in="001"thenq1<=q1+1;

elsiftmp_in="010"thenq2<=q2+1;

elsiftmp_in="011"thenq3<=q3+1;

elsiftmp_in="100"thenq4<=q4+1;

elsiftmp_in="101"thenq5<=q5+1;

endif;

endif;

endprocess;

endrtl;

2.累加器ljq

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

entityljqis

port(m:

inunsigned(19downto0);

cp2,rst:

inbit;

data:

outunsigned(23downto0));

endljq;

architectureatlofljqis

signaliq:

unsigned(23downto0);

begin

process(m,cp2,rst,iq)

begin

ifrst='1'theniq<="000000000000000000000000";

elsif(cp2'eventandcp2='1')then

iq<=iq+m;

endif;

data<=iq;

endprocess;

endatl;

3输出频率显示设置ij和xz

Ij:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

entityjjis

port(qi:

inunsigned(25downto0);

z:

outbit;

r1,r2:

outunsigned(25downto0));

endjj;

architecturerlofjjis

begin

process(qi)

begin

ifqi<10000thenr1<=qi;

elser2<=qi;z<='1';

endif;

endprocess;

endrl;

xz:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

entityxzis

port(z:

inbit;

r1,r2:

inunsigned(25downto0);

r:

outunsigned(24downto0));

endxz;

architecturetofxzis

begin

process(z,r1,r2)

begin

ifz='1'thenr<=r2(24downto0);

elser<=r1(24downto0);

endif;

endprocess;

endt;

4输出频率与频率控制字的转换

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

entitychangeis

port(en:

inbit;

m:

inunsigned(19downto0);

n:

inunsigned(19downto0);

fo:

outunsigned(19downto0));

endchange;

architectureqieofchangeis

begin

process(en)

begin

ifen='1'then

fo<=m;

elsefo<=n;

endif;

endprocess;

endqie;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 纺织轻工业

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1