简易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