第一篇:实验五正弦信号发生器设计
实验五正弦信号发生器设计
一、实验目的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.实验报告。将实验原理、设计过程、编译仿真波形和分析结果、硬件测试实验结果写进实验报告。
五、思考题
如何实现对输出正弦信号的频率和相位可调?
第二篇:简易正弦信号发生器的设计
实验六 简易正弦信号发生器的设计
一、实验目的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)输出信号的频率范围为100~800Hz,步进为100Hz。(60分)
(2)要求输出信号无明显失真,特别是正弦波信号。(30分)
评分标准:
(1)范围满足设计要求得满分,否则酌情扣分。
(2)输出信号无明显失真可满分,有明显失真酌情扣分。
发挥部分(附加10分):
进一步扩大输出信号范围和减小步进频率。
第四篇: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
第五篇:简易信号发生器设计
《单片机原理及应用》课程设计任务书 课程设计题目:简易信号发生器设计
一、设计目的和要求
(一)、设计目的通过设计简易信号发生器,完成系统设计、编码、调试及维护工作的实践,了解单片机应用系统的一般设计思路,熟悉和掌握硬件系统和软件设计的一般方法。
(二)、设计要求
1.设定功能:能通过按键设定信号类型、频率
2.显示功能:通过数码管或液晶显示当前波形类型和频率。
3.计数功能:能设定自动输出多少个周期该波形后停止输出,直到再次按下触发按钮
二、设计内容及步骤
1.系统分析,完成系统分析报告
2.根据的系统结构图、课程实验,查阅资料,确定系统各个模块的译码电路和地址范围以及其它硬件型号,详细画出系统硬件原理图。
3.程序流程图,编制程序。
4.调试修改显示子模块、键盘扫描子模块、定时器中断子模块和主程序
5.编写课程设计报告
内容包括:题目、摘要、目录、正文、结论、致谢、参考文献等。学生在完成上述全部工作之后,应将全部内容以先后顺序写成设计报告一份,阐述整个设计内容,要求重点突出、特色鲜明、语言简练、文字通畅,字迹工整。报告要求在专用报告书上书写。
6.完成课程设计报告,设计报告字数不得少于3000 字撰写要求如下: ·设计任务
·问题定义、理论分析
·理论设计(程序功能结构、算法说明和程序框图)
·上机调试(实验环境、实验说明和程序清单)
·结果分析
·心得体会
三、进度安排
按教学计划规定,单片机原理及应用课程设计总学时为一周,其进度及时间大致分配如下:
序号 设计内容天数(约占比例)查阅资料(约占8%)确定设计思路(约占15%)画出硬件图、确定各个模块的电路实现方法(约占27%)编写程序(约占25%)调试修改各子模块和主程序(约占15%)总结设计过程,编写课程设计报告1(约占10%)