《EDA课程设计_基于FPGA的任意波形发生器(18页).doc》由会员分享,可在线阅读,更多相关《EDA课程设计_基于FPGA的任意波形发生器(18页).doc(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-EDA课程设计_基于FPGA的任意波形发生器-第 13 页EDA课程设计 _基于FPGA的任意波形发生器学院: 通信与电子工程学院 摘 要本文主要探索了应用FPGA灵活可重复编程和方便在系统重构的特性,以Verilog HDL为设计语言,运用QuarrtusII软件,将硬件功能以软件设计来描述,提高了产品的集成度,缩短开发周期。所设计的波形发生器可产生正弦波(sina_wave)、锯齿波(swat_wave)、矩形波(squr_wave)、三角波(trig_wave)四种信号,能够实现信号的转换并且频率可调;关键字:任意波形发生器 FPGA Verilog HDL QuartusIIAbst
2、ract This paper explored the application of flexible and reprogrammable FPGA and convenience features in the system reconfiguration to Verilog HDL design language, the hardware functions to software design to describe and improve the integration of products and shorten the development cycle. Wavefor
3、m generator designed to produce sine wave (sina_wave), ramp (swat_wave), rectangular wave (squr_wave), triangular wave (trig_wave) four signals, to achieve signal conversion and frequency adjustable;Keywords: Arbitrary Waveform Generator FPGA Verilog HDL QuartusII目录摘 要IABSTRACTII目录III第 1章 绪论11.1 概述1
4、1.2 任意波形发生器的功能11.3 国内外发展现状2第2章波形发生器的基本理论42.1 FPGA简介42.2 Verilog 语言简介42.2.1 Verilog语言概述42.2.2VerilogHDL基本结构52.3 QuarrtusII概述6第3章 方案设计83.1 系统介绍83.2波形发生器各个模块设计93.2.1 Wave_gen 模块93.2.2 波形数据存储 ROM 模块9第4章 波形发生器软件仿真114.1 设计平台及仿真工具114.2 仿真过程11结论14附录16第 1章 绪论1.1 概述波形发生器是一种常用的信号源,广泛应用于电子电路,自动控制系统,教学实验等领域,目前使用
5、出现了大量能够产生多种波形且性能稳定的任意波形发生器,但大多数方案都是基于串行或并行总线进行数据的传输,这种方案虽然成本较低,但系统的实时性较差,难以满足复杂波形的大数据量的传输要求。我们设计了一种基于FPGA芯片的任意波形发生器,充分利用了FPGA强大的逻辑功能,实现了利用单片FPGA芯片控制整个系统的方案。1.2 任意波形发生器的功能任意波形发生器既具有其他信号源的信号生成能力,又可以通过各种编辑手段生成任意的波形采样数据,方便地合成其他信号源所不能生成的任意波形,从而满足测试和仿真实验的要求。任意波形发生器的主要功能包括:(1)函数发生功能 基础实验中,为了验证电路功能、稳定性和可靠性,
6、需要给它施加理想波形,任意波形发生器能替代函数发生器提供正弦波、方波、三角波、锯齿波等波形,还具有各种调制和扫频能力。利用任意波形发生器的这一基础功能就能满足一般实验的信号需求。(2)任意波形生成运行在实际电子环境中的设备,由于各种干扰的存在以及环境的变化,实际电路中往往存在各种信号缺陷和瞬变信号,例如过脉冲、尖峰、阻尼瞬变、频率突变等。任意波形发生器可以模拟这些特殊信号,以测试系统的实际性能。(3)信号还原功能在一些军事、航空等领域,有些电路运行环境很难估计,在设计完成之后,在现实环境中还需要更进一步的实验验证,而有些实验的成本很高或者风险性很大(如飞机试飞时发动机的运行情况),人们不可能重
7、复作实验来判断所设计产品的可行性和稳定性。此时,可以利用任意波形发生器的信号还原功能。在做一些高耗费、高风险实验时,可以通过数字示波器把实际中用到的实际波形记录下来,再通过计算机接口下载到任意波形发生器,通过任意波形发生器还原实验中的实际波形并加到设计电路中,做进一步的实验验证工作。1.3 国内外发展现状采用可变时钟和计数器寻址波形存储器的任意波形发生器在一段时期内曾得到广泛的应用,其取样时钟频率较高且可调节,但其对硬件要求比较高,需要高性能的锁相环和截止频率可调的低通滤波器(或者多个低通滤波器),且频率分辨率低,频率切换速度较慢,已经逐步退出市场。目前市场上的任意波形发生器主要采用直接数字合
8、成(Direct Digital Synthesuzer,DDS)技术,这种波形发生器不仅可以产生可变频的载频信号、各种调制信号,同时还能和计算机配合产生用户自定义的有限带宽的任意信号,可以为多种领域的测试提供宽带宽、高分辨率的测试信号1。任意波形发生器发展到今天,从产品结构形式来划分,主要包含三种:(1)独立仪器结构形式 独立仪器结构形式是把任意波形发生器设计成单台仪器的形式,其优点是精度高,可独立工作。(2)PC总线式PC(Personal Computer)总线式是将任意波形发生器板卡直接插在PC机的总线扩展槽或通过外部接口连接到PC总线上,利用PC机来控制任意波形发生器的工作状态,其优
9、点是可以充分利用PC机的软硬件资源,在波形数据处理、波形参数修改方面,计算机有明显的优势。(3)VXI模块式VXI模块是一种新型的模块化仪器,它必须插在VXI总线机箱上才能使用,VXI总线机箱通过GPIB或者RS-232C等接口与计算机相连,VXI模块仪器对组成自动测试系统特别有用,各个公司的VXI卡式仪器模块可以自由组合使用。从发展状况来看,国外任意波形发生器的研制及生产技术已经较为成熟。以安捷伦(Agilent)和泰克(Tektronix)为代表的国际电子测量仪器公司在此领域进行了卓有成效的研究和开发,其产品无论在技术上还是市场占有率方面在国际上都享有盛誉,但其价格也是相当昂贵,高端型号每
10、台价格都在几万美金左右,低端的也要几万人民币。Tektronix公司的独立结构任意波形发生器AFG3000系列功能完善,人机界面友好,操作方便,可以以多种方式连接到PC机上,其最高采样率能达到2GS/s,输出信号最高频率为240MHz,任意波频率50MHz,并配备的强大的波形编辑软件ArbExpress,用户可以方面地创建和编辑自己的波形。Agilent公司的PXI模块任意波形发生器采样率已经能达到1.25GS/s,最高输出频率500MHz。我国研制任意波形发生器是从上世纪90年代开始的,近年来有一批本土厂商奋起直追,并取得了可喜的成果。例如南京盛普科技电子有限公司的SPF120型信号发生器的
11、主波输出频率达到了120MHz,任意波最高频率为100KHz;北京普源精电科技有限公司(RIGOL)生产的DG1000/2000/3000系列任意波形发生器,在性能上已经大略相当于国外中低端产品。以FPGA自身资源为基础,制作一个简易综合电子实验仪,具有信号源、测量仪表等功能。第2章 波形发生器的基本理论2.1 FPGA简介FPGA由可编程逻辑单元阵列、布线资源和可编程的IO单元阵列构成,一个FPGA包含丰富的逻辑门、寄存器和IO资源。一片FPGA芯片就可以实现数百片甚至更多个标准数字集成电路所实现的系统。 FPGA的结构灵活,其逻辑单元、可编程内部连线和IO单元都可以由用户编程,可以实现任何
12、逻辑功能,满足各种设计需求。其速度快,功耗低,通用性强,特别适用于复杂系统的设计。使用FPGA还可以实现动态配置、在线系统重构(可以在系统运行的不同时刻,按需要改变电路的功能,使系统具备多种空间相关或时间相关的任务)及硬件软化、软件硬化等功能。 鉴于高频疲劳试验机控制器控制规模比较大,功能复杂,故我们在研制过程中,在传统试验机控制器的基础上,通过FPGA技术及微机技术两者的结合,来全面提升控制器系统的性能,使整机的工作效率、控制精度和电气系统可靠性得到了提高,且操作方便而又不乏技术的先进性。2.2 Verilog 语言简介 2.2.1 Verilog语言概述 Verilog HDL是一种硬件描
13、述语言(hardware description language),为了制作数字电路而用来描述ASICs和FPGA的设计之用2。Verilog HDL可以用来进行各种层次的逻辑设计,也可以进行数字系统的逻辑综合,仿真验证和时序分析,Verilog HDL进行设计最大的优点是其工艺无关性这使得工程师在功能设计,逻辑验证阶段可以不必过多考虑门级及工艺实现的具体细节,只需根据系统设计的要求施加不同的约束条件,即可设计出实际电路Verilog 是由en:Gateway Design Automation公司于大约1984年开始发展。Gateway Design Automation公司后来被 Cad
14、ence Design Systems于1990年所购并。现在 Cadence 对于 Gateway 公司的 Verilog 和 Verilog-XL 模拟器拥有全部的财产权。2.2.2 VerilogHDL基本结构(1)基本逻辑门,例如 and 、or 和 nand 等都内置在语言中。 (2) 用户定义原语( UDP )创建的灵活性。用户定义的原语既可以是组合逻辑 原语,也可以是时序逻辑原语。 (3)开关级基本结构模型,例如 pmos 和 nmos 等也被内置在语言中。 (4)提供显式语言结构指定设计中的端口到端口的时延及路径时延和设计的时序检查。(5) 可采用三种不同方式或混合方式对设计建
15、模。这些方式包括: 行为描述方式 使用过程化结构建模;数据流方式 使用连续赋值语句方式建模;结构化方式 使用门和模块实例语句描述建模。 * Verilog HDL 中有两类数据类型:线网数据类型和寄存器数据类型。线网类型表 示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。* 能够描述层次设计,可使用模块实例结构描述任何层次。 * 设计的规模可以是任意的;语言不对设计的规模(大小)施加任何限制。 * Verilog HDL 不再是某些公司的专有语言而是 IEEE 标准。* 人和机器都可阅读 Verilog 语言,因此它可作为 EDA 的工具和设计者之间的交 互语言。* Verilog H
16、DL 语言的描述能力能够通过使用编程语言接口( PLI )机制进一步扩展。 PLI 是允许外部函数访问 Verilog 模块内信息、允许设计者与模拟器交互的例 程集合。* 设计能够在多个层次上加以描述,从开关级、门级、寄存器传送级( RTL )到算法级,包括进程和队列级。* 能够使用内置开关级原语在开关级对设计完整建模。 * 同一语言可用于生成模拟激励和指定测试的验证约束条件,例如输入值的指定。* Verilog HDL 能够监控模拟验证的执行,即模拟验证执行过程中设计的值能够被监控 和显示。这些值也能够用于与期望值比较,在不匹配的情况下,打印报告消息。* 在行为级描述中, Verilog H
17、DL 不仅能够在 RTL 级上进行设计描述,而且能够在体 系结构级描述及其算法级行为上进行设计描述。* 能够使用门和模块实例化语句在结构级进行结构描述。 * Verilog HDL 的混合方式建模能力,即在一个设计中每个模块均可以在不同设计层次 上建模。* Verilog HDL 还具有内置逻辑函数,例如 &(按位与)和 |(按位或)。* 对高级编程语言结构,例如条件语句、情况语句和循环语句,语言中都可以使用。* 可以显式地对并发和定时进行建模。 * 提供强有力的文件读写能力。* 语言在特定情况下是非确定性的,即在不同的模拟器上模型可以产生不同的结果;例如,事件队列上的事件顺序在标准中没有定义
18、。 2.3 QuarrtusII概述 Quartus II 是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程4。 Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。 Quartus II支持Altera的IP核,包含了LPM/MegaFunct
19、ion宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。 此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。 图1:QuarrtusII图标图2:Quarrtus界面第3章 方案设计3.1 系统介绍任意波形发生器的实现采用模块设计,这样很好的利用了QuartusII 软件
20、中的LPM_ROM模块,能够达到最优设计;频率计的功能完全采用HDL语言描述,最后的顶层文件采用模块设计来完成。最终的顶层文件如下图所示:图 3.1 顶层文件模块图Wave_genTop 顶层设计数据存储ROM地址指针D/A转换波形输出要实现的功能:可产生正弦波(sina_wave)、锯齿波(swat_wave)、矩形波(squr_wave)、三角波(trig_wave)四种信号,能够实现信号的转换(select)并且频率可调。主要由三部分组成:地址指针控制模块,四种波形数据存储模块,D/A转换模块。前面2个模块在FPGA中实现,D/A转换通过外围电路实现。该部分的实现框图如下:图3.2 外围
21、电路实现 3.2 波形发生器各个模块设计3.2.1 Wave_gen 模块图 3.3 Wave_gen 模块图Wave_gen 模块各引脚说明: INCLK:输入的待测信号。 SELECT1.0:波形选择输入。 FREQ3.0:控制输出波形的频率。 ADDRESS8.0:输出地址指针。3.2.2 波形数据存储 ROM 模块 图 3.4 波形数据存储 ROM 模块波形数据存储 ROM 模块个引脚说明: Clock:输入时钟信号。Address8.0:输入地址指针。 Q7.0:输出信号。 第4章 波形发生器软件仿真4.1 设计平台及仿真工具我们选择QuarrtusII9.0作为波形发生器仿真工具,
22、结合Verilog硬件描述语言,该模块的功能采用 Verilog HDL 来描述,程序 Wave_gen.v 请见附件。程序实现的 主要功能是:根据不同的波形选择(select1:0),来改变送入 ROM 中的地址指针 address。 四种波形一个周期的数据各占不同的 16B, 每次波形改变使 address 指向各段 数据首地址。编译正确后将其创建为 Wave_gen.bsf 模块(见顶层文件中所示) ,然后采 用图形编辑方式,完成波形发生器这部分电路的设计。4.2 仿真过程首先,我们需要在QuarrtusII9.0建立一个工程文件名为wave_gen,如图:图4.1建立工程文件其次,我们
23、需要在File/New/VerilogHDL file,文件名为Wave_gen.v,保存在当前工程里,如图:图4.2Wave_gen.v然后在Processing/start comlication进行调试与仿真结果如图:图4.3仿真结果产生正弦波(sina_wave)时送到DAC0832的数据: 产生锯齿波(swat_wave)时送到DAC0832的数据:产生矩形波(squr_wave)时送到DAC0832的数据:产生三角波(trig_wave)时送到DAC0832的数据: 由仿真结果可知,改变select1:0的值,能够正确的将对应的波形数据送到DAC0832,从而完成了整体设计结论在研
24、究的过程中,通过学习和参阅过内外相关的文献,并从网络上获取最新的硬件开发指南和芯片开发手册,同时不断向身边的老师请教和学习,通过系统的学习和实际工作的锻炼,积累了必要的基础知识,培养了实际的开发技能。通过本设计工作,基本掌握了Quartus II的使用技术,进一步加深了对数字信号处理技术的理解,提高了使用可编程逻辑器件设计数字系统的能力和软件编程的能力,为将来从事科研工作打下了良好的基础。参考文献1 黄晓翰.基于FPGA的多功能波形发生器的设计.电信科学.2010年09期2 王金明.Verilog HDL 程序设计教程.北京.人民邮电出版社,2004 3 王文华. 基于DDS技术的任意波形发生
25、器研究.浙江大学, 2002 .4 Altera 公司.Quartus II .简易用户使用入门指南 5 王金明.数字系统设计与 Verilog HDL 教程.第二版,2005 附录Wave_gen.v程序如下:module Wave_gen(address,inclk,select,freq);output8:0address; /输出控制ROM的地址inputinclk; /系统始终,时间应该保证D/A能转换完毕input1:0select; /波形选择,具体值代表的波形见下面定义input3:0freq; /控制输出波形的频率reg7:0Qout;reg8:0address;reg7:0
26、k,m;parametersina_wave=2b00,swat_wave=2b01,squr_wave=2b10,trig_wave=2b11;always (posedge inclk) begincase(select)sina_wave:beginif(select=1) address=128;if(select=2) address=256;if(select=3) address=127) address=0; else address=address+1;endelsebegin k=127/freq; m=m) address=0; else address=address+
27、freq; end endswat_wave:beginif(select=0) address=0;if(select=2) address=256;if(select=3) address=384;if(address128) address=255) address=128; else address=address+1;endelsebegin k=127/freq; m=(m+128) address=128; else address=address+freq; end end endsqur_wave:beginif(select=0) address=0;if(select=1
28、) address=128;if(select=3) address=384;if(address256) address=383) address=256; else address=address+1;endelsebegin k=127/freq; m=(m+256) address=256; else address=address+freq; end end endtrig_wave:beginif(select=1) address=128;if(select=2) address=256;if(select=3) address=384;if(address384) address=511) address=384; else address=address+1;endelsebegin k=127/freq; m=(m+384) address=384; else address=address+freq; end end endendcase end endmodule