文档介绍:摘要:本文主要探索了应用FPGA灵活可重复编程和方便在系统重构的特性,以Verilog HDL为设计语言,将硬件功能以软件设计来描述,提高了产品的集成度,缩短开发周期。所设计的波形发生器可产生正弦波(sina_wave)、锯齿波(swat_wave)、矩形波(squr_wave)、三角波(trig_wave)四种信号,能够实现信号的转换并且频率可调;设计的频率计以1Hz为基准信号,测量的范围是1Hz—9999Hz,测量的结果以四位十进制的形式输出。并且给出了实现D/A转换和动态显示的硬件外围电路,而FPGA作为控制中心。最后还针对设计中可以提高、改进的地方进行了探讨,如:频率计的结果可用字符LCD显示,频率计的测量范围可通过选择不同的基准频率(比如10Hz、100Hz、1KHz)来扩展,利用频率计电路来显示波形发生器的输出波形的频率及形状标识,这样就实现了实验室中函数发生器的雏形:能实现任意波形的输出并且能够测量外来信号的频率,这也是本文的设计思路。
关键字:任意波形发生器频率计 FPGA Verilog HDL QuartusII
基于FPGA的任意波形发生器&数字频率计设计
设计的思路主要是以实验室中常用的函数发生器为雏形,及既能输出任意波形,并且频率可调,还可以测量外部信号的频率。实现这两种功能设计的方式有很多种,这里采用FPGA设计来实现,验证设计的芯片采用Cyclone系列,具体芯片可根据实验室的配置来确定。
语言采用Verilog HDL,软件以QuartusII为主。其中任意波形发生器的实现采用模块设计,这样很好的利用了QuartusII 软件中的LPM_ROM模块,能够达到最优设计;频率计的功能完全采用HDL语言描述,最后的顶层文件采用模块设计来完成。最终的顶层文件如下图所示:
一、任意波形发生器的实现
要实现的功能:可产生正弦波(sina_wave)、锯齿波(swat_wave)、矩形波(squr_wave)、三角波(trig_wave)四种信号,能够实现信号的转换(select)并且频率可调。主要由三部分组成:地址指针控制模块,四种波形数据存储模块,D/A转换模块。前面2个模块在FPGA中实现,D/A转换通过外围电路实现。该部分的实现框图如下:
Wave_genTop 顶层设计
地址指针
数据存储ROM
波形输出
D/A转换
数据ROM中存储正弦波、锯齿波、矩形波、三角波4种信号各一个周期的波形数据(一个周期选择128个数据采样值),地址指针读取ROM中不同区域的数据,即可产生不同的波形。通过控制读取时间间隔的不同,可实现频率的调整。
1、波形数据存储ROM模块的设计
。由于每一种波形一个周期取128个数据,故共有512个数据。在QuartusII LPM_ROM中配置如下:
四种波形在ROM中的存储地址分别为:正弦波(sina_wave):0—127;锯齿波(swat_wave):128—255; 矩形波(squr_wave):256—383; 三角波(trig_wave):384—511;每个波形各占16Byte区域。通过对各个波形128点采样(用C语言计算),得到各个波形一周期的数据,填写到对应的ROM存储区域后,即完成了ROM数据初始化文件。:
正弦波(sina_wave)波形数据:
锯齿波(swat_wave)波形数据
矩形波(squr_wave)波形数据:
三角波(trig_wave)波形数据:
,在原理图输入界面下插入LPM_ROM模块,然后利用MegaWizard Plug-In Manager,对其进行编辑,主要是完成初始化工作。主要界面如下:
通过以上两步操作,及完成了波形数据存储模块的设计。
2、指针控制模块的设计
该模块的功能采用Verilog HDL来描述,[1]。程序实现的主要功能是:根据不同的波形选择(select[1:0]),来改变送入ROM中的地址指针address。四种波形一个周期的数据各占不同的16B,每次波形改变使address指向各段数据首地址。(见顶层文件中所示),然后采用图形编辑方式,完成波形发生器这部分电路的设计。该部分设计完成框图见顶层文件框图(如第2页上图所示)。
该部分功能验证的波形仿真结果如下:
①产生正弦波(sina_wave)时送到DAC0832的数据:
②产生锯齿波(swat_wave)时送到DAC0832的数据:
③产生矩形波(squr_wave)时送到DAC0832的