简易DDS波形发生器设计
- 格式:doc
- 大小:231.00 KB
- 文档页数:11
实验二 简易DDS波形发生器设计
084775116 马丽丽
084775117 潘奕颖
一、 实验目的:进一步熟悉绘制ASM图分析实验的方法;
进一步掌握将VHDL程序符号化的使用方法;
熟悉ROM表的制作与符号化;
了解DDS波形发生器的基本原理。
二、 实验内容:利用FPGA和DAC,设计一个简易的DDS波形发
生器并发出正弦波。
三、 设计要求:1.分辨率优于1Hz;
2.ROM表长度8位,位宽10位;
3.输出频率优于100kHz(每个周期数据点大于50);
4.显示信号频率/频率控制字(可切换);
5.直接输入频率控制字或输出频率。
四、 实验仪器:计算机1台;
QUARTUS II软件一套;
试验箱1台。
五、 方法步骤:
1. 绘制ASM图;
阅读实验要求,分析实验过程,然后绘制ASM图如下页:
Y
2. 建立一个工程;
打开QUARTUS II软件,Files → New Project Wizard → 选择储存路径→ next → next → 选择芯片Cyclone II EP2C5T144C8
→ next → finish。
3. 编写累加器的VHDL文件,并将其转换成图形文件;
①Files → New → VHDL File → 开始编写程序;
②经过编写后,进行编译(Tools → Compiler Tool
→Strart),改错,再编译,改错直至编译成功,保
存文件名为“dds1.vhd”; 通过移位寄存器输入M
输出fout N
Y N 等待
Start=1?
R[7..0]=(ADD+M)[7..0]
fc= M*5/8 地址R输给ROM
qh=1?
示波器 如果reset=1,输入M和ADD清输出M DA转换器
m[19..0]cprq[7..0]dds1inst10程序如下:
library ieee;
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity dds1 is
port(
m:in std_logic_vector(19 downto 0);
cp,r:in std_logic;
q:out std_logic_vector(7 downto 0)
);
end dds1;
architecture z of dds1 is
signal t:std_logic_vector(22 downto 0);
signal n:std_logic_vector(22 downto 0);
begin
process(cp)
begin
n<="000"&m;
if cp'event and cp='1' then
if r='1' then
t<="00000000000000000000000";
elsif t+n>8388607 then
t<="00000000000000000000000";
else
t<=t+n;
end if;
end if;
q<=t(22 downto 15);
end process;
end z;
③编译通过以后,File → Create/Update → Create Symbol Files
For Current File。 4. 制作ROM表;
①Files → New → Memory Initialization File;
②在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”。
程序如下:
library ieee;
use ieee.std_logic_1164.all;
entity dds is
port(g1:in std_logic_vector(19 downto 0);
g2:in std_logic_vector(15 downto 0);
go1:out std_logic_vector(19 downto 0);
qh,start:in std_logic;
go:out std_logic_vector(19 downto 0));
end dds;
architecture s of dds is
signal q1:std_logic_vector(19 downto 0);
signal q2:std_logic_vector(15 downto 0);
begin
process(qh)
begin
q1<=g1;
q2<=g2;
go1<=q1;
if(qh='0'and start='1') then
go<=q1;
elsif(qh='1'and start='1') then
go<="0000"&g2;
end if;
end process;
end s; g1[19..0]g2[15..0]qhstartgo1[19..0]go[19..0]ddsinst6. 画Block电路图;
① Files → New → Block Diagram/Schematic File ;
② 将ROM表制作成图形文件;
双击空白处 → Name:lpm_rom → OK → Next(出现
“Megawizard Plug-In Manager”对话框:默认其名为“lpm_rom0”)→ 10 bits,256 words → Next → 浏览电脑将“dds2.mif”文件导入 → Next → Finish。
③ 通过双击空白处,在Symbol对话框中的Project或primitives文件夹中选出要用的器件或引脚连结成基本的简易DDS波形发生器的电路。设置输入、输出引脚,将程序下载到试验箱并连接到示波器观察波形是否正确;
④ 当示波器显示成功后再修改电路图,加入切换显示的部分;
⑤ 用宏功能模块引入用于计算和十进制—十六进制转换的乘法器,除法器若干个,并连接成图;
⑥ 制作选择输入到切换输出器中的器件;
制作步骤与上面3中步骤相同,保存文件名为“vhdl3.vhd”。
VDHL程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
entity vhdl3 is
port(
w1:in std_logic_vector(15 downto 0); w1[15..0]w2[15..0]t1t2[15..0]vhdl3inst12