多功能函数发生器.docx
《多功能函数发生器.docx》由会员分享,可在线阅读,更多相关《多功能函数发生器.docx(12页珍藏版)》请在冰豆网上搜索。
![多功能函数发生器.docx](https://file1.bdocx.com/fileroot1/2022-11/28/faf9f2b1-d641-4894-8b26-bec735ecb68b/faf9f2b1-d641-4894-8b26-bec735ecb68b1.gif)
多功能函数发生器
多功能函数发生器
学院名称:
专业:
班级:
姓名:
学号:
指导教师姓名:
前言:
…………………………………………………………………1
一、设计任务:
……………………………………………………………3
二、题目分析与整体构思:
………………………………………………4
三、硬件电路设计:
………………………………………………………5
四、程序设计:
……………………………………………………………10
五、心得体会:
……………………………………………………………13
附录:
………………………………………………………………14
参考文献:
……………………………………………………………14
多功能函数发生器设计报告
前言
函数信号发生器是一种能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波的电路。
函数信号发生器在电路实验和设备检测中具有十分广泛的用途。
通过对函数波形发生器的原理以及构成分析,可设计一个能变换出三角波、正弦波、方波的函数波形发生器。
通过运用VHDL语言编程,通过运用软件QuartusII6.0,逐渐掌握EDA的用法,熟练步骤,对以后的学习与工作做了很好的铺垫;剖析整个系统运行的步骤与工作原理,从而完成对整个设计的理论分析任务,以次来指导其它设计过程;硬件电路设计主要是设计相关模块的设计思想的可视化,是相关模块的电路图的汇总和其相关仿真波形的集锦,该部分条理清晰,思路明确,从中我们可以清晰地看到该设计方案的具体模块和整个设计的原理结构实图;程序设计这一部分主要阐述该设计的设计方法与设计思想,进一步从软件设计上揭示设计构思,主要包含了整个设计所用到的模块的硬件描述语言的设计,通过这一部分的学习,对《VHDL语言》的设计方法有了进一步的学习,对其相关语言设计规范有了更深层次的掌握,能够更加熟练的做一些编程设计。
最后通过设计了解到基于PLD的EDA技术的发展和应用领域不断的扩大与深入EDA技术在电子信息、通信、自动控制及计算机应用等领域的重要性日益突出。
随着技术市场与人才市场对EDA技术的需求不断提高,产品的市场效率和技术要求也将会影响到教学与科研领域,因此这一次课程设计的开展很好的把握住了教学的改革方向,更好的锻炼了学生理论联系实践的能力。
此次课程设计对我在EDA技术的学习中有着很重要的影响。
一、设计任务
1.1设计目的及意义
1.1.1设计目的
(1)掌握方波—三角波——正弦波函数发生器的原理及设计方法。
(2)能够使用电路仿真软件进行电路调试。
1.1.2设计意义
函数发生器作为一种常用的信号源,是现代测试领域内应用最为广泛的通用仪器之一。
在研制、生产、测试和维修各种电子元件、部件以及整机设备时,都学要有信号源,由它产生不同频率不同波形的电压、电流信号并加到被测器件或设备上,用其他仪器观察、测量被测仪器的输出响应,以分析确定它们的性能参数。
信号发生器是电子测量领域中最基本、应用最广泛的一类电子仪器。
它可以产生多种波形信号,如正弦波,三角波,方波等,因而广泛用于通信、雷达、导航、宇航等领域。
1.2设计内容及指标
1.2.1设计内容
(1)利用CPLD和FPGA设计多功能函数发生器
(2)该发生器能自动产生正弦波、三角波、方波。
1.2.2设计指标
(1)能够不失真的输出三个波形
(2)正弦波幅值大于1V
二、题目分析与整体构思
多功能信号发生器:
以及用按键的方式产生任三种波形.
掌握使用EDA工具设计多功能信号系统的设计思路和设计方法。
体会使用EDA综合过程中电路设计方法和设计思路的不同。
首先,根据所学的知识对正弦信号发生器比较熟悉,就以正弦信号为基础展开思索.它由三个LMP模块组成,即锁相环、计数器、LMPROM。
其次,对三个模块分析并展开。
锁相环一般用于高频信号,由于要求的频率范围为100HZ~200HZ,所以去掉锁相环不考虑。
但是这个频率由谁提供?
经观察和了解实验箱的说明书可以通过时钟信号得到,信号来源这一问题解决了,为了确定频率需要计数器和分频器。
分频器是为了得到所需要的频率范围,计数器是为了测频率周期做准备。
通过查找资料把分频器和计数器的程序输入到QuartusⅡ中进行运行仿真,每一步都要慎重小心,错误难免的,还需要通过课本和资料一一更正。
最后,在前两个模块做好的基础上再考虑如何出波形的问题,通过对四种波形采样就可以得到,经过查找资料与思考终于得到了方法,就是通过建ROM,在里面输入所采点的数据,然后经运行与仿真正确就可以运用。
当然在做这些模块的过程中需要考虑到数据的选择、位宽的大小、管脚的取舍等问题。
一切准备就绪,实验开始。
三、硬件电路设计
在这次课程设计中主要有D/A模块和滤波电路组成的。
我在试验中主要完成的是软件部分:
(一)根据题目分析与整体构思可知,要完成设计任务必须设计出以下模块:
1)用于存储波形的四个ROM:
正弦波信号存储器data_roms、方波信号存储器data_rom、三角波信号存储器data_romt、
2)用于波形切换的三路选择器MUX_3;
3)用于频率选择的数控分频器;
(二)通过QuartusⅡ软件设计出各个模块的原理图及其相关仿真波形示意图如下:
1)如图所示,分频器的原理图及其仿真波形图
2)如图所示,正弦波发生器的原理图及其仿真波形图及ROM定制
3)如图所示,方波信号发生器的原理图及其仿真波形及ROM定制
4)如图所示,三角波信号发生器原理图及其仿真波形及ROM定制
5)如图所示,多路选择器的原理图
6)如图所示,地址发生器的原理图
8)如图所示,经过对设计任务的仔细学习与思考,把以上模块根据其功能及
设计思路设计出总的系统原理图如下:
对于整个原理图的编译结果:
四、程序设计
(1)地址发生器的程序设计:
Libraryieee;
Useieee.std_logic_1164.all;
Useieee.std_logic_unsigned.all;
Entitydecoder64ais
Port(clk:
instd_logic;
q:
outstd_logic_vector(5downto0));
Enddecoder64a;
Architectureoneofdecoder64ais
Signalq1:
std_logic_vector(5downto0);
Begin
Process(clk)
Begin
ifclk'eventandclk='1'then
ifq1<63thenq1<=q1+1;
elseq1<="000000";
endif;
endif;
endprocess;
q<=q1;
Endone;
(2)分频器的程序设计如下:
LIBRARYIEEE;--分频器
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYfenpinIS
PORT(CLK:
INSTD_LOGIC;
FOUT:
OUTSTD_LOGIC);
END;
ARCHITECTUREONEOFfenpinIS
signalq:
std_logic_vector(6downto0);
Begin
process(clk)
begin
ifclk'eventandclk='1'then
ifq="1100011"thenq<="0000000";
elseq<=q+1;
ifq<"110010"thenFOUT<='1';
elseFOUT<='0';
endif;
endif;
endif;
endprocess;
endone;
(3)正弦信号发生器的程序设计如下:
LIBRARYieee;
USEieee.std_logic_1164.all;
LIBRARYaltera_mf;
USEaltera_mf.all;
ENTITYdata_romsIS
PORT
(address:
INSTD_LOGIC_VECTOR(5DOWNTO0);
inclock:
INSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDdata_roms;
ARCHITECTURESYNOFdata_romsIS
SIGNALsub_wire0:
STD_LOGIC_VECTOR(7DOWNTO0);
COMPONENTaltsyncram
GENERIC(
address_aclr_a:
STRING;
init_file:
STRING;
intended_device_family:
STRING;
lpm_hint:
STRING;
lpm_type:
STRING;
numwords_a:
NATURAL;
operation_mode:
STRING;
outdata_aclr_a:
STRING;
outdata_reg_a:
STRING;
widthad_a:
NATURAL;
width_a:
NATURAL;
width_byteena_a:
NATURAL
);
PORT(clock0:
INSTD_LOGIC;
address_a:
INSTD_LOGIC_VECTOR(5DOWNTO0);
q_a:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDCOMPONENT;
BEGIN
q<=sub_wire0(7DOWNTO0);
altsyncram_component:
altsyncram
GENERICMAP(
address_aclr_a=>"NONE",
init_file=>"roms.mif",
intended_device_family=>"Cyclone",
lpm_hint=>"ENABLE_RUNTIME_MOD=YES,INSTANCE_NAME=ROMS",
lpm_type=>"altsyncram",
numwords_a=>64,
operation_mode=>"ROM",
outdata_aclr_a=>"NONE",
outdata_reg_a=>"UNREGISTERED",
widthad_a=>6,
width_a=>8,
width_byteena_a=>1)
PORTMAP(
clock0=>inclock,
address_a=>address,
q_a=>sub_wire0);
ENDSYN;
根据正弦波信号发生器的程序设计,可以分别设计出方波信号发生器、三角波信号发生器、锯齿波信号发生器,程序设计相对简单,可以套用:
libraryieee;
useieee.std_logic_1164.all;
entitymuxisport(
a,b,c,d:
instd_logic_vector(7downto0);
s:
instd_logic_vector(1downto0);
x:
outstd_logic_vector(7downto0));
endmux;
architecturearchmuxofmuxis
begin
mux4_1:
process(a,b,c,d)
begin
ifs="00"then
x<=a;
elsifs="01"then
x<=b;
elsifs="10"then
x<=c;
else
x<=d;
endif;
endprocessmux4_1;
endarchmux;
五、心得体会
我们的设计较好地完成了既定目标,能够产生正弦波、方波、三角波波形,并能较精确的调设波形发生的频率,范围在100Hz~200KHz,且输出频率可以调节,人机界面较完善友好,使系统容易使用。
很成功的完成系统的功能实现。
我在设计中主要是负责整个系统架构的构建,提供较完善的人机交互功能(键盘输入及LCD显示)。
也充分认识到了团结的力量!
在实验中也有失败,如当经过几天的努力把分频器、计数器、三个ROM做好后进行了整体的运作后,波形怎么也不出现。
后来才知道原来我们设计的电路只有在特定的试验箱才能实验成功,多亏老师的指导让我们少走很多弯路。
也从中发现自己还有很多知识不懂,最终把波形弄出来了!
在这次设计中,我更进一步地了解了开发项目该如何组织进行,对正弦波信号发生器、方波信号发生器、三角波信号发生器、锯齿波信号发生器的实现有了更好的理解。
同时也提高了查阅文档解决问题的能力,对EDA技术的运用有了深一层的认识,对VHDL程序语言设计有了更深的理解,
最后向学校和老师的支持和帮助说声感谢,因为你们我们才有锻炼和实践的机会!
参考文献
Protel 99seSE电子工业出版社 李东生 张勇 许四毛