EDA分频器设计论文.docx
- 文档编号:27504701
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:27
- 大小:333.75KB
EDA分频器设计论文.docx
《EDA分频器设计论文.docx》由会员分享,可在线阅读,更多相关《EDA分频器设计论文.docx(27页珍藏版)》请在冰豆网上搜索。
EDA分频器设计论文
1引言
简易多功能信号发生器是信号发生器的一种,在生产实践和科研领域中有着广泛的应用。
在研制、生产、测试和维修各种电子元件、部件以及整机设备时,都需要有信号源,由它产生不同频率不同波形的电压、电流信号并加到被测器件或设备上,用其他仪器观察、测量被测仪器的输出响应,以分析确定它们的性能参数。
信号发生器是电子测量领域中最基本、应用最广泛的一类电子仪器。
它可以产生多种波形信号,如正弦波,三角波,方波和锯齿波等,因而广泛用于通信、雷达、导航、宇航等领域。
本设计是采用VHDL来实现的简易多功能信号发生器。
它能产生正弦波,三角波,方波和锯齿波。
且对各种波形的要求如下:
(1)根据按键选择不同的波形(实现正弦波,三角波,方波和锯齿波);
(2)各波形的频率范围为100Hz-20KHz;
(3)各波形频率可调(通过按键控制频率的变化,步进值为500Hz);
(4)用LED数码管实时显示输出波形的频率值;
(5)用按键控制实现输出信号的幅度调节(幅度调节为2.5V和5V)。
2设计原理
2.1设计思想
信号发生器产生、控制和显示的总体结构图如图所示
图1总体结构图
外部输入一个50MHZ的时钟频率,经过频率控制单元控制其频率在要求的范围内,由4选1数据选择器实现对输出波形的选择,再通过D/A转换模块,将数字信号转换成模拟信号在示波器上显示出来。
2.2总体原理图
基于VHDL语言设计一个简易多功能信号发生器,通过选入输入信号,可以输出正弦波、三角波、方波和锯齿波四种波形信号。
信号发生器的控制模块可以用数据选择器实现,四种信号的信号选择可以用4选1数据选择器实现。
同时本设计使用原理图的方法,对正弦波、三角波、方波和锯齿波和4选1数据选择器元件进行调用。
简易多功能信号发生器的原理图如下:
2.3总体功能介绍
由总体原理图可知,总体有六个输入,六个个输出。
其中一个时钟输入端clk,以一个频率调节输入端b,一个使系统输出波形的频率为最大的控制输入端h和一个使系统输出波形的频率为最小的控制输入端l,sel进行幅度调节,一个波形选择输入端a,波形输出b,五个频率显示数码管。
总体功能:
由clk输入一个100MHZ的时钟脉冲,由high和low选择使系统输出波形的频率为最大或使系统输出波形的频率为最小。
由b控制频率的加减,产生一个地址数,再由分频数模块把地址数转化成一个分频数给分频模块,分频模块对clk分频产生相应的输出频率。
把产生的频率分别送给四种波形的clk,通过波形选择模块进行波形选择,由b输出相应的波形。
幅值的大小由sel控制,使幅值为2.5V或5V。
3各个模块的实现
3.1正弦波
正弦波的产生思想是将对模拟波形采样后的编码存入定义好的ROM中,再根据时钟循环的将这些编码顺序输出,在输出端将经过数模转换器转换后的模拟信号接入示波器即可显示正弦波形。
功能介绍:
包括两个输入clk和sel,一个输出dout0。
由clk输入一个时钟脉冲,sel进行幅度调节,当sel='1'时,波形幅值为2.5V,当sel='0'时,波形幅值为5.0V,每当clk的一个上升沿,由dout0输出一个数。
当有64个上升沿时,就会输出一个完整的正弦波形。
3.2三角波
三角波的产生思想是将对模拟波形采样后的编码存入定义好的ROM中,再根据时钟循环的将这些编码顺序输出,在输出端将经过数模转换器转换后的模拟信号接入示波器即可显示三角波形。
图4三角波模块
功能介绍:
包括两个输入clk和sel,一个输出dout3。
由clk输入一个时钟脉冲,sel进行幅度调节,当sel='1'时,波形幅值为2.5V,当sel='0'时,波形幅值为5.0V,每当clk的一个上升沿,由dout3输出一个数。
当有64个上升沿时,就会输出一个完整的三角波形。
3.3方波
方波波的产生思想是将对模拟波形采样后的编码存入定义好的ROM中,再根据时钟循环的将这些编码顺序输出,在输出端将经过数模转换器转换后的模拟信号接入示波器即可显示方波波形。
图5方波模块
功能介绍:
包括两个输入clk和sel,一个输出dout2。
由clk输入一个时钟脉冲,sel进行幅度调节,当sel='1'时,波形幅值为2.5V,当sel='0'时,波形幅值为5.0V,每当clk的一个上升沿,由dout2输出一个数。
当有64个上升沿时,就会输出一个完整的方波波形。
3.4锯齿波
锯齿波的产生思想是将对模拟波形采样后的编码存入定义好的ROM中,再
根据时钟循环的将这些编码顺序输出,在输出端将经过数模转换器转换后的模拟信号接入示波器即可显示锯齿波形。
图6锯齿波模块
功能介绍:
包括两个输入clk和sel,一个输出dout1。
由clk输入一个时钟脉冲,sel进行幅度调节,当sel='1'时,波形幅值为2.5V,当sel='0'时,波形幅值为5.0V,每当clk的一个上升沿,由dout1输出一个数。
当有64个上升沿时,就会输出一个完整的锯齿波形。
3.5按键模块
图7按键模块
功能介绍:
在按键输入识别模块中共有4个输入端。
其中一个时钟输入端clk,以一个频率调节输入端b,一个使系统输出波形的频率为最大的控制输入端h和一个使系统输出波形的频率为最小的控制输入端l。
本课程设计要求输出波形的频率在每按一次相应的按键时,就增加或减少500Hz。
而实验室的硬件设备上的按键都是拨码是按键,即按键按下后一直有效,这显然不能满足要求。
于是按键输入识别模块中用如下的代码实现按键没按一次都能有效的功能。
ifb0='0'andb1='1'then
ifc=40then
cnt<=0;
elsec<=c+1;
endif;
elsifb0='1'andb1='0'then
ifc=40then
c<=0;
elsec<=c+1;
endif;
以上代码实现的只是频率增长的功能,同理就可以实现频率减小的功能
当按下按键输入识别模块中分别使整个系统输出最大h和最小频率l的波形的控制输入端时,在按相应的使频率增减的按键则实现频率从最大或最小开始增加或减少的功能。
3.6分频数模块
图8分频数模块
功能介绍:
在分频数产生模块中有一个输入端address接收从按键输入模块中输出地对频率的控制信号的输入端,一个分频数输出端s,五个相应的接数码管以显示系统输出信号的频率的输出端。
当分频数产生模块的输入端接收从按键输入模块中输出地对频率的控制信号后,便产生相应的分频数送到输出端,同时将与分频数相应频率送到与数码管相接的输出端。
3.7分频模块
分频模块有一个简单的分频器设计。
图9分频模块
功能介绍:
在分频模块中有一个系统时钟输入端clk,一个分频数输入端shu和一个频率输出端clk2。
分频器的功能主要是根据分频数产生相应的输出频率。
3.8选择模块
选择模块以用数据选择器实现,四种信号的信号选择可以用4选1数据选择器实现
图10选择模块
功能介绍:
在该模块为4选1的数据选择器,包括4个数据输入端dout0、dout1、dout2、dout3,一个数据选择输入端a和一个数据输出端b。
其功能是根据数据选择输入端输入的数据来选择相应的数据送到输出端。
从而实现数据的选择输出。
当a为"00"时,b输出为dout0,即输出为正弦波;
当a为"01"时,b输出为dout1,即输出为锯齿波;
当a为"10"时,b输出为dout2,即输出为方波;
当a为"11"时,b输出为dout3,即输出为三角波;
4波形仿真
4.1顶层文件仿真
在QuartusII软件输入上述代码,再通过编译和时序仿真,可得到如下的仿真波形。
图11顶层文件仿真
上图中的输出制式模拟信号各采样点的数字编码,由于没有经过数模转换,输出结果就如图中所示。
当将程序下载到硬件后,在示波器上就可以显示波形了。
4.2正弦波的仿真
在QuartusII软件输入上述代码,再通过编译和时序仿真,可得到如下的仿真波形。
图12正弦波的仿真
上图中的输出制式模拟信号各采样点的数字编码,由于没有经过数模转换,输出结果就如图中所示。
当将程序下载到硬件后,在示波器上就可以显示正弦波形了。
4.3.三角波的仿真
在QuartusII软件输入上述代码,再通过编译和时序仿真,可得到如下的仿真波形。
图13三角波的仿真
上图中的输出制式模拟信号各采样点的数字编码,由于没有经过数模转换,输出结果就如图中所示。
当将程序下载到硬件后,在示波器上就可以显示三角波形了。
4.4方波的仿真
在QuartusII软件输入上述代码,再通过编译和时序仿真,可得到如下的仿真波形。
图14方波的仿真
上图中的输出制式模拟信号各采样点的数字编码,由于没有经过数模转换,输出结果就如图中所示。
当将程序下载到硬件后,在示波器上就可以显示三角波形了。
4.5锯齿波的仿真
在QuartusII软件输入上述代码,再通过编译和时序仿真,可得到如下的仿真波形。
图15锯齿波的仿真
上图中的输出制式模拟信号各采样点的数字编码,由于没有经过数模转换,输出结果就如图中所示。
当将程序下载到硬件后,在示波器上就可以显示锯齿波波形了。
4.6按键模块的仿真
在QuartusII软件输入上述代码,再通过编译和时序仿真,可得到如下的仿真波形。
图16按键模块的仿真
上图中的输出制式模拟信号各采样点的数字编码,由于没有经过数模转换,输出结果就如图中所示。
当将程序下载到硬件后,就可以通过按键选择需要的频率了。
4.7分频数模块的仿真
在QuartusII软件输入上述代码,再通过编译和时序仿真,可得到如下的仿真波形。
图17分频数模块的仿真
上图中的输出制式模拟信号各采样点的数字编码,由于没有经过数模转换,输出结果就如图中所示。
当将程序下载到硬件后,就可以产生分频数。
4.8分频模块的仿真
在QuartusII软件输入上述代码,再通过编译和时序仿真,可得到如下的仿真波形。
图18分频模块的仿真
上图中的输出制式模拟信号各采样点的数字编码,由于没有经过数模转换,输出结果就如图中所示。
当将程序下载到硬件后,就可以实现分频功能了。
4.9选择模块的仿真
在QuartusII软件输入上述代码,再通过编译和时序仿真,可得到如下的仿真波形。
图19选择模块的仿真
上图中的输出制式模拟信号各采样点的数字编码,由于没有经过数模转换,输出结果就如图中所示。
当将程序下载到硬件后,就可以实现选择波形的功能了。
5硬件测试
本课程设计是简易多功能信号发生器,其总共有6个输入端和6个输出端。
具体的输入输出端可见图1中所示。
根据引脚所锁定图将系统中的各个输入输出端口锁定到合适的引脚上。
需要注意的是本系统用到了数码管显示,所以应该选定实验箱的模式5。
另外,本实验输入的时钟频率是100MHz。
当引脚锁定完毕后,将程序下载到试验箱中,连好示波器,在输入端输入相应的值即可得到相应的输出波形。
具体的硬件仿真波形如下:
在clk端输入100MHz的时钟信号,当图2的原理图中的a[1..0]输入“00”时得到的是正弦波波形,如图所示。
改变sel的值可以该变输出波形的幅值。
按频率控制单元中介绍的方法可以实现波形频率的改变。
图20正弦波波形
在clk端输入100MHz的时钟信号,当图2的原理图中的a[1..0]输入“01”时得到的是锯齿波波形,如图11所示。
改变sel的值可以该变输出波形的幅值。
按频率控制单元中介绍的方法可以实现波形频率的改变。
图21锯齿波波形
在clk端输入100MHz的时钟信号,当图1的原理图中的a[1..0]输入“10”时得到的是方波波形,如图12所示。
改变sel的值可以该变输出波形的幅值。
按频率控制单元中介绍的方法可以实现波形频率的改变。
在clk端输入100MHz的时钟信号,当图1的原理图中的a[1..0]输入“11”时得到的是三角波波形,如图12所示。
改变sel的值可以该变输出波形的幅值。
按频率控制单元中介绍的方法可以实现波形频率的改变。
6结论
EDA技术是当前数字系统设计领域比较火热的一种工具,他可以大大缩短设计需要的时间,降低成本的同时也提高了系统的稳定性。
使用VHDL语言描述硬件系统使得EDA技术有了更为广阔的空间。
本设计使用了基于Altera公司的开发软件工具QuartusII,本系统即实现了可以输出三种波形的简易多功能波形发生器,仿真结果证明,该设计正确有效,可以作为制作实物的理论依据。
对于EDA技QuartusII进行了系统的设计和仿真。
简易波形发生器在生活中各个场合都有着大量的使用术我一直都有着浓厚的兴趣,借做课设的机会,认真的研究了一下这么科学。
发现EDA技术比我们想象中的要有很大的难度。
里面有很多的思想来源于信息电子技术辑算法的设计,需要有很强的C语言编程功底。
学习一门知识要从最基本的体系构架开始,倘若一开始就从顶层设计入手,就会造成很多基本原理、基本概念上的偏差,甚里面的基本知识,包括电路的概念以及寄存器传送的基本知识。
VHDL语言与C语言有很大的不同,但是C语言的编程思想也可以移植到VHDL语言当中来,尤其是一些逻至会拖延设计的时间,事倍功半。
虽然可设完成了,但我意识到,我对于这门学科只是停留在入门的阶段,想要有更大的发展,要深入的研究,还要更多的努力和实践。
参考文献
[1]潘松,黄继业.EDA技术实用教程.北京:
科学出版社,2002.
[2]甘历.VHDL应用与开发实际.北京:
科学出版社,2003.
[3]孙延鹏,张芝贤.VHDL与可编程逻辑器件应用.航空工业出版社,2006.
[4]赵明富,李立军,石新锋,沈献博.EDA技术基础.北京大学出版社,2007.
[5]黄仁欣.EDA技术实用教程.清华大学出版社,2006.
附录
正弦波
libraryieee;
useieee.std_logic_1164.all;
entityzxis
port(clk,sel:
instd_logic;dout0:
outintegerrange0to255);
endzx;
architecturebhvofzxis
typemem_typeisarray(0to63)ofintegerrange0to255;
constantmem:
mem_type:
=(255,254,252,249,245,239,233,225,217,207,197,186,174,162,150,137,
124,112,99,87,75,64,53,43,34,26,19,13,8,4,1,0,0,1,4,8,13,19,26,34,43,53,64,75,87,99,112,124,137,150,162,174,186,197,207,217,225,233,239,245,249,252,254,255);
signaladdress:
integerrange0to63;
begin
process(clk)
begin
ifclk'eventandclk='1'then
ifaddress>63then
address<=0;
else
ifsel='1'then
address<=address+1;
dout0<=(mem(address))/2;
else
address<=address+1;
dout0<=mem(address);
endif;endif;endif;endprocess;endbhv;
方波
libraryieee;
useieee.std_logic_1164.all;
entityfbis
port(clk,sel:
instd_logic;
dout2:
outintegerrange0to255);
endfb;
architecturebhvoffbis
typemem_typeisarray(0to63)ofintegerrange0to255;
constantmem:
mem_type:
=(255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
signaladdress:
integerrange0to63;
begin
process(clk)
begin
ifclk'eventandclk='1'then
ifaddress>63then
address<=0;
else
ifsel='1'then
address<=address+1;
dout2<=(mem(address))/2;
else
address<=address+1;
dout2<=mem(address);
endif;endif;endif;endprocess;endbhv;
三角波
libraryieee;
useieee.std_logic_1164.all;
entitysjis
port(clk,sel:
instd_logic;
dout3:
outintegerrange0to255);
endsj;
architecturebhvofsjis
typemem_typeisarray(0to63)ofintegerrange0to255;
constantmem:
mem_type:
=(0,8,16,24,32,40,48,56,64,72,80,88,96,104,112,120,128,136,144,152,160,168,176,184,192,200,208,216,224,232,240,248,255,248,240,232,224,216,208,200,192,184,176,168,160,152,144,136,128,120,112,104,96,88,80,72,64,56,48,40,32,24,16,8);
signaladdress:
integerrange0to63;
begin
process(clk)
begin
ifclk'eventandclk='1'then
ifaddress>63thenaddress<=0;
elsefsel='1'then
address<=address+1;
dout3<=(mem(address))/2;
else
address<=address+1;
dout3<=mem(address);
endif;endif;endif;endprocess;endbhv;
锯齿波
libraryieee;
useieee.std_logic_1164.all;
entityjcis
port(clk,sel:
instd_logic;
dout1:
outintegerrange0to255);
endjc;
architecturebhvofjcis
typemem_typeisarray(0to63)ofintegerrange0to255;
constantmem:
mem_type:
=(0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,198,200,204,208,212,216,220,224,228,234,238,242,246,250,255);
signaladdress:
integerrange0to63;
begin
process(clk)
begin
ifclk'eventandclk='1'then
ifaddress>63then
address<=0;
else
ifsel='1'then
address<=address+1;
dout1<=(mem(address))/2;
else
address<=address+1;
dout1<=mem(address);
endif;endif;endif;endprocess;endbhv;
按键
libraryieee;
useieee.std_logic_1164.all;
entityanjianis
port(clk:
instd_logic;
b:
instd_logic_vector(1downto0);
h:
instd_logic;
l:
instd_logic;
addr:
outintegerrange0to40);
endanjian;
architecturebhvofanjianis
signalc:
integerrange0to40:
=0;
signalb0,b1,b2,b3:
std_logic;
begin
process(h,l,clk,b0,b1)
begin
ifclk'eventandclk='1'then
b0<=b(0);b1<=b0;b2<=b
(1);b3<=b2;
ifh='1'thenc<=40;
elsifl='1'thenc<=0;
elsefb0='0'andb1='1'then
ifc=40thenc<=0;
elsec<=c+1;endif;
elsifb0='1'andb1='0'then
ifc=40thenc<=0;
elsec<=c+1;endif;
elsifb2='0'andb3='1'then
ifc=0thenc<=40;
elsec<=c-1;
endif;
elsifb2='1'andb3='0'then
ifc=0thenc<=40;
elsec<=c-1;
endif;endif;endif;endif;endprocess;
addr<=c;
endbhv;
分频数
libraryieee;
useieee.std_logic_1164.all;
entityshuis
port(address:
inintegerrange0to40;
s:
outintegerrange0to7812;
wan,qian,bai,shi,ge:
outstd_logic_vector(3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 分频器 设计 论文
![提示](https://static.bdocx.com/images/bang_tan.gif)