多功能信号发生器的设计毕业设计.docx
- 文档编号:26672019
- 上传时间:2023-06-21
- 格式:DOCX
- 页数:30
- 大小:401.82KB
多功能信号发生器的设计毕业设计.docx
《多功能信号发生器的设计毕业设计.docx》由会员分享,可在线阅读,更多相关《多功能信号发生器的设计毕业设计.docx(30页珍藏版)》请在冰豆网上搜索。
多功能信号发生器的设计毕业设计
多功能信号发生器的设计
0引言
信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的应用。
它能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波等,在电路实验和设备检测中具有十分广泛的用途。
例如在通信、广播、电视系统中,都需要射频(高频)发射,这里的射频波就是载波,把音频(低频)、视频信号或脉冲信号运载出去,就需要能够产生高频的振荡器。
在工业、农业、生物医学等领域内,如高频感应加热、熔炼、淬火、超声诊断、核磁共振成像等,都需要功率或大或小、频率或高或低的信号发生器。
本设计采用FPGA来设计制作多功能信号发生器。
该信号发生器可以产生正弦波、方波、三角波、锯齿波等波形。
1设计意义
本次课设要求设计一个函数信号发生器。
它能产生四种波形:
正弦波、方波、三角波、锯齿波。
同时能在不同的频率下显示。
这次设计主要是练习了分频电路的设计,ROM的设计,计数器的设计、选择电路的设计和数码显示的设计。
加强了对when语句,if语句等语句的理解。
拓展了对VHDL语言的应用。
平时练习与考试都是设计一个简单的电路,本次课设综合了好几个电路的设计。
同时我也增强了对分模块设计电路的应用。
对我以后的电路设计生涯都是有所帮助的!
函数信号发生器是应用了VHDL语言,通过数模转换来显示波形,实现了数模转换的应用。
在工作中,我们常常会用到信号发生器,它是使用频度很高的电子仪器。
信号发生器是指产生所需参数的电测试信号的仪器。
按信号波形可分为正弦信号、函数(波形)信号、脉冲信号和随机信号发生器等四大类。
信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的应用。
各种波形曲线均可以用三角函数方程式来表示。
能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波的电路被称为函数信号发生器。
信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的应用。
凡是产生测试信号的仪器,统称为信号源,也称为信号发生器,它用于产生被测电路所需特定参数的电测试信号。
信号源主要给被测电路提供所需要的已知信号(各种波形),然后用其它仪表测量感兴趣的参数。
可见信号源在电子实验和测试处理中,并不测量任何参数,而是根据使用者的要求,仿真各种测试信号,提供给被测电路,以达到测试的需要。
它能够产生多种波形,如三角波、矩形波(含方波)、正弦波等,在电路实验和设备检测中具有十分广泛的用途。
例如在通信、广播、电视系统中,都需要射频(高频)发射,这里的射频波就是载波,把音频(低频)、视频信号或脉冲信号运载出去,就需要能够产生高频的振荡器。
在工业、农业、生物医学等领域内,如高频感应加热、熔炼、淬火、超声诊断、核磁共振成像等,都需要功率或大或小、频率或高或低的信号发生器。
本设计采用EDA来设计制作多功能信号发生器。
该信号发生器可以产生正弦波、方波、三角波、锯齿波等波形。
2 设计说明
2.1设计任务
2.1.1设计要求:
基于《VHDL语言》,通过给定的仪器(EDA6000试验箱)设计一个多功能信号发生器,
(1)能产生周期性正弦波、方波、三角波、锯齿波以及用户自己编辑的特定波形;
(2)输出信号的频率范围为100Hz~200KHz,且输出频率可以调节;
(3)具有显示输出波形、频率的功能。
2.1.2设计目的:
1)掌握使用EDA工具设计信号发生器系统的设计思路和设计方法,体会使用EDA综合过程中电路设计方法和设计思路的不同,理解层次化设计理念。
2)熟悉在QuartusII环境中,用文本输入方式与原理图输入方式完成电路的设计,同时掌握使用这两种方式相结合的EDA设计思路。
3)通过这一部分的学习,对VHDL语言的设计方法进行进一步的学习,对其相关语言设计规范进行更深层次的掌握,能够更加熟练的做一些编程设计。
3设计过程
3.1系统顶层框图
3.1.1信号发生器结构图
由于FPGA/CPLD只能直接输出数字信号,而多功能信号发生器输出的各种波形均为模拟信号,因此设计信号发生器时,需将FPGA/CPLD输出的信号通过D/A转换电路将数字信号转换成模拟信号。
多功能信号发生器可由信号产生电路,波形选择电路和D/A转换电路构成,如下图所示:
3.1.2信号发生器的内部构成
8位数据
图1原理框图
在原理框图中,正(余)弦查找表由ROM构成,内部存有一个完整周期正(余)弦波的数字幅度信息,每个查找表的地址对应正(余)弦波幅度信号,同时输出到数模转换器(DAC)输入端,DAC输出的模拟信号经过低通滤波器(LPF),可以得到一个频谱纯净的正(余)弦波。
3.1.3系统流程图
当输入端有时钟信号输入时,各个信号发生器模块独立运行,独立存在,发出各种信号,这些信号作为数据选择器的输入信号,在数据选择器的作用下,波形切换到相应的模块输出,再通过数模转换器(D/A),将通过示波器显示出相应的波形图,其程序流程图如下图所示:
3.2设计步骤
用VHDL语言结合原理图设计实现一个函数信号发生器,输出正弦波、方波和三角波三种波形。
将频率控制、分频、三角波、正弦波、方波发生邓各个模块分别用VHDL语言编程为一个子程序,并把每一个模块转换成图形文件,然后在原理图编辑框调用这些图形模块,连接电路如上图系统顶层框图所示。
通过按键1到按键8控制频率调节f〔7...0〕,用按键6、按键7、按键8控制dlt、sin、sqr波形选通,最后把八位输出接DAC0832通过D/A转换,从示波器上就能看到波形输出。
按下不同的按键输出不同的波形及频率。
3.3系统设计
(1)数控分频器模块
在时钟的作用下,通过预置分频数DIN,来改变输出频率。
假如分频系数为N,波形存储模块存储一个周期的波形,实验里按照一个周期波形采样64个点存储在波形存储模块里。
则输出频率
(2)数据存储模块(存储波形数据)
数据存储模块主要存的是正弦波、三角波、锯齿波等一个周期的采样点。
三角波模块可设计一个可逆计数器实现,设计时设置一变量作为工作状态标志,在此变量为0时,当检测到时钟的上升沿进行加同一个数操作;为1时,进行减同一个数操作。
DA转换采用的DA0832,输入有8个数据端,范围是0到255;而且设置64个时钟周期为一个三角波周期,所有每次加、减为1。
锯齿波的存储数据与三角波类似。
方波可以通过交替输出全0和全1,并给以32个周期的延时来实现。
正弦波可以通过波形变换实现把
变换成
的形式进行采样,然后变换成8位二进制码,存储在波形存储器里。
(3)数据选择器模块
在波形开关的控制下,选择相应的波形输出。
可以用3个按键来控制波形选择
4代码及仿真结果
4.1各个模块的实现
4.1.1数控分频器的实现
其VHDL代码如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityfenpinis
port(d_mode:
instd_logic_vector(3downto0);
clk:
instd_logic;
d_out:
outstd_logic);
endfenpin;
architecturebehavoffenpinis
signalfull:
std_logic;
begin
p_reg:
process(clk)
variablecnt8:
std_logic_vector(3downto0);
begin
ifclk'eventandclk='1'then
ifcnt8="1111"then
cnt8:
=d_mode;
full<='1';
elsecnt8:
=cnt8+1;
full<='0';
endif;endif;
endprocessp_reg;
p_div:
process(full)
variablecnt2:
std_logic;
begin
iffull'eventandfull='1'then
cnt2:
=notcnt2;
ifcnt2='1'thend_out<='1';
elsed_out<='0';
endif;
endif;
endprocessp_div;
endbehav;
频率为1MHz的分频波形图:
其生成元器件如图2所示:
图2数控分频器器件生成图
4.1.2方波的实现
产生方波,是通过交替送出全0和全1实现,每32个时钟翻转一次。
其VHDL代码如下:
libraryieee;
useieee.std_logic_1164.all;
entitysquareis
port(clk,clr:
instd_logic;
q:
outintegerrange0to255);
endsquare;
architectureoneofsquareis
signala:
bit:
='0';
begin
process(clk,clr)
variablecnt:
integerrange0to31;
begin
ifclr='0'then
a<='0';
elsifclk'eventandclk='1'then
ifcnt<31then
cnt:
=cnt+1;
else
cnt:
=0;
a<=nota;
endif;
endif;
endprocess;
process(clk,a)
begin
ifclk'eventandclk='1'then
ifa='1'then
q<=255;
else
q<=0;
endif;
endif;
endprocess;
endone;
其仿真波形如图3所示:
图3方波仿真图
其生成元器件如图4所示:
图4方波元器件生成图
4.1.3三角波的实现
该模块产生的三角波以64个时钟为一个周期,输出q每次加减8。
其VHDL代码如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitydeltais
port(clk,reset:
instd_logic;
q:
outstd_logic_vector(7downto0));
enddelta;
architecturedelta_arcofdeltais
begin
process(clk,reset)
variabletmp:
std_logic_vector(7downto0);
variablea:
std_logic;
begin
ifreset='0'then
tmp:
="00000000";
elsifclk'eventandclk='1'then
ifa='0'then
iftmp="11111110"then
tmp:
="11111111";
a:
='1';
else
tmp:
=tmp+'1';
endif;
else
iftmp="00000001"then
tmp:
="00000000";
a:
='0';
else
tmp:
=tmp-'1';
endif;
endif;
endif;
q<=tmp;
endprocess;
enddelta_arc;
其仿真波形如图5所示:
图5三角波仿真图
其生成元器件如图6所示:
图6三角波元器件生成图
4.1.4正弦波的实现
该模块产生以64个时钟为一个周期的正弦波。
其VHDL代码如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitysinis
port(clk,clr:
instd_logic;
d:
outintegerrange0to255);
endsin;
architecturesin_arcofsinis
begin
process(clk,clr)
variabletmp:
integerrange0to63;
begin
ifclr='0'thend<=0;
elsifclk'eventandclk='1'then
iftmp=63then
tmp:
=0;
else
tmp:
=tmp+1;
endif;
casetmpis
when00=>d<=255;when01=>d<=254;when02=>d<=252;
when03=>d<=249;when04=>d<=245;when05=>d<=239;
when06=>d<=233;when07=>d<=225;when08=>d<=217;
when09=>d<=207;when10=>d<=197;when11=>d<=186;
when12=>d<=174;when13=>d<=162;when14=>d<=150;
when15=>d<=137;when16=>d<=124;when17=>d<=112;
when18=>d<=99;when19=>d<=87;when20=>d<=75;
when21=>d<=64;when22=>d<=53;when23=>d<=43;
when24=>d<=34;when25=>d<=26;when26=>d<=19;
when27=>d<=13;when28=>d<=8;when29=>d<=4;
when30=>d<=1;when31=>d<=0;when32=>d<=0;
when33=>d<=1;when34=>d<=4;when35=>d<=8;
when36=>d<=13;when37=>d<=19;when38=>d<=26;
when39=>d<=34;when40=>d<=43;when41=>d<=53;
when42=>d<=64;when43=>d<=75;when44=>d<=87;
when45=>d<=99;when46=>d<=112;when47=>d<=124;
when48=>d<=137;when49=>d<=150;when50=>d<=162;
when51=>d<=174;when52=>d<=186;when53=>d<=197;
when54=>d<=207;when55=>d<=217;when56=>d<=225;
when57=>d<=233;when58=>d<=239;when59=>d<=245;
when60=>d<=249;when61=>d<=252;when62=>d<=254;
when63=>d<=255;
whenothers=>null;
endcase;
endif;
endprocess;
endsin_arc;
其仿真波形如图7所示:
图7正弦波仿真图
其生成元器件如图8所示:
图8正弦波元器件生成图
4.1.5锯齿波的实现
改变该模块递增的常数,可以改变锯齿的个数。
其VHDL代码如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityladderis
port(clk,reset:
instd_logic;
q:
outstd_logic_vector(7downto0));
endladder;
architectureladder_arcofladderis
begin
process(clk,reset)
variabletmp:
std_logic_vector(7downto0);
begin
ifreset='0'then
tmp:
="00000000";
elsifclk'eventandclk='1'then
iftmp="11111111"then
tmp:
="00000000";
elsetmp:
=tmp+16;--锯齿常数为16,可修改
endif;
endif;
q<=tmp;
endprocess;
endladder_arc;
其仿真波形如图9所示:
图9锯齿波仿真图
其生成元器件如图10所示:
图10锯齿波元器件生成图
4.1.6四选一输出波形选择模块的实现
根据外部的开关状态可以选择输出的波形。
其VHDL代码如下:
libraryieee;
useieee.std_logic_1164.all;
entityselect4_1is
port(sel:
instd_logic_vector(1downto0);
d0,d1,d2,d3:
instd_logic_vector(7downto0);
q:
outstd_logic_vector(7downto0));
endselect4_1;
architectureoneofselect4_1is
begin
process(sel)
begin
caseselis
when"00"=>q<=d0;
when"01"=>q<=d1;
when"10"=>q<=d2;
when"11"=>q<=d3;
endcase;
endprocess;
endone;
其波形仿真如图11所示:
图11四选一信号选择仿真图
其生成元器件如图12所示:
图124选1信号选择元器件生成图
4.2顶层模块
4.2.1代码实现
VHDL代码如下,利用元件例化实现:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityliis
port(d_mode:
instd_logic_vector(3downto0);
q:
outstd_logic_vector(7downto0);
clk:
instd_logic;
resel:
outstd_logic);
endli;
architecturebehavofliis
componentfenpinis
port(d_mode:
instd_logic_vector(3downto0);
clk:
instd_logic;
d_out:
outstd_logic);
endcomponentfenpin;
componentsquareis
port(clk,clr:
instd_logic;
q:
outintegerrange0to255);
endcomponentsquare;
componentdeltais
port(clk,reset:
instd_logic;
q:
outstd_logic_vector(7downto0));
endcomponentdelta;
componentsinis
port(clk,clr:
instd_logic;
d:
outintegerrange0to255);
endcomponentsin;
componentladderis
port(clk,reset:
instd_logic;
q:
outstd_logic_vector(7downto0));
endcomponentladder;
componentselect4_1is
port(sel:
instd_logic_vector(1downto0);
d0,d1,d2,d3:
instd_logic_vector(7downto0);
q:
outstd_logic_vector(7downto0));
endcomponentselect4_1;
signalsquare:
std_logic;
signaldelta:
std_logic;
signalsin:
std_logic;
signalladder:
std_logic;
signald0:
std_logic_vector(7downto0);
signald1:
std_logic_vector(7downto0);
signald2:
std_logic_vector(7downto0);
signald3:
std_logic_vector(7downto0);
begin
wen1:
fenpinportmap(d_mode=>d_mode,clk=>clk,d_out=>square,d_out=>delta,d_out=>sin,d_out=>ladder);
wen2:
squareportmap(clr=>resel,clk=>square,q=>d0);
wen3:
deltaportmap(resel=>resel,clk=>delta,q=>d1);
wen4:
sinportmap(clr=>resel,clk=>sin,q=>d2);
wen5:
ladderportmap(resel=>resel,clk=>ladder,q=>d3);
wen6:
select4_1portmap(sel=>sel,d0=>d0,d1=>d1,d2=>d2,d3=>d3,
q=>q);
endbehav;
4.2.2生成整体RTL:
新建一工程,加载上述模块,利用顶层模块法生成整体多波形信号发生器。
整体RTL图如图13所示:
图13整体多波形信号发生器RTL图
4.2.3整体仿真图
整体多波形信号发生器仿真如图14所示:
图14整体多波形信号发生器仿真图
其中,d_mode【3..0】为数控分频输入端,接四个开关用来产生预制分频数,分频后得到不同频率的脉冲,sel【1..0】为数据选择器的选择输入端,接两个开关,输入不同数据,选择四种波形中的一种输出,clk是原始脉冲输入端,reset为复位端,接一按键,按下时产生复位,回到初始状态;q【7..0】是数据选择器的输出端,输出被选中的波形送至DA转换器。
5小结及体会
通过这次课程设
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多功能 信号发生器 设计 毕业设计