第一篇:EDA课程设计——基于DDS的正弦信号发生器设计(模版)
顶层文件 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DDS IS
PORT(K:IN STD_LOGIC_VECTOR(9 DOWNTO 0);
EN:IN STD_LOGIC;
RESET:IN STD_LOGIC;
CLK:IN STD_LOGIC;
Q:OUT STD_LOGIC_VECTOR(8 DOWNTO 0));END ENTITY DDS;ARCHITECTURE BEHAVE OF DDS IS
COMPONENT SUM99 IS
PORT(K:IN STD_LOGIC_VECTOR(9 DOWNTO 0);
EN:IN STD_LOGIC;
RESET:IN STD_LOGIC;
CLK:IN STD_LOGIC;
OUT1:OUT STD_LOGIC_VECTOR(9 DOWNTO 0));
END COMPONENT SUM99;
COMPONENT REG1 IS
PORT(D:IN STD_LOGIC_VECTOR(9 DOWNTO 0);
CLK:IN STD_LOGIC;
Q:OUT STD_LOGIC_VECTOR(9 DOWNTO 0));
END COMPONENT REG1;
COMPONENT ROM IS
PORT(CLK:IN STD_LOGIC;
ADDR:IN STD_LOGIC_VECTOR(9 DOWNTO 0);
OUTP:OUT STD_LOGIC_VECTOR(8 DOWNTO 0));
END COMPONENT ROM;
COMPONENT REG2 IS
PORT(D:IN STD_LOGIC_VECTOR(8 DOWNTO 0);
CLK:IN STD_LOGIC;
Q:OUT STD_LOGIC_VECTOR(8 DOWNTO 0));
END COMPONENT REG2;
SIGNAL S1:STD_LOGIC_VECTOR(9 DOWNTO 0);
SIGNAL S2:STD_LOGIC_VECTOR(9 DOWNTO 0);
SIGNAL S3:STD_LOGIC_VECTOR(8 DOWNTO 0);
BEGIN
U0:SUM99
PORT MAP(K=>K,EN=>EN,RESET=>RESET,CLK=>CLK,OUT1=>S1);
U1:REG1 PORT MAP(D=>S1,CLK=>CLK,Q=>S1);
U2:ROM PORT MAP(ADDR=>S2,CLK=>CLK,OUTP=>S3);
U3:REG2 PORT MAP(D=>S3,CLK=>CLK,Q=>Q);END ARCHITECTURE BEHAVE;
正弦查找表 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ROM IS PORT(ADDR:IN STD_LOGIC_VECTOR(6 DOWNTO 0);CLK:IN STD_LOGIC;OUTP:OUT SIGNED(7 DOWNTO 0));END ENTITY ROM;ARCHITECTURE ART OF ROM IS BEGIN PROCESS(CLK)IS BEGIN IF(CLK'EVENT AND CLK='1')THEN CASE ADDR IS WHEN “0000000”=>OUTP<=“00000000”;WHEN “0000001”=>OUTP<=“00000010”;WHEN “0000010”=>OUTP<=“00000011”;WHEN “0000011”=>OUTP<=“00000101”;WHEN “0000100”=>OUTP<=“00000110”;
WHEN “0000101”=>OUTP<=“00001000”;WHEN “0000110”=>OUTP<=“00001001”;WHEN “0000111”=>OUTP<=“00001011”;WHEN “0001000”=>OUTP<=”00001101“;WHEN ”0001001“=>OUTP<=”00001110“;WHEN ”0001010“=>OUTP<=”00010000“;WHEN ”0001011“=>OUTP<=”00010001“;WHEN ”0001100“=>OUTP<=”00010011“;WHEN ”0001101“=>OUTP<=”00010100“;WHEN ”0001110“=>OUTP<=”00010110“;WHEN ”0001111“=>OUTP<=”00010111“;WHEN ”0010000“=>OUTP<=”00011001“;WHEN ”0010001“=>OUTP<=”00011011“;
WHEN ”0010010“=>OUTP<=”00011100“;WHEN ”0010011“=>OUTP<=”00011110“;WHEN ”0010100“=>OUTP<=”00011111“;WHEN ”0010101“=>OUTP<=”00100001“;WHEN ”0010110“=>OUTP<=”00100010“;WHEN ”0010111“=>OUTP<=”00100100“;WHEN ”0011000“=>OUTP<=”00100101“;WHEN ”0011001“=>OUTP<=”00100111“;
WHEN ”0011010“=>OUTP<=”00101001“;WHEN ”0011011“=>OUTP<=”00101010“;WHEN ”0011100“=>OUTP<=”00101100“;WHEN ”0011101“=>OUTP<=”00101101“;WHEN ”0011110“=>OUTP<=”00101111“;WHEN ”0011111“=>OUTP<=”00110000“;WHEN ”0100000“=>OUTP<=”00110010“;WHEN ”0100001“=>OUTP<=”00110011“;WHEN ”0100010“=>OUTP<=”00110101“;WHEN ”0100011“=>OUTP<=”00110110“;WHEN ”0100100“=>OUTP<=”00111000“;WHEN ”0100101“=>OUTP<=”00111001“;WHEN ”0100110“=>OUTP<=”00111011“;WHEN ”0100111“=>OUTP<=”00111100“;WHEN ”0101000“=>OUTP<=”00111110“;WHEN ”0101001“=>OUTP<=”00111111“;WHEN ”0101010“=>OUTP<=”01000001“;WHEN ”0101011“=>OUTP<=”01000011“;WHEN ”0101100“=>OUTP<=”01000100“;WHEN ”0101101“=>OUTP<=”01000110“;WHEN ”0101110“=>OUTP<=”01000111“;WHEN ”0101111“=>OUTP<=”01001001“;
WHEN ”0110000“=>OUTP<=”01001010“;WHEN ”0110001“=>OUTP<=”01001100“;WHEN ”0110010“=>OUTP<=”01001101“;WHEN ”0110011“=>OUTP<=”01001111“;WHEN ”0110100“=>OUTP<=”01010000“;WHEN ”0110101“=>OUTP<=”01010001“;WHEN ”0110110“=>OUTP<=”01010011“;WHEN ”0110111“=>OUTP<=”01010100“;WHEN ”0111000“=>OUTP<=”01010110“;WHEN ”0111001“=>OUTP<=”01010111“;WHEN ”0111010“=>OUTP<=”01011001“;WHEN ”0111011“=>OUTP<=”01011010“;WHEN ”0111100“=>OUTP<=”01011100“;WHEN ”0111101“=>OUTP<=”01011101“;WHEN ”0111110“=>OUTP<=”01011111“;WHEN ”0111111“=>OUTP<=”01100000“;WHEN ”1000000“=>OUTP<=”01100010“;WHEN ”1000001“=>OUTP<=”01100011“;WHEN ”1000010“=>OUTP<=”01100100“;WHEN ”1000011“=>OUTP<=”01100110“;WHEN ”1000100“=>OUTP<=”01100111“;WHEN ”1000101“=>OUTP<=”01101001“;
WHEN ”1000110“=>OUTP<=”01101010“;WHEN ”1000111“=>OUTP<=”01101100“;WHEN ”1001000“=>OUTP<=”01101101“;WHEN ”1001001“=>OUTP<=”01101110“;WHEN ”1001010“=>OUTP<=”01110000“;WHEN ”1001011“=>OUTP<=”01110001“;WHEN ”1001100“=>OUTP<=”01110011“;WHEN ”1001101“=>OUTP<=”01110100“;WHEN ”1001110“=>OUTP<=”01110101“;WHEN ”1001111“=>OUTP<=”01110111“;WHEN ”1010000“=>OUTP<=”01111000“;WHEN ”1010001“=>OUTP<=”01111010“;WHEN ”1010010“=>OUTP<=”01111011“;WHEN ”1010011“=>OUTP<=”01111100“;WHEN ”1010100“=>OUTP<=”01111110“;WHEN ”1010101“=>OUTP<=”01111111“;WHEN ”1010110“=>OUTP<=”10000000”;WHEN “1010111”=>OUTP<=“10000010”;WHEN “1011000”=>OUTP<=“10000011”;WHEN “1011001”=>OUTP<=“10000100”;WHEN “1011010”=>OUTP<=“10000110”;WHEN “1011011”=>OUTP<=“10000111”;
WHEN “1011100”=>OUTP<=“10001000”;WHEN “1011101”=>OUTP<=“10001010”;WHEN “1011110”=>OUTP<=“10001011”;WHEN “1011111”=>OUTP<=“10001100”;WHEN “1100000”=>OUTP<=“10001110”;WHEN “1100001”=>OUTP<=“10001111”;WHEN “1100010”=>OUTP<=“10010000”;WHEN “1100011”=>OUTP<=“10010010”;WHEN “1100100”=>OUTP<=“10010011”;WHEN “1100101”=>OUTP<=“10010100”;WHEN “00001100110”=>OUTP<=“10010101”;WHEN “1100111”=>OUTP<=“10010111”;WHEN “1101000”=>OUTP<=“10011000”;WHEN “1101001”=>OUTP<=“10011001”;WHEN “1101010”=>OUTP<=“10011010”;WHEN “1101011”=>OUTP<=“10011100”;WHEN “1101100”=>OUTP<=“10011101”;WHEN “1101101”=>OUTP<=“10011110”;WHEN “1101110”=>OUTP<=“10011111”;WHEN “1101111”=>OUTP<=“10100001”;WHEN “1110000”=>OUTP<=“10100010” WHEN “1110001”=>OUTP<=“10100011”;
WHEN “1110010”=>OUTP<=“10100100”;WHEN “1110011”=>OUTP<=“10100101”;WHEN “1110100”=>OUTP<=“10100111”;WHEN “1110101”=>OUTP<=“10101000”;WHEN “1110110”=>OUTP<=“10101001”;WHEN “1110111”=>OUTP<=“10101010”;WHEN “1111000”=>OUTP<=“10101011”;WHEN “1111001”=>OUTP<=“10101100”;WHEN “1111010”=>OUTP<=“10101110”;WHEN “1111011”=>OUTP<=“10101111”;WHEN “1111100”=>OUTP<=“10110000”;WHEN “1111101”=>OUTP<=“10110001”;WHEN “1111110”=>OUTP<=“10110010”;WHEN “1111111”=>OUTP<=“10110011”;WHEN OTHERS=>OUTP<=“ 00000000”;
END CASE;
END IF;END PROCESS;END ARCHITECTURE ART;
DAC 0832的VHDL程序 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY DAC0832 IS PORT(CLK:IN STD_LOGIC;
RST:IN STD_LOGIC;
ILE:OUT STD_LOGIC;
CONT:OUT STD_LOGIC;DATA_OUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END ENTITY;ARCHITECTURE BEHAVE OF DAC0832 IS SIGNAL Q:INTEGER RANGE 0 TO 63;SIGNAL DATA:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN
PROCESS(CLK)
BEGIN
IF RST='1'THEN Q<=0;ELSIF CLK'EVENT AND CLK='1'THEN
IF DATA=“11111111”THEN DATA<=“00000000”;
ELSE DATA<=DATA+1;
END IF;
ELSE Q<=Q+1;
END IF;
END PROCESS;ILE<='1';CONT<='0';DATA_OUT<=DATA;END ARCHITECTURE BEHAVE;
频率控制字 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY REG0 IS
PORT(CLK:IN STD_LOGIC;
LOCK:IN STD_LOGIC;
Q:OUT STD_LOGIC_VECTOR(9 DOWNTO 0));END ENTITY REG0;ARCHITECTURE ART OF REG0 IS BEGIN
PROCESS(CLK)
BEGIN
IF(CLK'EVENT AND CLK='1')THEN
IF LOCK='1'THEN
Q<=“0000011111”;
END IF;
END IF;
END PROCESS;END ARCHITECTURE ART;
相位寄存器 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG1 IS
PORT(D:IN STD_LOGIC_VECTOR(9 DOWNTO 0);
CLK:IN STD_LOGIC;
Q:OUT STD_LOGIC_VECTOR(9 DOWNTO 0));END ENTITY REG1;ARCHITECTURE BEHAVE OF REG1 IS BEGIN
PROCESS(CLK)IS
BEGIN
IF(CLK'EVENT AND CLK='1')THEN
Q<=D;
END IF;
END PROCESS;END ARCHITECTURE BEHAVE;
输出数据寄存器 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG2 IS PORT(D:IN STD_LOGIC_VECTOR(8 DOWNTO 0);
CLK:IN STD_LOGIC;
Q:OUT STD_LOGIC_VECTOR(8 DOWNTO 0));END ENTITY REG2;ARCHITECTURE BEHAVE OF REG2 IS BEGIN
PROCESS(CLK)IS
BEGIN
IF(CLK'EVENT AND CLK='1')THEN
Q<=D;
END IF;
END PROCESS;END ARCHITECTURE BEHAVE;
相位累加器 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SUM99 IS
PORT(K:IN STD_LOGIC_VECTOR(9 DOWNTO 0);
CLK:IN STD_LOGIC;
EN:IN STD_LOGIC;
RESET:IN STD_LOGIC:
OUT1:OUT STD_LOGIC_VECTOR(9 DOWNTO 0));END ENTITY SUM99;ARCHITECTURE BEHAVE OF SUM99 IS
SIGNAL TEMP:STD_LOGIC_VECTOR(9 DOWNTO 0);BEGIN
PROCESS(CLK,EN,RESET)IS
BEGIN
IF RESET='1'THEN
TEMP<=“0000000000”;
ELSE
IF CLK'EVENT AND CLK='1'THEN
IF EN='1'THEN
TEMP<=TEMP+K;
END IF;
END IF;
END IF;
OUT1<=TEMP;
END PROCESS;END ARCHITECTURE BEHAVE;
图1.顶层电路原理图
图2.dds波形仿真图
图3.rom波形仿真图
图4.相位寄存器reg1仿真波形图
图5.寄存器reg2的波形仿真
图6.相位累加器仿真波形图
图7.优化过程及对比波形(A——H)
图A
图B
图C
图D
图E 23
图F
图G
图H
第二篇:DDS函数信号发生器的设计
DDS函数信号发生器的设计、仿真及下载
一、实验设计
① 利用DDS(Direct DIgital Frequency Synthesis,即直接数字频率合成)技术产生稳定的正弦波,三角波和方波输出,输出频率为10~1000kHz且频率可调,步进为10Hz,1kHz,10kHz,100kHz。
② 用VerilogHDL进行建模和模拟仿真,再利用FPGA进行实现D/A转换。
③ 下载到DE0板上利用VGA端口的一个四位孔进行A/D转换显示在示波器上。
二、实验原理
一个直接数字频率合成器由相位累加器、波形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可以产生任意波形。【来自百度】
本设计中直接利用DE0开发板通过D/A转换得到输出波形,省略了低通滤波器这一环节。
DDS工作流程示意图:
DDS的具体实现框图:
三、实验内容:
1、相位累加器和数据锁存器的设计
本设计采用模24的二进制累加器和寄存器,其中累加器和寄存器在一个模块中,只取锁存数据的高十位作为查表的地址值。//地址计数器模块;
module counter(clk,fre_word,address);input clk;
//声明系统时钟为clk
input [23:0] fre_word;
//声明24为频率控制字
output reg [9:0] address;
reg [23:0] phaseadder;always @(posedge clk)begin
phaseadder=phaseadder+fre_word;address=phaseadder[23:14];//地址取输出锁存后十位(对应波形为一个周期取1024点)
end endmodule2、波形存储器设计
本设计要求DDS系统能输出方波、三角波及正弦波三种波形。可以调用FPGA的LPM_ROM模块制作三张ROM表,地址计数器可以同时访问这三张表,再使用数据选择器输出指定波形。实际上,方波,三角波的实现算法比较简单,所以只把正弦波的算法用ROM实现。//方波产生模块
module squwave(clk,address,qsquare);
input clk;
//系统时钟;input [9:0] address;
//10位地址输入信号;
output reg [7:0] qsquare;//输出方波幅度信号8位宽送至DAC
always @(posedge clk)
if(address<=10'b01_1111_1111)qsquare[7:0]=8'b1111_1111;else qsquare[7:0]=8'b0000_0000;endmodule
//三角波产生模块
module triawave(clk,address,qtriangle);input clk;
input [9:0] address;output reg [7:0] qtriangle;always @(posedge clk)begin if(address<=10'b01_1111_1111)qtriangle[7:0]=address[8:1];else qtriangle[7:0]=~address[8:1];end endmodule
//正弦波形文件制作(C语言)#include
s=128+sin(atan(1.0)*8/1024*i)*127;
fprintf(fp,“%xt:t%x;n”);} fprintf(fp,“END;n”);fclose(fp);} 生成mif格式文件,然后可以调用LPM_ROM模块实现正弦波产生模块。
3、波形的综合输出
DDS系统中产生了三种波形,但是在每种情况下只输出一种波形,因此要设计一个多路选择器完成这种功能。输出何种波形由外部开关控制。//boxing.v module boxing(clk,address,wavemode,wavevalue);
input clk;
input [1:0] wavemode;
//波形模式信号
input [9:0] address;
//十位地址输入信号
output [7:0] wavevalue;
//对应不同的波形输出
reg [7:0] wavevalue;wire [7:0] q,qsquare,qtriangle;sinwave a(address,clk,q);
//调用正弦波产生模块
squwave b(clk,address,qsquare);//调用方波产生模块
triawave c(clk,address,qtriangle);//调用三角波产生模块 always @(posedge clk)case(wavemode)2'b01:wavevalue=q;//01代表正弦波
2'b10:wavevalue=qsquare;
//10代表方波
2'b11:wavevalue=qtriangle;
//11代表三角波
endcase endmodule
4、工作模式控制模块的设计
本设计包括了开关模块和工作状态转换模块。先将开关调好状态,每按一次键程序根据所选状态进行工作。(由于DE0板上时钟为50MHz则变化较快,所以增加一个控制键,工程模式状态由此键控制。)//控制模块
module control(clk1,keyin,wavemode,length,single_state,single_frc);
input [3:0] keyin;
//四位状态信号输入
input clk1;
//按键控制状态的输入
input [1:0]single_state;
//输入的波形模式信号
input [1:0]single_frc;
//频率及步进控制信号
output reg [1:0] wavemode;
//波形模式输出信号
output reg [23:0] length;
//输出波形控制字
reg [3:0] key;
always @(posedge clk1)
begin
key=keyin;case(key)4'b0001: begin wavemode=2'b01;length=24'd3;end
4'b0010: begin case(single_state)
2'b01:wavemode=2'b01;
2'b10:wavemode=2'b10;
2'b11:wavemode=2'b11;
default: begin wavemode=2'b01;end
endcase
end
4'b0100: begin case(single_frc)
1:length=24'd3;
//10~10kHz
2:length=24'd3355;//10kHz~100kHz
3:length=24'd33554;//100kHz~2000kHz
default: begin length=24'd671088;end //大于2000kHz
endcase
end
4'b1000: begin case(single_frc)
0:length=length+24'd33554;
//步进为100kHz
1:length=length+24'd3;
//
10Hz
2:length=length+24'd336;
//
1kHz
3:length=length+24'd3355;//
10kHz
endcase
end
endcase
end
endmodule
5、DDS函数信号发生器顶层设计
顶层文件是将上述几个模块联系在一起就可以得到DDS核心实现模块。//顶层文件
module dds(clk,clk1,keyin,wavevalue,single_state,single_frc);input clk,clk1;
//系统时钟和控制按键
input [3:0] keyin;
//四位状态输入信号
input [1:0]single_frc;
//频率及步进输入模式信号
input [1:0]single_state;
//波形选择开关
output [7:0] wavevalue;
//输出波形信号
wire [9:0] address;
wire [1:0] wavemode;wire [23:0] length;control u1(clk1,keyin,wavemode,length,single_state,single_frc);//调用其他三个模块
counter u2(clk,length,address);boxing u3(clk,address,wavemode,wavevalue);endmodule
五、实验操作
操作软件QuartusII9.1及Modelsim,这两种软件的用法在此不再细谈。下载后示波器显示如下:
六、实验总结:
做完这次实验,我感觉DDS对于我们这些初学者来说一时很难接受,但是我们需要通过自己以及他人的见解来不断消化知识,一点一点去理解。最后做出来波形的时候确实很高兴,这是对我们这几天的学习的肯定,以后还要不断的去学习去理解FPGA以及VerilogHDL,坚持不懈,不管它有多难。
第三篇:电子设计大赛:DDS 信号发生器
DDS 信号发生器(1022)
产品应用: 模拟传感器信号 重现实际环境信号 电路功能测试 信号相位调试 科研与教育 最高输出频率 输出通道数 采样率 任意波长度
CH1 CH2MHz 2 100 MSa/s 2 pts – 4kpts 2pts – 1kpts 1 μHzmVpp ~ 10 Vpp(50 Ω),4 mV ~ 20 Vpp(高阻)mVpp ~ 3 Vpp(50 Ω),4 mV ~ 6 Vpp(高阻)14 bits 10 bits
USB Host & Device 无
台式函数/任意波形发生器 宽×高×深=232mm×108mm×288mm 2.7 kg
频率分辨率 幅度范围 垂直分辨率
CH1 CH2 CH1 CH2
标配接口 选配接口 产品类别 尺寸 重量 产品综述
函数/任意波形发生器采用直接数字频率合成(DDS)技术设计,能够产生精确、稳定、低失真的输出信号。产品特性
1.采用先进的DDS技术,双通道输出,内置频率计,25 MHz最高输出频率
2.LCD单色液晶显示屏
3.5种标准波形及48种预设任意波形输出,可编辑10组4 kpts任意波形
4.丰富的调制功能:AM、FM、PM、FSK,以及输出线性/对数扫描和脉冲串波形5.丰富的接口配置:标配USB Host,USB Device
第四篇:简易正弦信号发生器的设计
实验六 简易正弦信号发生器的设计
一、实验目的1.进一步熟悉Quatus软件的使用方法;
2.掌握逻辑分析仪的使用方法;
3.掌握LPM-ROM的使用方法;
二、实验内容
定制LPM-ROM模块,并利用其设计一个简易的正弦信号发生器,该信号发生器由以下三部分组成:
(1)计数器或地址信号发生器;
(2)正弦信号数据存储器ROM(6位地址线,8位数据线),含有128个8位波形数据(一个正弦波形周期)。
(3)VHDL顶层程序设计
注意:本实验中未给正弦信号波形接D/A转换器,因而采用逻辑分析仪进行观察,具体观察方法见教材208页。
本实验中待测信号为ar和q。时钟选择clk;时能信号为en,高电平触发。
三、实验记录
1.VHDL语言程序
2.仿真波形
3.逻辑分析仪观察结果。
四、问题讨论
1.总结宏功能模块的应用环境,可实现哪些设计?
2.设计一个方波生成器。
第五篇:实验五正弦信号发生器设计
实验五正弦信号发生器设计
一、实验目的1.熟悉利用QuartusII及其LPM_ROM与FPGA硬件资源的使用方法;
2.掌握LPM模块的重要功能;
3.熟悉MegaWizard Plug-In Manager的使用方法。
二、实验设备
计算机,QuartusII 6.0 版软件,JTAG下载线,EDA实验挂箱(EP1C6Q240C8)。
三、实验原理
设计一8位宽、1024点的正弦信号发生器。
正弦信号发生器的结构由四个部分组成:
1.计数器或地址发生器(10位地址线);
2.正弦信号数据ROM(存放正弦波的采样数据,采样频率20MHz:8位数据线、10位地址线);
3.VHDL顶层设计;
4.D/A转换器(8位)。
四、实验步骤和内容
1.在QuartusII上利用MegaWizard Plug-In Manager功能,调用LPM_ROM函数定制8位宽、1024点ROM,并进行初始化。然后对设计实体进行编辑、编译、综合、适配、仿真。
2.利用QuartusII文本编辑器设计10位二进制计数器,做为地址发生器,对设计实体进行编辑、编译、综合、适配、仿真。
3.利用层次化设计方法设计一8位宽、1024点的正弦信号发生器。
4.D/A转换器采用试验箱配备的DAC0832。
5.引脚锁定和硬件下载测试。引脚锁定后进行编译、下载和硬件测试实验。将实验过程和实验结果写进实验报告。
6.使用SignalTap II对设计的正弦信号发生器进行实测。采样时钟使用系统时钟20MHz。
7.使用在系统存储器数据读写编辑器对设计的正弦信号发生器进行实测,观测结果;
8.实验报告。将实验原理、设计过程、编译仿真波形和分析结果、硬件测试实验结果写进实验报告。
五、思考题
如何实现对输出正弦信号的频率和相位可调?