基于FPGA的多功能波形发生器设计课程设计Word文档下载推荐.docx
《基于FPGA的多功能波形发生器设计课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于FPGA的多功能波形发生器设计课程设计Word文档下载推荐.docx(35页珍藏版)》请在冰豆网上搜索。
它能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波等,在电路实验和设备检测中具有十分广泛的用途。
例如在通信、广播、电视系统中,都需要射频(高频)发射,这里的射频波就是载波,把音频(低频)、视频信号或脉冲信号运载出去,就需要能够产生高频的振荡器。
在工业、农业、生物医学等领域内,如高频感应加热、熔炼、淬火、超声诊断、核磁共振成像等,都需要功率或大或小、频率或高或低的信号发生器。
传统的信号发生器主要有两类:
正弦波和脉冲波信号发生器,而函数发生器介于两类之间。
它能够提供正弦波、锯齿波、方波、三角波等几种常用标准波形,产生其它波形时,需要采用较复杂的电路和机电结合的方法。
这个时期的波形发生器多采用模拟电子技术,但是模拟器件构成的电路存在着尺寸大、价格贵、功耗大等缺点。
而且要产生的信号波形越复杂,则电路结构也会越复杂。
同时还有两个突出问题,一是通过电位器的调节来实现输出频率的调节,因此很难将频率调到某一固定值;
二是脉冲的占空比不可调节。
现代科学技术的飞速发展对信号源提出了越来越高的要求。
这些要求主要表现在高分辨率、高输出频率、任意波形等方面。
此时传统的信号发生器已经无法满足要求。
直接数字频率合成(DirectDigitalSynthesizer简称DDS)技术是一种新的全数字的频率合成原理,它从相位的角度出发直接合成所需波形。
这种技术由美国学者J.Tiercy,M.Rader和B.Gold于1971年首次提出,但限于当时的技术和工艺水平,DDS技术仅仅在理论上进行了一些探讨,而没有应用到实际中去。
但是随着电子技术的飞速发展,微处理器性能大幅提高,高速的D/A以及随机存储器大量涌现,DDS技术已经变得很容易实现。
它已广泛应用于通讯、雷达、遥控测试、电子对抗以及现代化的仪器仪表工业等许多领域。
将其与简单电路相结合就可以精确模拟仿真各种信号。
不论是在生产、实验还是在科研与教学上,多功能信号发生器都是用于仿真实验的最佳工具。
随着我国经济和科技的发展,对相应的测试仪器和测试手段也提出了更高的要求,多功能信号生器己成为测试仪器中至关重要的一类,因此开发多功能信号发生器具有重大意义。
1.课题简介
1.1课设目的
(1)懂得多功能波形发生器的结构组成
(2)懂得利用FPGA芯片实现多种波形的产生方法
(3)懂得一种复杂FPGA电路的设计
1.2课设要求
设计一个多功能波形发生器。
该波形发生器能产生正弦波、方波、三角波和由用户编辑的特定形状波形。
具体要求如下:
(1)具有产生正弦波、方波、三角波、锯齿波4种周期性波形的功能。
(2)用键盘输入编辑生成上述4种波形(同周期)的线性组合波形。
(3)具有波形存储功能。
(4)输出波形的频率范围为100Hz~200kHz;
重复频率可调,频率步进间隔≤100Hz。
(5)输出波形幅度范围0~5V(峰-峰值),可按步进0.1V(峰-峰值)调整。
(6)具有显示输出波形的类型、重复频率(周期)和幅度的功能。
(7)用键盘或其他输入装置产生任意波形。
多功能波形发生器系统由以下四部分组成:
输入部分、FPGA部分、DAC、显示部分组成。
图1多功能波形发生器系统框图
1.3课设工具
本次设计是基于Altera公司的QuartusII软件。
QuartusII是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(AlteraHardwareDescriptionLanguage)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
QuartusII支持Altera的IP核,包含了LPM/MegaFuction宏功能模块库,使用它,可以简化设计的复杂性,加快设计速度。
QuartusII平台支持一个工作组环境下的设计要求,其中包括支持基于Internet的协作设计。
此外,QuartusII通过和DSPBuilder工具与Matlab/SIMULINK相结合,可以方便地实现各种DSP应用系统;
支持Altera的片上可编程系统开发,集系统级设计、嵌入式软件设计、可编程逻辑设计于一体,是一种综性的开发平台。
2设计方案
2.1方案选择
1、模拟锁相环实现
模拟锁相环技术是一项比较成熟的技术。
应用模拟锁相环,可将基准频率倍频,或分频得到所需的频率,且调节精度可以做到相当高、稳定性也比较好。
但模拟锁相环模拟电路复杂,不易调节,成本较高,且由于受模拟器件的影响,波形变换调节时间较长,输出波形的毛刺较多,因此模拟锁相环实现在低频(0~500KHz)信号发生系统中不是很好的方案。
2、直接数字频率合成实现
直接数字频率合成(DDFS)技术是经典的数字频率合成技术。
由于数字量的可操作性远远高于模拟量,采用DDFS的优点在于频率精度高、波形调节方便、且输出波形毛刺少等。
基于单片机的数字波形发生系统受单片机指令频率的限制,输出波形频率较低,而基于FPGA的波形发生系统就不存在这样的问题,其输出频带较单片机实现有很大的展宽。
本系统设计选定以FPGA作为系统控制核心的直接数字频率合成实现方案。
2.2设计原理
采用DDS技术可以很方便地产生各种高质量的波形。
DDS技术是从相位概念出发之结合成所需要波形的一种频率合成技术。
以正弦波为例,首先要按照一定的采样点数将正弦波形一个周期的数据信息存于ROM表中,表中包含着一个周期正弦波的数字幅度信息,每个地址对应正弦波中0到360度范围内的一个相位点的幅度值,查找表时即是把输入的地址相位信息映射成正弦波幅度的数字量信号,通过设置的输出端口输出。
在实物设计中,可以使用D/A接口来实现波形信号的输出。
为简化设计过程,本设计并未采用DDS技术,而是采用描点输出的方式,实现波形发生器的设计。
程序中设置一个波形的起始点,经过比较、计算得出波形的其他数值,将这些点依次连续输出,从而实现波形的仿真。
以递增锯齿波为例,首先定义初始点为tmp=“00000000”;
在时钟上升沿到来时,执行tmp<
=tmp+1;
语句,同时将tmp输出,当tmp=“11111111”;
时,将tmp值清零,执行下一个循环。
在本设计中,采用QuartusII软件仿真,所以可以通过波形文件直观的反映出输出的数字量的变化情况,以达到波形输出的仿真。
正弦波:
通过循环不断地从RAM中依次读取正弦波一个周期在时域上64个采样点的波形数据送入波形DAC,从而产生正弦波。
正弦波的频率取决于读取数据的速度。
任意波:
首先通过键盘把任意波形波形数据存储在存储器中。
然后循环不断地从存储器2中依次读取任意波一个周期在时域上64个采样点的波形数据送入波形DAC,从而产生任意波。
任意波的频率取决于读取数据的速度。
三角波:
三角波波形是对称的,每边呈线形变化,所以可以根据地址数据做简单运算,就可以得到三角波
锯齿波:
产生单调性锯齿波,因此把地址数据进行左移2位,结果送波形DAC就可。
方波A:
方波A产生也是由64个采样点组成,64个采样点的数据只有“低电平”和“高电平”2种状态。
更改“低电平”和“高电平”出现的比例,可以达到调节占空比的目的。
波形DAC:
根据输入的波形数据(即FPGA输出的数据),产生相应的模拟波形的输出。
调幅DAC:
根据输入的幅度调节数据(即FPGA输出的数据),用来调节波形DAC的基准电压,到达输出波形幅度调节的目的。
波形指示:
每种波形具有一个选择开关,而每个选择开关与FPGA接口的一端都并有一个发光二极管,发光二极管起指示作用。
频率显示:
频率可以直接用4位BCD拨盘开关上的数字和档位开关位置一起来表示频率。
幅度显示:
用4个数码管来显示输出波形的幅度。
2.3设计流程
首先启动QuartusII软件如图2所示:
图2QuartusII启动界面
接着利用向导,建立一个新的工程。
在File菜单中选择NewProjectWizard选项启动项目向导。
如图2所示,分别指定创建工程的路径,工程名和顶层文件名。
工程名和顶层文件可以一致也可以不同。
一个工程中可以有多个文件,但只能有一个顶层文件。
这里我将工程名取为:
keshe。
如图3所示。
图3创建工程界面
在图2所示界面点击NEXT按钮出现对话框如图3所示直接点next按钮然后在出现的界面中选择芯片出现如图4所示界面。
点击File-new按键,选择VHDL语言,如图5所示。
即进入VHDL语言编辑区如图7所示。
图4创建工程的结束界面
图5芯片选择
图6创建VHDLFile对话框
图7VHDL语言编辑框
在图7所示的VHDL语言编辑框中依次输入分频器、四选一选择器、循环加法计数器等4钟计数器、七段译码器等功能模块的VHDL语言源程序。
输入完成之后单击保存图标并输入相应的文件名。
保存之后即可对源程序进行编译。
如果编译成功则源程序完全正确,否则应该返回到出错处改正错误直至编译成功为止。
编译成功之后再进行波形仿真,从中得出相应数据及现象。
3仿真结果
3.1编译警告
输入相应源代码,点击
,得出结果如图8
图8编译结果
程序在编译阶段出现了八个警告,以下面两个为例:
1.Warning(10492):
VHDLProcessStatementwarningatmine4.vhd(232):
signal"
y"
isreadinsidetheProcessStatementbutisn'
tintheProcessStatement'
ssensitivitylist
2.Warning:
OutputpinsarestuckatVCCorGND
Warning(13410):
Pin"
p180"
isstuckatVCC
第一个警告,在process里作为被判断信号(if或者case后面的)或者赋值语句右端信号通常应该写在process的敏感信号表里。
有些EDA工具不检查这个,可能会导致仿真结果与综合出来的电路不一致。
实际上,综合工具在综合的时候会自动把这类信号添加到敏感信号表里,但仿真工具不会,而是完全按照代码体现的语意来仿真。
caseyis--7段码译码
when0=>
lcd(7downto1)<
="
0000001"
;
when1=>
1001111"
when2=>
0010010"
when3=>
0000110"
when4=>
1001100"
when5=>
0100100"
when6=>
0100000"
when7=>
0001111"
when8=>
0000000"
when9=>
0000100"
whenothers=>
endcase;
endprocess;
综合时,信号y被添加到敏感信号表中。
第二个警告,认为引脚p180直接到正电源了。
port(clk:
instd_logic;
--时钟信号输入
set,clr,up,down,zu,zd:
--各个波形特征的调节触发信号
posting:
--任意波键盘置入信号
u0,d0,sw:
--方波A、B的切换sw,和方波B的幅度调节按键
ss:
instd_logic_vector(3downto0);
--档位选择信号
sss:
instd_logic_vector(4downto0);
--波形选择信号
Data3,Data2,Data1,Data0:
instd_logic_vector(3downto0);
--BCD码输入
p180:
outstd_logic;
--预留接口
lcd:
outstd_logic_vector(7downto0);
--显示输出
shift:
outstd_logic_vector(3downto0);
--位码输出
dd,a:
outstd_logic_vector(7downto0));
--波形、幅度数据输出
但实际上引脚p180是预留接口未用。
3.2编译结果
图9编译结果
3.3建立仿真文件
在编译通过后,要建立后缀为vwf的仿真波形文件。
执行菜单命令,选择new,再选择需要的VectorWaveformFile,单击ok。
在波形文件编辑方式下,右键选择insert添加信号节点,设置相应的参数。
如下图所示。
图10仿真波形文件建立
图11仿真波形参数设置
3.4仿真结果
仿真结果如下图所示
图12仿真波形
3.5RTL视图
生成的RTL视图如下
图13RTL视图
4程序分析
4.1VHDL语言分析
一个VHDL语言的设计程序描述的是一个电路单元,这个电路单元可以是一个门电路,或者是一个计数器,也可以是一个CPU,一般情况下,一个完整的VHDL语言程序至少包括实体、结构体和程序包三个部分。
实体给出电路单元的外部输入输出接口信号和引用信息,结构体给出了电路单元的内部结构和信号的行为特点,程序包定义在设计结构体和实体中将用到的常数、数据类型、子程序和设计好的电路单元等。
第一部分是程序包,程序包是用VHDL语言编写的共享文件,定义在设计结构体和实体中将要用到的常数、数据类型、子程序和设计好的电路单元等,放在文件目录名称为IEEE的程序包库中。
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
第二部分是程序的实体,定义电路单元的输入/输出引脚名称。
程序的实体名称可以任意取,但必须与VHDL程序的文件名称相同。
实体的标示符是ENTITY,实体以ENTITY开头,以END结束。
ENTITYfulladderIS
PORT(a,b,Ci:
instd_logic;
Co,s:
outstd_logic_vector(7downto0));
ENDfulladder;
其中,定义了a,b,Ci为输入信号引脚,定义Co,s为输出信号引脚。
第三部分是程序的结构体,具体描述电路的内部结构和逻辑功能。
结构体有三种描述方式,分别是行为(BEHAVIOR)描述方式、数据流(DATAFLOW)描述方式和结构描述方式。
其中数据流描述方式又被称为寄存器(RTL)描述方式。
结构体以表示ARCHITECHTURE开头,以END结尾。
结构体的名称可以任取。
architecturebehavoffulladderis
BEGIN
s<
=axorbxorCi;
Co<
=(aandb)or(aandCi)or(bandCi);
ENDfulladder
上面程序段中结构体的描述方式属于程序流描述方式。
4.2主要函数语句分析
在程序设计中,主要使用的函数语句有两种:
If-else语句和case-when语句。
这两种语句也是VHDL程序设计中常用的语句。
二者都属于流程控制语句。
流程控制语句通过条件控制开关决定是否执行一条或几条语句或重复执行一条或几条语句或跳过一条或几条语句。
IF语句是一种条件语句,它根据语句中所设置的一种或多种条件,有选择地执行指定的顺序语句。
IF语句的语句结构有以下三种:
IF条件句Then--第一种IF语句结构
顺序语句
ENDIF
IF条件句Then--第二种IF语句结构
顺序语句
ELSE
IF条件句Then--第三种IF语句结构
顺序语句
ELSIF条件句Then
...
顺序语句
CASE语句根据满足的条件直接选择多项顺序语句中的一项执行,CASE语句的结构如下:
CASE表达式IS
When选择值=>
...
ENDCASE
当执行到CASE语句时,首先计算表达式的值,然后根据条件句中与之相同的选择值。
执行对应的顺序语句,最后结束CASE语句。
表达式可以是一个整数类型或枚举类型的值,
也可以是由这些数据类型的值构成的数组。
5小结
通过这次FPGA课程设计,我对FPGA的基本原理有了进一步的认识。
FPGA的基础就是数字电路和VHDL语言,其开发需要从顶层设计、模块分层、逻辑实现、软硬件调试等多方面着手。
开发环境常用的有Altera公司的QuartusII
和Xilinx公司的ISE,本次课程设计选用的是QuartusII
。
此次课程设计暴露了我平时学习中的许多不足。
在设计的过程中我遇到了一些问题,比如对Quartus软件的使用还不太熟悉,在编译的时候出现的错误不知道怎么解决,请教了很多同学才弄明白。
还有进行仿真之前需要自己建立仿真波形文件,才能进行仿真等等,但在和老师、同学的交流下,最后我都解决了问题。
另一方面我也感受到动手实践的重要性。
动手实践是理论知识得以灵活运用的必要前提,也是今后走上工作岗位之后能够很好的完成设计工作的技术保证。
FPGA是实用性很强的课程,只有多学多用,边学边用,才能促进提高自己的能力。
虽然课设完成了,但是我意识到,我对FPGA技术仅仅只是停留在入门的阶段,想要有更大的发展,更深入的研究,还需要更多的努力与实践。
6参考文献
【1】潘松黄继业.EDA技术与VHDL(第二版).北京:
清华大学出版社,2005.7
【2】康华光.电子技术基础.北京:
高等教育出版社.2006.1
【3】付家才.