简易DDS波形发生器设计.docx
- 文档编号:3568627
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:12
- 大小:145.84KB
简易DDS波形发生器设计.docx
《简易DDS波形发生器设计.docx》由会员分享,可在线阅读,更多相关《简易DDS波形发生器设计.docx(12页珍藏版)》请在冰豆网上搜索。
简易DDS波形发生器设计
实验二简易DDS波形发生器设计
084775116马丽丽
084775117潘奕颖
一、实验目的:
进一步熟悉绘制ASM图分析实验的方法;
进一步掌握将VHDL程序符号化的使用方法;
熟悉ROM表的制作与符号化;
了解DDS波形发生器的基本原理。
二、实验内容:
利用FPGA和DAC,设计一个简易的DDS波形发
生器并发出正弦波。
三、设计要求:
1.分辨率优于1Hz;
2.ROM表长度8位,位宽10位;
3.输出频率优于100kHz(每个周期数据点大于50);
4.显示信号频率/频率控制字(可切换);
5.直接输入频率控制字或输出频率。
四、实验仪器:
计算机1台;
QUARTUS
软件一套;
试验箱1台。
五、方法步骤:
1.绘制ASM图;
阅读实验要求,分析实验过程,然后绘制ASM图如下页:
Y
2.建立一个工程;
打开QUARTUS
软件,Files→NewProjectWizard→选择储存路径→next→next→选择芯片Cyclone
EP2C5T144C8→next→finish。
3.编写累加器的VHDL文件,并将其转换成图形文件;
①Files→New→VHDLFile→开始编写程序;
②经过编写后,进行编译(Tools→CompilerTool→Strart),改错,再编译,改错直至编译成功,保存文件名为“dds1.vhd”;
程序如下:
libraryieee;
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitydds1is
port(
m:
instd_logic_vector(19downto0);
cp,r:
instd_logic;
q:
outstd_logic_vector(7downto0)
);
enddds1;
architecturezofdds1is
signalt:
std_logic_vector(22downto0);
signaln:
std_logic_vector(22downto0);
begin
process(cp)
begin
n<="000"&m;
ifcp'eventandcp='1'then
ifr='1'then
t<="00000000000000000000000";
elsift+n>8388607then
t<="00000000000000000000000";
else
t<=t+n;
endif;
endif;
q<=t(22downto15);
endprocess;
endz;
③编译通过以后,File→Create/Update→CreateSymbolFilesForCurrentFile。
4.制作ROM表;
①Files→New→MemoryInitializationFile;
②在Excel表中输入变量及公式算出ROM表中内容然后取整,复制到ROM表中保存文件名为“dds2.mif”。
ROM内容如下:
Addr
+0
+1
+2
+3
+4
+5
+6
+7
0
512
524
537
549
562
574
587
599
8
611
624
636
648
660
672
684
696
16
707
719
730
741
753
764
774
785
24
796
806
816
826
836
846
855
864
32
873
882
890
899
907
915
922
930
40
937
944
950
957
963
968
974
979
48
984
989
993
997
1001
1004
1008
1011
56
1013
1015
1017
1019
1021
1022
1022
1023
64
1023
1023
1022
1022
1021
1019
1017
1015
72
1013
1011
1008
1004
1001
997
993
989
80
984
979
974
968
963
957
950
944
88
937
930
922
915
907
899
890
882
96
873
864
855
846
836
826
816
806
104
796
785
774
764
753
741
730
719
112
707
696
684
672
660
648
636
624
120
611
599
587
574
562
549
537
524
128
512
499
486
474
461
449
436
424
136
412
399
387
375
363
351
339
327
144
316
304
293
282
270
259
249
238
152
227
217
207
197
187
177
168
159
160
150
141
133
124
116
108
101
93
168
86
79
73
66
60
55
49
44
176
39
34
30
26
22
19
15
12
184
10
8
6
4
2
1
1
0
192
0
0
1
1
2
4
6
8
200
10
12
15
19
22
26
30
34
208
39
44
49
55
60
66
73
79
216
86
93
101
108
116
124
133
141
224
150
159
168
177
187
197
207
217
232
227
238
249
259
270
282
293
304
240
316
327
339
351
363
375
387
399
248
412
424
436
449
461
474
486
499
5.编写切换输出器件程序,并转换成图形文件;
过程与步骤3累加器的制作大致相同,保存文件名为“dds.vhd”。
程序如下:
libraryieee;
useieee.std_logic_1164.all;
entityddsis
port(g1:
instd_logic_vector(19downto0);
g2:
instd_logic_vector(15downto0);
go1:
outstd_logic_vector(19downto0);
qh,start:
instd_logic;
go:
outstd_logic_vector(19downto0));
enddds;
architecturesofddsis
signalq1:
std_logic_vector(19downto0);
signalq2:
std_logic_vector(15downto0);
begin
process(qh)
begin
q1<=g1;
q2<=g2;
go1<=q1;
if(qh='0'andstart='1')then
go<=q1;
elsif(qh='1'andstart='1')then
go<="0000"&g2;
endif;
endprocess;
ends;
6.画Block电路图;
①Files→New→BlockDiagram/SchematicFile;
②将ROM表制作成图形文件;
双击空白处→Name:
lpm_rom→OK→Next(出现“MegawizardPlug-InManager”对话框:
默认其名为“lpm_rom0”)→10bits,256words→Next→浏览电脑将“dds2.mif”文件导入→Next→Finish。
③通过双击空白处,在Symbol对话框中的Project或primitives文件夹中选出要用的器件或引脚连结成基本的简易DDS波形发生器的电路。
设置输入、输出引脚,将程序下载到试验箱并连接到示波器观察波形是否正确;
④当示波器显示成功后再修改电路图,加入切换显示的部分;
⑤用宏功能模块引入用于计算和十进制—十六进制转换的乘法器,除法器若干个,并连接成图;
⑥制作选择输入到切换输出器中的器件;
制作步骤与上面3中步骤相同,保存文件名为“vhdl3.vhd”。
VDHL程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
entityvhdl3is
port(
w1:
instd_logic_vector(15downto0);
w2:
instd_logic_vector(15downto0);
t1:
inbit;
t2:
outstd_logic_vector(15downto0));
endvhdl3;
architectureaofvhdl3is
begin
process(t1)
begin
if(t1='1')then
t2<=w2;
else
t2<=w1;
endif;
endprocess;
enda;
⑦制作判断输出频率分档,并计算小数的器件;
制作步骤与上面3中步骤相同,保存文件名为“vhdl1.vhd”
VDHL程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
entityvhdl1is
port(d1:
inunsigned(22downto0);
d2:
inunsigned(3downto0);
t1:
outbit;
r:
outunsigned(3downto0));
endvhdl1;
architectureaofvhdl1is
begin
process(d1)
begin
ifd1>1000ord1=1000then
t1<='1';
else
t1<='0';
if(d2=0)then
r<="0000";
elsifd2=1then
r<="0001";
elsifd2=2then
r<="0011";
elsifd2=3then
r<="0100";
elsifd2=4then
r<="0101";
elsifd2=5then
r<="0110";
elsifd2=6then
r<="1000";
elsifd2=7then
r<="1001";
endif;
endif;
endprocess;
enda;
⑧将电路图连接后,保存名为“Block1.bdf”电路图如下页:
⑨编译,修改,直至编译通过;
7.下载到试验箱。
①Assignments→Device→DevicesandPinOptions...→UnusedPins→Asinputstri-stated→确定→OK;
②设置引脚:
Assignments→AssignmentsEditor→在Category选项中选择“Pin”选项;
然后设置引脚如下:
clk
Location
PIN_91
q[0]
Location
PIN_65
clk1
Location
PIN_9
q[1]
Location
PIN_67
cp
Location
PIN_43
q[2]
Location
PIN_69
t1
Location
PIN_48
q[3]
Location
PIN_70
d
Location
PIN_25
q[4]
Location
PIN_71
qiehuan
Location
PIN_30
q[5]
Location
PIN_72
reset
Location
PIN_27
q[6]
Location
PIN_74
start
Location
PIN_26
q[7]
Location
PIN_80
q2[0]
Location
PIN_122
q[8]
Location
PIN_81
q2[1]
Location
PIN_125
q[9]
Location
PIN_86
q2[2]
Location
PIN_126
q[10]
Location
PIN_92
q2[3]
Location
PIN_129
q[11]
Location
PIN_94
q2[4]
Location
PIN_133
q[12]
Location
PIN_96
q2[5]
Location
PIN_134
q[13]
Location
PIN_97
q2[6]
Location
PIN_135
q[14]
Location
PIN_100
q2[7]
Location
PIN_137
q[15]
Location
PIN_101
q2[8]
Location
PIN_139
q[16]
Location
PIN_112
q2[9]
Location
PIN_141
q[17]
Location
PIN_113
③重新编译(Tools→CompilerTool→Strart);
编译完成后开始下载:
Tools→Programmer→在“Programmer/Configure”选项下打勾→Mode:
JTAG→HardwareSetup→双击“USB_Blaster”→close→start.
4通过多次试验检查设计是否符合要求,并改进。
六、实验数据及误差分析
1.实验数据
M
显示f1
理论f2
实测f3
理论误差
显示误差
167772
104.8KHz
100.000KHz
100.0000KHz
0.000%
4.580%
160000
100.0KHz
95.367KHz
95.3689KHz
0.002%
4.633%
32768
20.4KHz
19.531KHz
19.5310KHz
0.000%
4.260%
16384
10.2KHz
9.765KHz
9.7657KHz
0.007%
4.265%
2048
1.3KHz
1.240KHz
1.2420KHz
0.164%
4.615%
1024
640.0Hz
610.350Hz
610.3380Hz
0.002%
4.633%
128
80.0Hz
76.294Hz
76.3020Hz
0.010%
4.633%
1
0.6Hz
0.596Hz
0.5900Hz
1.007%
0.667%
2.误差分析:
输入脉冲5MHZ;
累加器位数N=23;
显示值公式fo=M*5*2^20/2^23=M*5/8=M*0.625;
理论公式fo’=M*5*10^6/2^23≈M*0.596;
显示误差△f/fo=4.64%;
七、实验中出现的问题及解决方法
(一)示波器没有输入,累加器输出一直为0。
解决办法:
在累加器的VHDL程序中,reset=’0’时复位。
实验箱操作时reset一直没有置一,所以将累加器的VHDL程序reset=’1’时复位。
(二)当M输入160000时,理论显示100.0,实际显示A0.0。
解决方法:
添加一个除法器,把显示的十位和百位分开。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 DDS 波形 发生器 设计