基于EDA技术的正弦波方波三角波锯齿波四种波形发生器.docx
《基于EDA技术的正弦波方波三角波锯齿波四种波形发生器.docx》由会员分享,可在线阅读,更多相关《基于EDA技术的正弦波方波三角波锯齿波四种波形发生器.docx(13页珍藏版)》请在冰豆网上搜索。
基于EDA技术的正弦波方波三角波锯齿波四种波形发生器
梧州学院课程论文
(2014-2015学年第2学期)
课程论文题目:
基于EDA技术的正弦波、方波、三角波、锯齿波、四种波形发生器
学生姓名:
提交日期:
2015年7月13日学生签名
学号
班级
12级
组员
课程编号
BJ9501001
专业
电子科学与技术
课程名称
EDA技术与Verilog语言
任课教师
教师评语:
成绩评定:
分任课教师签名:
年月日
一、系统设计目的与要求4
1.1、前言4
1.2、功能要求:
5
1.3、设计目的:
5
二、设计方案以及原理说明6
2.1、设计方案6
2.2、原理说明7
三、设计内容8
3.1、正弦波发生器8
3.2、方波发生器11
3.3、三角波发生器12
3.4、锯齿波发生器14
3.5、波形的选择16
四、心得体会20
五、参考文献21
论文题目:
基于EDA技术的正弦波、方波、三角波、锯齿波、四种波形发生器
学生姓名:
摘要
随着EDA技术以及大规模集成电路技术的迅猛发展,波形发生器的各方面性能指标都达到了一个新的水平。
采用CPLD/FPGA器件在QuartuesII设计环境中用Verilog?
HDL语言完成的波形发生器具有频率稳定性高,可靠性高,输出波形稳定等特点。
本文介绍了基于EDA技术的波形发生器的研究与设计。
本文采用Verilog?
HDL语言,运用LPM-ROM制定的方法设计的波形发生器,经过按键来选择四种波形实现了正弦波,方波,三角波,以及锯齿波四种波形的输出,经过实际下载到FPGA实验板上,设计要求已经完全实现。
关键词:
Verilog?
HDL波形发生器LPM-ROMFPGA
一、系统设计目的与要求
1.1、前言
随着现代化集成电路和计算机技术的不断飞跃发展,使得电子产品的设计在市场上的应用更为广泛,而且其实现方法的选择也变得越来越多。
基于电路板的设计方法是传统电子产品通用的一中设计方案,这种方法是需要采用较多的固定功能器件,再通过这几器件的设计配合,从而实现模拟电子产品的功能,这些工作的重点就在于如何选择这些器件及怎样设计电路板。
由于可编程逻辑器件的出现和计算机性价比的提高,这影响了传统的数字电子系统的设计方法,对其进行了解放性的革命。
现在要实现电子系统的功能是通过设计师自己设计的芯片来完成的,之后将传统的固件选用及电路板设计工作放在芯片设计中进行,这种方法是现代电子系统的设计方法。
上个世纪九十年代以来,由于复杂化、数字化和大规模集成化的电子产品设计系统的日趋成熟,使得各种电子系统的设计软件也应运而生。
在这些专业化软件中,EDA(ElectronicDesignAutomation)具有一定的代表性,EDA技术是一种基于芯片的现代电子系统设计方法。
它的优势主要集中在能用HDL语言进行输入、进行PLD(可编程器件)的设计与仿真等系统设计自动化上;上个世纪九十年代,可编程器件又出现了模拟可编程器件,由于受技术、可操作性及性价比的影响,今后EDA技术会向模拟可编程器件的设计与仿真方向发展,并占据市场的一定份额。
EDA技术主要包括大规模可编程逻辑器件、硬件描述语言、开发软件工具及实验开发系统4个方面。
其中,大规模可编程逻辑器件是利用EDA技术进行电子系统设计的载体硬件,描述语言是利用EDA技术进行电子系统设计的主要表达手段,开发软件工具是利用EDA技术进行电子系统设计的智能化与自动化设计工具,实验开发系统则是提供芯片下载电路及EDA实验、开发的外围资源。
数字化是电子设计的必由之路,这已成为共识。
在数字化的道路上,我国的电子技术经历了一系列重大的变革。
从应用小规模集成电路构成电路系统,到广泛地应用微控制器或单片机(MCU),在电子系统设计上发生了具有里程碑意义的飞跃。
电子产品正在以前所未有的速度进行着革新,主要表现在大规模可编程逻辑器件的广泛应用。
在可编程芯片CPLD(复杂可编程逻辑器件)和FPGA(现场可编程门阵列)上实现电子系统的设计,必将成为今后电子系统设计的一个发展方向。
所以电子设计技术发展到今天,又将面临另一次更大意义的突破,即CPLD/FPGA在EDA(电子设计自动化)基础上的广泛应用。
本设计将采用基于VHDL的EDA设计来实现波形发生器的各种功能。
1.2、功能要求:
(1)可产生题目要求的几种波形(频率可调,一个波形周期不少于64点),利用DAC0832输出,用示波器观察。
(2)具有波形选择、起动、停止功能。
(3)利用数码LED管或液晶显示工作状态。
1.3、设计目的:
(1)本次课程设计的目的是为了培养我们在动手方面要能够独立自主的完成的能力。
(2)让我们更加理解Verilog?
HDL语言以及熟练应用。
(3)了解FPGA的外围器件的应用以及硬件电路的设计原理
二、设计方案以及原理说明
2.1、设计方案
本系统由FPGA(可编程门阵列),数模转换,时钟(提供clk信号)等组成。
全部为FPGA试验箱所有,不需要增加任何器件。
用FPGA产生的255—0的计数值输入到DAC0832中,将产生对应的模拟信号。
本系统采用的是软硬件结合的方法。
由于一个周期内的任意波形的离散样点数对硬件实现的复杂性直接产生影响,因此,为了简化硬件存储器件的规模,取128个样点进行讨论。
具体做法是先对一个周期进行128点采样,然后依次存于ROM中,再以fs频率给出地址码,控制存储器周期的读出数据,并经D、A转换和模拟放大,便能得到一定的频率的周期信号。
因此周期信号的频率为fo=fs/M.其中M为采样点个数,本设计中取值为128;fs为存储器读出频率。
显然,通过改变读出频率fs,便可获得不同频率的周期信号fo.。
系统结构图如图1所示。
波形发生器电路系统结构图:
FPGA
D/A输出
按键输入
波形数据ROM
FPGA
图1
2.2、原理说明
以正弦波为例说明。
完整的波形发生器由三部分组成:
由计数器构成的地址信号发生器、波形数据ROM和D/A。
在FPGA的顶层文件中,计数器通过外来控制信号和高速时钟信号向波形数据ROM发出地址信号,输出波形的批评你率由发出的地址信号的速度决定;当以固定的频率扫描输出地址时,输出波形是固定频率,而当以周期性时变方式扫描输出地址时,则输出波形为扫频信号。
波形数据ROM中存有发生器的波形数据,如正弦波或者三角波数据等。
当接受来自FPGA的地址信号后,将从数据线输出相应的波形数据。
波形数据ROM可以由多种方式实现,如在FPGA外面外接普通ROM或者由FPGA中的EAB模块相当,即利用LPM-ROM来实现。
D/A转换器负责将ROM输出的数据转换成模拟信号,经过滤波电路后输出。
输出波形的频率上限与D/A转换器件的转换速度有重要关系,我们的试验箱上用的是DAC0832。
DAC0832是8位并行、中速(其转换时间1us)、电流型D/A转换芯片。
DAC0832
内部由三部分组成,“8位输入寄存器”用于存放CPU送来的数字量,使输入数
字量得到缓冲和锁存,由加以控制。
“8位DAC寄存器”用于存放待转换的数字量,由控制。
“8位D/A转换电路”由8位T型网路和电子开关组成,电子开关受“8位DAC寄存器”输出控制,T型电阻网路能输出与数字量成正比的模拟电流。
因此,DAC0832通常需要外接运放才能得到模拟输出电压。
DAC0832共有20条引脚,双列直插式封装。
⑴数字输入线DI7~DI0(8条)DI7~DI0常和CPU数据总线相连,用于输入CPU送来的待转换数字里,DI7为最高位。
⑵控制线(5条)为片选线。
当为低电平时,本片被选中工作;当为高电平时,本片不被选中工作。
⑶输出线3条为运算放大器的反馈线,常接到运放的输出端。
和为两条模拟电流输出线。
+为一常数。
⑷电源线(4条)VCC为电源输入线,可在+5~+15V范围捏;为参考电压,一般在-10~+10V范围内,由稳压电源提供;DGND为数字地线;AGND为模拟量地线。
通常接在一起。
三、设计内容
3.1、正弦波发生器
⑴正弦波信号波形数据文件的建立
ROM中的地址线宽为8,数据线宽为8,其中的正弦波波形数据由128个点构成,此数据经DAC0832,可在示波器上观察到正弦波形。
ROM中的波形文件建立如图:
⑵LPM_ROM定制
1选菜单tools—MegaWizardPlug-InManager,选择Createanew...,然后按next,进入。
选中LPM-ROM;最后在Browse下的栏中键入路径与输出文件名。
2单击Next,选择ROM的数据位宽度为8,地址线宽度为8,即设置此ROM能存储8位二进制数据共128个,然后进入。
3打开已经定制的ROM文件,观察文件中的实体表达、COMPONEN语句,例化语句和初始化文件的路径和文件名。
4最后将其设置为工程,并确定目标器件,进行测试,仿真波形如图所示。
⑶完成正弦信号发生器顶层文件的设计和测试
以下是正弦信号发生器的顶层设计。
其中调用了如上所说的ROM模块、ROM中的数据文件。
源程序:
modulezhengxuanbo(RST,CLK,EN,Q);
output[7:
0]Q;//定义输出Q为8位
inputEN,CLK,RST;//定义EN,CLK,RST为输入变量
wire[6:
0]TMP;//定义TMP中间变量为网线型
reg[6:
0]Q1;//定义Q1为寄存器
always@(posedgeCLKornegedgeRST)//CLK上升沿或者RST下降沿触发
if(!
RST)Q1<=7'B0000000;//8位计数器
elseif(EN)//如果EN为1,Q1加1
Q1<=Q1+1;
elseQ1<=Q1;//否则Q1不加
assignTMP=Q1;//Q1赋值给TMP
zhengIC1(.address(TMP),.inclock(CLK),.q(Q));
Endmodule
⑷仿真波形:
⑸功能描述:
CLK为时钟信号,EN为使能,高电平有效。
⑹正弦波发生器实体图:
3.2、方波发生器
⑴方波信号波形数据文件的建立
如图所示:
⑵LPM_ROM的定制与正弦波同
⑶方波发生器的顶层文件的建立和测试。
源程序:
modulefangbo(RST,CLK,EN,Q);
output[7:
0]Q;//定义输出Q为8位
inputEN,CLK,RST;//定义EN,CLK,RST为输入变量
wire[6:
0]TMP;//定义TMP中间变量为网线型
reg[6:
0]Q1;//定义Q1为寄存器
always@(posedgeCLKornegedgeRST)//CLK上升沿或者RST下降沿触发
if(!
RST)Q1<=7'B0000000;//8位计数器
elseif(EN)//如果EN为1,Q1加1
Q1<=Q1+1;
elseQ1<=Q1;//否则Q1不加
assignTMP=Q1;//Q1赋值给TMP
fangIC1(.address(TMP),.inclock(CLK),.q(Q));
Endmodule
⑷仿真波形:
⑸CLK为时钟信号,EN为波形启动键,高电平有效。
由仿真图可以看出,满足产生方波的要求。
⑹方波发生器实体图:
;
3.3、三角波发生器
⑴三角波信号波形数据文件的建立
如图所示:
⑵LPM_ROM的定制与正弦波相同
⑶三角波发生器的顶层文件的建立和测试。
源程序:
modulesanjiao(RST,CLK,EN,Q);
output[7:
0]Q;//定义输出Q为8位
inputEN,CLK,RST;//定义EN,CLK,RST为输入变量
wire[6:
0]TMP;//定义TMP中间变量为网线型
reg[6:
0]Q1;//定义Q1为寄存器
always@(posedgeCLKornegedgeRST)//CLK上升沿或者RST下降沿触发
if(!
RST)Q1<=7'B0000000;//8位计数器
elseif(EN)//如果EN为1,Q1加1
Q1<=Q1+1;
elseQ1<=Q1;//否则Q1不加
assignTMP=Q1;//Q1赋值给TMP
sanIC1(.address(TMP),.inclock(CLK),.q(Q));
Endmodule
⑷仿真波形:
⑸功能描述:
CLK为时钟信号,EN为波形启动键,高电平有效。
由仿真图可以看出,满足产生三角波的要求。
⑹三角波发生器实体图:
3.4、锯齿波发生器
⑴锯齿波信号波形数据文件的建立
如图所示:
⑵LPM_ROM的定制与正弦波同
⑶锯齿波发生器的顶层文件的建立和测试。
源程序:
modulejuchi(RST,CLK,EN,Q);
output[7:
0]Q;//定义输出Q为8位
inputEN,CLK,RST;//定义EN,CLK,RST为输入变量
wire[6:
0]TMP;//定义TMP中间变量为网线型
reg[6:
0]Q1;//定义Q1为寄存器
always@(posedgeCLKornegedgeRST)//CLK上升沿或者RST下降沿触发
if(!
RST)Q1<=7'B0000000;//8位计数器
elseif(EN)//如果EN为1,Q1加1
Q1<=Q1+1;
elseQ1<=Q1;//否则Q1不加
assignTMP=Q1;//Q1赋值给TMP
juIC1(.address(TMP),.inclock(CLK),.q(Q));
Endmodule
⑷仿真波形
如图所示:
⑸功能描述:
CLK为时钟信号,EN为波形启动键,高电平有效。
由仿真图可以看出,满足产生锯齿波的要求。
⑹锯齿波发生器实体图:
3.5、波形的选择
(1)源程序:
modulexuan(OUT,IN0,IN1,IN2,IN3,SEL);
output[7:
0]OUT;//定义输出OUT,为8位
input[7:
0]IN0;//定义四路波形输入
input[7:
0]IN1;
input[7:
0]IN2;
input[7:
0]IN3;
input[1:
0]SEL;//选择波形
reg[7:
0]OUT;
always@(SELorIN0orIN1orIN2orIN3)begin
case(SEL)
0:
OUT=IN0;//当SEL为0,输出正弦波
1:
OUT=IN1;//当SEL为1,输出方波
2:
OUT=IN2;//当SEL为2,输出三角波
3:
OUT=IN3;//当SEL为3,输出锯齿波
default:
OUT=8'bX;//OUT为8位
endcase
end
endmodule
⑵仿真波形
⑶功能描述:
clk1为时钟输入信号。
当SEL为“00”时,输出为正弦波;
当SEL为“01”时,输出为方波;
当SEL为“10”时,输出为三角波;
当SEL为“11”时,输出为锯齿波;
EN为波形启动,停止键。
⑷波形发生器总体结构图:
⑸引脚锁定
四、心得体会
通过本次课程设计,我的体会很多也很深,我以前没有对基于FPGA的正弦波发生器进行系统的研究,在本次完成本次课程设计的过程中,我遇到了很多问题,也走了很多弯路,还好最后终于通过自己的努力得到了理想的结果。
通过本课题,我对EDA技术和FPGA技术有了更进一步的理解,掌握了FPGA的层次化设计电路的方法,掌握了用Verilog?
HDL语言编写各个功能模块并通过波形确定电路设计是否正确。
掌握了下载验到目标器件的过程。
在课程设计中遇到的问题很多,有一些是比较基础的,但由于接触不多,还是遇到了不少麻烦,例如怎样把四种不同的波形用按键来控制输出的波形,以及启动停止功能。
还有计数器的设计,我在参考老师以前上课写的程序后才慢慢去理解体会。
但是经过了这么多的锻炼,现在再看这些问题,就觉得没有那么难了,我想这就是我得到的最大收获。
总之,这次课程设计给我一个很好的机会,使我受益匪浅,我相信这对我以后的学习和工作都会有很大的帮助。
五、参考文献
[1]黄正瑾.在系统编程技术及其应用.南京:
东南大学出版社,2007
[2]彭介华.电子技术课程设计指导.北京:
高等教育出版社,2007
[3]李国丽,朱维勇.电子技术实验指导书.合肥:
中国科技大学出版社,2008
[4]潘松,黄继业.EDA技术实用教程.北京:
科学出版社,2008
[5]郑家龙,王小海,章安元.集成电子技术基础教程.北京:
高等教育出版社,2007
[6]宋万杰,罗丰,吴顺君.CPLD技术及其应用.西安:
西安电子科技大学出版社,2006
[7]张昌凡,龙永红,彭涛.可编程逻辑器件及VHDL设计技术.广州:
华南工学院出版社,2001