多功能信号发生器的设计.docx

上传人:b****8 文档编号:28091069 上传时间:2023-07-08 格式:DOCX 页数:23 大小:361.69KB
下载 相关 举报
多功能信号发生器的设计.docx_第1页
第1页 / 共23页
多功能信号发生器的设计.docx_第2页
第2页 / 共23页
多功能信号发生器的设计.docx_第3页
第3页 / 共23页
多功能信号发生器的设计.docx_第4页
第4页 / 共23页
多功能信号发生器的设计.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

多功能信号发生器的设计.docx

《多功能信号发生器的设计.docx》由会员分享,可在线阅读,更多相关《多功能信号发生器的设计.docx(23页珍藏版)》请在冰豆网上搜索。

多功能信号发生器的设计.docx

多功能信号发生器的设计

目录

0引言2

1设计意义3

2设计说明4

2.1设计任务4

2.1.1设计要求4

2.1.2设计目的:

4

3设计过程5

3.1系统顶层框图5

3.1.1信号发生器结构图5

3.1.2信号发生器的内部构成5

3.1.3系统流程图6

3.2设计步骤6

3.3系统设计7

4代码及仿真结果8

4.1各个模块的实现8

4.2顶层模块16

5小结及体会19

6参考文献20

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整体多波形

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 中国风

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1