基于FPGA的直接数字频率合成器设计_第1页
基于FPGA的直接数字频率合成器设计_第2页
基于FPGA的直接数字频率合成器设计_第3页
基于FPGA的直接数字频率合成器设计_第4页
基于FPGA的直接数字频率合成器设计_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 JIANGSU UNIVERSITY OF TECHNOLOGY FPGA技术实验报告 基于FPGA的直接数字频率合成器设计学 院: 电气信息工程学院 专 业: 测控技术与仪器 班 级: 姓 名: 学 号: 指导教师: 时 间: 目 录1绪论11.1 背景与意义12. 设计简介12.1 DDS技术12.2 FPGA简介22.3 VHDL简介42.4 Quartus简介53. 系统硬件电路设计53.1 数字信号发生器的系统组成53.2 设计原理及要求63.3 输入部分73.3.1频率、幅值和波形转换部分73.4 FPGA部分93.5 D/A转换部分93.5.1 DAC0832转换器简介114.

2、 系统软件设计124.1软件系统流程图124.2主要函数语句分析124.3 数字信号发生器的软件设计134.4软件各模块144.4.1波形发生器144.4.2 主控制模块154.4.3 波形数据产生模块154.4.4波形产生模块175. 设计总结19附 录191绪论1.1 背景与意义信号发生器是一种常用的信号源,广泛运用于科学研究、生产实践和教学试验等领域。特别是在通信系统的科研实验中,常常需要用到不同频率和幅度的信号,如正弦波、三角波、方波和锯齿波等。作为一种为电子测量和计量提供电信号的设备,它和万用表、示波器、频率计等仪器一样,是最普通、最基本,也是运用最广泛的电子仪器之一,几乎所有电参量

3、的测量都需要用到信号发生器。凡是能产生测试信号的仪器,统称为信号源,也称为信号发生器,它用于产生被测电路所需特定参数的电测试信号。本课题的主要研究内容是参考直接数字频率合成原理(DDS)技术6,利用Quartus II9.0软件作为平台,VHDL语言作为开发语言,基于FPGA配合相应外围电路实现一个数字信号发生器,其电路结构简单,容易扩展,具有极大的灵活性和方便性,实现了产生频率可调的正弦波、三角波、方波的信号发生器。2. 设计简介2.1 DDS技术 DDS与大多数的数字信号处理技术一样,它的基础仍然是奈圭斯特采定理。奈圭斯特采样定理是任何模拟信号进行数字化处理的基础,它描述的是一个带限的模拟

4、信号经抽样变成离散序列后可不可以由这些离散序列恢复出原始模拟信号的问题。奈圭斯特采样定理告诉我们,当抽样频率大于或者等于模拟信号最高频率的两倍时,可以由抽样得到的离散序列无失真地恢复出原始模拟信号。只不过在DDS技术中,这个过程被颠倒过来了。DDS不是对模拟信号进行抽样,而是一个假定抽样过程已经发生且抽样值已经量化完成,如何通过某种方法把已经量化的数值重建原始信号的问题。DDS电路一般由参考时钟、相位累加器、波形存通滤波器(LPF)组成。其结构如图2.1所示。图2.1 DDS基本结构框图其中,f c为参考时钟频率,K为频率控制字,N为相位累加器位数,A为波形存储器地址位数,D为波形存储器的数据

5、位字长和D/A转换器位数。由于受到字长的限制,相位累加器累加到一定值后,就会产生一次累加溢出,这样波形存储器的地址就会循环一次,输出波形循环一周。相位累加器的溢出频率即为合成信号的频率。可见,频率控制字K越大,相位累加器产生溢出的速度越快,输出频率也就越高。故改变频率字(即相位增量),就可以改变相位累加器的溢出时间,在参考频率不变的条件下就可以改变输出信号的频率。图2.2 DDS各部分输出波形2.2 FPGA简介数字集成电路从产生到现在,经过了早期的电子管、晶体管、小中规模集成电路,到大规模、超大规模集成电路(VLSIC)以及许多既有特定功能的专用集成电路的发展过程。但是,随着为电子技术的发展

6、,设计与制造集成电路的任务已不完全由半导体厂商来独立承担。系统设计师们更愿意自己设计专用集成电路(Application Special Integrated Circuit, ASIC)芯片,而且希望ASIC的设计周期尽可能短,最好是在 实验室里就能设计出合适的ASIC芯片,并且立即投入实际应用之中,因而出现了现场可编程逻辑器件(Field Programmable Logic Device, FPLD),其中应用最广泛的当属CPLD和FPGA。CPLD是复杂可编程逻辑器件(Complex Programmable Logic Device)的简称,FPGA是现场可编程门阵列(Field P

7、rogrammable Gate Array)的简称。两者的功能基本相同,只是实现原理略有不同,但有时可以忽略这两者的区别。不同厂家对可编程逻辑器件的叫法也不尽相同。Altera公司把自己的可编程逻辑器件产品中的MAX系列(乘积项技术,EEPROM技术)、FLEX系列(查找表技术,SRAM工艺)都叫做CPLD;而把也是SRAM工艺、基于查找表技术、要外挂配置用的FLEX系列的EPROM叫做FPGA。FPGA一般由6部分组成,分别为可编程输入/输出单元、基本可编程逻辑单元、嵌入式块RAM、丰富的布线资源、底层嵌入功能单元和内嵌专用硬核等。每个单元简介如下:(1)可编程输入/输出单元(I/O单元)

8、。目前大多数FPGA的I/O单元被设计为可编程模式,即通过软件的灵活配置,可适应不同的电气标准与I/O物理特性;可以调整匹配阻抗特性,上下拉电阻;可以调整输出驱动电流的大小等;(2)基本可编程逻辑单元。FPGA的基本可编程逻辑单元是由查找表(LUT)和寄存器(Register)组成的,查找表完成纯组合逻辑功能。FPGA内部寄存器可配置为带 同步/异步复位和置位、时钟使能的触发器,也可以配置成为锁存器。FPGA一般依赖寄存器完成同步时序逻辑设计。一般来说,比较经典的基本可编程单元的配置是一个寄存器加一个查找表,但不同厂商的寄存器和查找表的内部结构有一定的差异,而且寄存器和查找表的组合模式也不同。

9、(3)嵌入式块RAM。目前大多数FPGA都有内嵌的块RAM。嵌入式块RAM可以配置为单端口RAM、双端口RAM、伪双端口RAM、CAM、FIFO等存储结构。(4)丰富的布线资源。布线资源连通FPGA内部所有单元,连线的长度和工艺决定着信号在连线上的驱动能力和传输速度。布线资源的划分:A全局性的专用布线资源:以完成器件内部的全局时钟和全局复位/置位的布线;B长线资源:用以完成器件Bank间的一些高速信号和一些第二全局时钟信号的布线;C短线资源:用来完成基本逻辑单元间的逻辑互连与布线;D其他:在逻辑单元内部还有着各种布线资源和专用时钟、复位等控制信号线。(5)底层嵌入功能单元。由厂商及芯片型号决定

10、。(6)内嵌专用硬核。与“底层嵌入单元”有区别,这里指的硬核主要是那些通用性相对较弱的芯片,不是所有FPGA芯片都包含硬核。FPGA的基本特点主要有:    (1)采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。     (2)FPGA可做其它全定制或半定制ASIC电路的中试样片。     (3)FPGA内部有丰富的触发器和IO引脚。     (4)FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。   

11、0; (5)FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。    2.3 VHDL简介VHDL 的全称是Very-High-Speed Integrated Circuit Hardware Description Language,诞生于1982 年。1987年底,VHDL被 IEEE 和美国国防部确认为标准硬件描述语言。(1) VHDL 语言功能强大 , 设计方式多样。VHDL 语言具有强大的语言结构, 只需采用简单明确的VHDL语言程序就可以描述十分复杂的硬件电路。同时, 它还具有多层次的电路设计描述功能。此外 ,VHDL

12、 语言能够同时支持同步电路、异步电路和随机电路的设计实现, 这是其他硬件描述语言所不能比拟的。VHDL 语言设计方法灵活多样 , 既支持自顶向下的设计方式, 也支持自底向上的设计方法; 既支持模块化设计方法, 也支持层次化设计方法。(2) VHDL 语言具有强大的硬件描述能力。VHDL 语言具有多层次的电路设计描述功能,既可描述系统级电路 , 也可以描述门级电路;描述方式既可以采用行为描述、寄存器传输描述或者结构描述,也可以采用三者的混合描述方式。同时,VHDL 语言也支持惯性延迟和传输延迟,这样可以准确地建立硬件电路的模型。VHDL 语言的强大描述能力还体现在它具有丰富的数据类型。VHDL

13、语言既支持标准定义的数据类型,也支持用户定义的数据类型,这样便会给硬件描述带来较大的自由度。(3) VHDL 语言具有很强的移植能力。VHDL 语言很强的移植能力主要体现在: 对于同一个硬件电路的 VHDL 语言描述 , 它可以从一个模拟器移植到另一个模拟器上、从一个综合器移植到另一个综合器上或者从一个工作平台移植到另一个工作平台上去执行。(4) VHDL 语言的设计描述与器件无关。采用 VHDL 语言描述硬件电路时, 设计人员并不需要首先考虑选择进行设计的器件。这样做的好处是可以使设计人员集中精力进行电路设计的优化, 而不需要考虑其他的问题。当硬件电路的设计描述完成以后 ,VHDL 语言允许

14、采用多种不同的器件结构来实现。(5) VHDL 语言程序易于共享和复用。VHDL 语言采用基于库 ( library) 的设计方法。在设计过程中 , 设计人员可以建立各种可再次利用的模块 , 一个大规模的硬件电路的设计不可能从门级电路开始一步地进行设计 , 而是一些模块的累加。这些模块可以预先设计或者使用以前设计中的存档模块, 将这些模块存放在库中 , 就可以在以后的设计中进行复用。由于 VHDL 语言是一种描述、模拟、综合、优化和布线的标准硬件描述语言 , 因此它可以使设计成果在设计人员之间方便地进行交流和共享, 从而减小硬件电路设计的工作量, 缩短开发周期。2.4 Quartus简介Qua

15、rtus II 是Altera公司的综合性PLD开发软件,支持原理图、VHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。283. 系统硬件电路设计3.1 数字信号发生器的系统组成该数字信号发生器系统主要由输入部分、FPGA部分、D/A转换部分、频率、幅值调节和波形转换部

16、分组成。如图3.1所示。分频器FPGA部分系 统 控 制 器时钟复位波形调幅调频正弦波三角波方波其他波型波 形 DA 转 换滤波输出图3.1 数字信号发生器系统组成3.2 设计原理及要求 在本设计中,利用FPGA,采用EDA(Electronic Design Automation)中自顶向下(top-to-down)的设计方法,选用基于相位累加器的直接数字合成/ DDS技术来完成数字信号发生器各功能模块的设计。DDS这种结构主要由相位累加器、 相位调制器、 波形 ROM 查找表、 D/ A 构成。其中相位累加器、 相位调制器、 波形 ROM 查找表是 DDS 结构中的数字部分 ,由于具有数控

17、频率合成的功能 ,又合称为 NCO。它的工作原理是:将要产生的波形数据存入波形存储器 ,然后在参考时钟的作用下 ,对输入的频率数据进行累加 ,并且将累加器的输出一部分作为读取波形存储器的地址 ,将读出的波形数据经D/A转换为相应的模拟电压信号。本研究的重点就是用VHDL来实现DDS的功能 ,能够达到高精度的输出 ,同时标准波形数据生成存放在 ROM 中 ,可以简化运算过程 ,提高运算速度 ,加快反应时间。本设计主要通过VHDL语言实现频率控制、波形控制、 波形数据的提取、 波形的产生工作。其中 ,波形数据运用VHDL语言编写 。控制部分主要采用产生高低电平的拨码开关控制。程序下载到 FPGA

18、上实现 ,经过D/ A 输出波形。并通过Altera公司QuartusII9.0软件进行波形的仿真,从而完成整个设计。本设计的任务是设计一个基于FPGA的数字信号发生器,根据任务书要求必须达到以下要求:1.利用EDA开发系统、Quartus II 9.0软件实现数字信号发生器的设计;2.根据整体电路的工作原理,完成各个子模块的设计及实现;3.对数字信号发生器完成VHDL语言描述;4.该数字信号发生器能够产生正弦波、方波、三角波、锯齿波信号;5.产生的波形信号频率和幅度可通过按键进行调节;6.用按键调节实现各种波形的转换。3.3 输入部分输入部分包含以下功能按键:时钟、复位、波形、调幅、调频。1

19、时钟:标准的50MHZ时钟输入。2复位:低电平复位。3波形:为波形输出选择开关,可以选择单波形的输出。4调幅:可以递增和递减正弦波、三角波、方波的幅度。5调频:可以递增和递减正弦波、三角波、方波的频率。3.3.1频率、幅值和波形转换部分由于采用DDS,在ROM中存有波形一个周期的n个等间隔归一化采样数据,改变相位累加器步进,从而改变对ROM中数据的读取速度,即可合成不同频率波形,存储器中存入过量的采样值,使得采样点数较少时,依然能够得到较好波形输出,从而得到较高频率输出。否则,采样点数太少会使产生波形严重失真。输出波形频率计算: (式3.1)式中是晶振频率K 分频系数 N 相位累加器位数 S

20、相位累加器步长若取代入式(3.1)得到。因此,只要控制S 的值就可准确实现频率步进为10 Hz 的等步进调频。如采用32 MHz 的晶振,也能得到10 Hz 精确的等步进调节,但牺牲了波形质量。通过实验测试和比较,可用下式计算频率: (式3.2)因为65306不是一个2N 的数,这样波形会漏掉少量采样点。即使这样,得到波形依然平滑,可满足设计要求。若要使频率调节步进减小到1Hz,对晶振有特殊要求,它的振荡频率必须是2的N次幂。由式(3.1)举例说明累加器位数不同产生差异: (式3.3) (式3.4)式(3.4) 产生的波形优于式(3.3) ,最高频率也高出几倍。由于DAC0832的电流建立时间

21、是1s ,因此输出波形的最高频率受下式限制: (式3.5)因此,要得到更高频率的波形需使用更高速的D/A转换器。频率和幅值调节和波形转换电路如图3.2所示。八个按键一端接1K排阻(上拉电阻)后接VCC,一端接FPGA控制信号引脚输入端,按键有八个,分别为复位键SW1,控制波形转换键SW2,控制幅度步进键SW3,控制幅度步减键SW4,控制频率步进键SW5,控制频率步减键SW6,控制幅值步进键SW7,控制幅值步进键SW8。3.4 FPGA部分本设计使用的FPGA芯片其典型逻辑门数(包括逻辑门和RAM)为50000门,最大可用系统门数为116000门,逻辑单元(Logic elements)为288

22、0个,逻辑阵列模块(Logic array blocks)为360个,嵌入式阵列模块(Embedded array blocks)为10个,RAM总容量为20480字节,用户可用的I/O引脚最多为310个。芯片的工作电压为+5V。其内部结构如图3.5所示。图3.5 FPGA芯片结构图通常情况下在硬件调试的过程中一般使用下载电缆进行下载,而当调试完成以后要用配置芯片对FPGA进行配置。配置芯片在每次系统上电以后自动将配置文件加载到FPGA中形成电路。3.5 D/A转换部分D/A转换器电路的设计:从波形RAM中读出的幅度量化数据还只是一个数字信号,要得到最后的输出信号必须经过数模转换器。因此在波形

23、RAM之后要设计一个D/A转换电路。数模(D/A)转换电路的作用是把已经合成的波形幅值的数字量转换成模拟量,其速度和特性直接影响整个系统的性能。D/A转换器件的首要特性要求是高速,其次是转换位数,本设计中选用8位的D/A芯片DAC0832。波形幅度量化序列经D/A转换后成为阶梯波。频率合成器对D/A转换器的分辨率有一定的要求,D/A转换器的分辨率越高,合成的波形台阶数就越多输出的波形的精度也就越高。D/A的输出用电压形式表示一般应为: (式3.6) 式中D为D/A的输入数据值,N为D/AC的位数,即通常所指的D/AC的分辨率,为输入D/A的参考电压。D/A转换电路的设计首先是要选择一款合适的D

24、/A转换芯片。D/A转换芯片种类繁多。选择D/A转换芯片要根据很多因素来确定,最主要的就是要考虑字长和转换速度。本设计采用DAC0832 作为D/A 转换器件,其具有数字量的输入锁存功能,DAC0832芯片的输出通过放大器OP07,即可用示波器观察。100K的电位器在+5V和0V电压间为DAC0832提供参考电压。D/A转换电路的原理图如图3.6所示:图3.6 D/A转换电路的原理图3.5.1 DAC0832转换器简介DAC0832是双列直插式8位D/A转换器。能完成数字量输入到模拟量(电流)输出的转换。其主要参数如下:分辨率为8位,转换时间为1s,满量程误差为±1LSB,参考电压为

25、(+10-10)V,供电电源为(+5+15)V,逻辑电平输入与TTL兼容。从图3.7中可见,在DAC0832中有两级锁存器,第一级锁存器称为输入寄存器,它的允许锁存信号为ILE,第二级锁存器称为DAC寄存器,它的锁存信号也称为通道控制信号XFER。图3.7 DAC0832引脚图DAC0832各引脚编号及其作用: 1号CS引脚:片选信号输入线,低电平有效; 2号WR1引脚:为输入寄存器的写选通信号; 3号AGND引脚:模拟地,模拟信号和基准电源的参考地; 4-7,13-16号D0-D7引脚:数据输入线,TLL电平; 8号V ref引脚:基准电压输入(-10V+10V); 9号RFB引脚:反馈信号

26、输入线,芯片内部有反馈电阻; 10号DGND引脚:数字地; 11号IOUT1引脚:电流输出线,当输入全为1时,IOUT1最大; 12号IOUT2引脚:电流输出线,其值与IOUT1为一常数; 17号XFRE引脚:数据传送控制信号输入线,低电平有效; 18号WR2引脚:为DAC寄存器写选通输入线; 19号ILE引脚:数据锁存允许控制信号输入线,高电平有效; 20号V cc引脚:电源输入线(+5V+15V)Vref。4. 系统软件设计4.1软件系统流程图本设计主要是由FPGA为核心控制一些简单外围电路输出可控的方波、三角波、锯齿波、正弦波。输入部分为8个按键值,分别用于控制波型的选择、波型的调节;输

27、出部分由一个8位的DA组成,由FPGA将数据波型数据送给DA转换输出模拟波型信号。具体流程如图4.1所示:初始化按键输入,选择波型,调节波型。由FPGA生成数字波型数据将数字波型数据送入DA转换输出模拟波型信号图4.1 系统流程图通过按键可以选择输出波型,如方波、三角波、正弦波。波型频率幅度的改变可以通过按对应的频率加按键和频率减键,幅度加键幅度减键。由于频率和幅度改变在Quartus 软件平台下不能明显仿真步进变化,所以本设计没有介绍步进仿真。4.2主要函数语句分析在程序设计中,主要使用的函数语句有两种:If-else语句和case-when语句。这两种语句也是VHDL程序设计中常用的语句。

28、二者都属于流程控制语句。流程控制语句通过条件控制开关决定是否执行一条或几条语句或重复执行一条或几条语句或跳过一条或几条语句 。 IF语句是一种条件语句,它根据语句中所设置的一种或多种条件,有选择地执行指定的顺序语句。4.3 数字信号发生器的软件设计 本次设计的软件部分主要运用Altera公司的Quartus9.0软件平台,其开发流程基本分成2个步骤:1.设计输入Quartus软件的设计文件可以来自Quartus5.1设计输入工具或各种工业标准的EDA设计输入工具Quartus强大的集成功能允许信息在各种应用程序间自由交流,设计者可在一个工程内直接从某个设计文件转换到其他任何设计文件,而不必理会

29、设计文件是图形格式、文本格式,还是波形格式。Quartus具有如下的多种设计输入方法:原理图输入与符号编辑、硬件描述语言、波形设计输入、平面图编辑以及层次设计输入。如此众多的设计方法帮助设计者轻松地完成设计输入。2.项目处理Quartus处理一个设计时,软件编译器读取设计文件信息,产生用于器件编程、仿真、定时分析的输出文件。消息处理器可以自动定位编译过程中发现的错误,编译器还可以优化设计文件。项目处理包括以下基本步骤:(1)消息处理器自动定位错误;(2)逻辑综合与试配;(3)定时驱动编译;(4)设计规则检查;(5)多器件划分。本次设计的数字信号发生器在Quartus5.1下的RTL图如图4.2

30、所示。图4.2 系统RTL图4.4软件各模块4.4.1波形发生器设计的波形发生器就是为了得到正弦波、三角波、方波这三种波形,并可通过按钮选择输出波形。波形发生器可以由正弦波产生模块、三角波产生模块、方波产生模块和输出波形选择模块(ch3a1)。下图为波形发生器内部的顶层设计的规划图图4.3波形发生器内部的顶层设计的规划图如图可以看到,控制输入有三大块,一个是个按钮的数据选择命令的输入,一个是时时钟输入,它的频率将决定输出波形的频率,还有一个是复位键。在芯片里面要处理的就有波形产生器产生相应的数据后输出8位的数据到数据选择模块中,通过按钮发出选择数据的指令,3选1的数据选择器选择相应的数据进行输

31、出,把这些数据输入D/A模块中,通过D/A模块对数据转换,在它的输出端就可得到相应的波形。4.4.2 主控制模块主控制模块完成了频率调节、幅度调节和波形选择三个控制功能。图是用Quartus9.0生成的主程序结构框图,其中CLK为标准频率50M输入,RST为系统复位键,VADD,VDEC为调节输出幅度的二个按键,使用方法是当按下VADD时幅度会每隔一秒递增一次,直到最大幅度,当按下VDEC时幅度会每隔一秒递减一次,直到最小幅度,PADD,PDEC为调节输出频率的二个按键,使用方法是当按下PVADD时频率会每隔一秒递增一次,直到最大频率,当按下PDEC时频率会每隔一秒递减一次,直到最小频率。SE

32、L为波形选择键,当按下SEL键时系统每隔一秒在方波、三角波、正弦波,锯齿波四种波形循环切换。CNT为FPGA产生的8位数字波形数据信号。4.4.3 波形数据产生模块(1)方波数据产生模块方波产生方法是由主控制模块提供方波频率和幅度,按照主控制模块的频率产生“0”和主控提供的幅度值。将这些数据直按送入DAC就能得到所需方波信号。产生框图如图4.5所示:CLK为主控模块提供的频率信号,RST为复位键,DIN为主控模块提供幅度信号,DOUT为产生的波型数据信号。方波信号仿真:按仿真按钮可以直接进行仿真,提示信息提示你仿真成功后。可以看到如下仿真波形,如图4.6方波信号仿真。在这个仿真波形图中,可以看

33、到当clrn为高电平的时候,出现一个clk时钟脉冲的上升沿计数,从0跳到255,等下一个脉冲来临时有从255跳到0,依次重复,如图所示,波形将以方波的规律变化。(2)三角波数据产生模块三角波产生方法是由主控制模块提供波型频率和幅度,按照主控制模块的频率产生由0自加到主控模块提供的幅度值然后再自减到0。这些数据直按送入DAC就能得到所需三角波信号。产生框图如图4.7所示:CLK为主控模块提供的频率信号,DOUT为产生的波型数据信号。 按仿真按钮可以直接进行仿真,提示信息提示你仿真成功之后,可以看到如下的仿真波形, 仿真如图4.8所示。图4.8 三角波信号仿真在这个仿真图中,可以看到当clrn为高

34、电平的时候,出现一个clk时钟脉冲的上升沿开始计数,从0增到1,然后每来一个脉冲就增一次,直到增到255,等下一个脉冲到临时将有从255减到254,然后每来一个脉冲就减一次,直到减到0,依次重复,如图所示,波形将出现三角波的规律变化。(3)正弦波数据产生模块正弦波产生方法是由主控制模块提供波型频率,按照主控制模块的频率依次从64个已写好的正弦数据中取值,然后这些数据直按送入DAC就能得到所需正弦波信号。因为64个数据已经固定,所发正弦波不好调幅。产生框图如图:CLK为主控模块提供的频率信号,RST为复位键,DATA为产生的波型数据信号。具体框图如图4.9所示。图4.10 正弦波信号仿真在这个仿

35、真图中,可以看到当clrn为高电平的时候,出现一个clk时钟脉冲的上升沿开始计数,图中的数据将根据列表中所查到的数据按照一定的规律显示。如图所示,波形将出现正弦波的规律变化。4.4.4波形产生模块本设计用VHDL语言根据傅立叶函数采集点进行扫描,分别产生正弦波、三角波和矩形波。以下介绍各种常用周期信号的傅立叶函数展开式。 1.正弦波发生分为两个步骤,即正弦波幅值采样存储和正弦波波形的还原输出。幅值采样是将一个周期正弦波进行64等分,将64个采样点进行量化处理,量化值=255*sin360/64(V),将64点量化值存入存储器。正弦波形的产生是通过循环反复将存储器中的64点采样值通过DAC083

36、2进行还原输出,得到幅值正比于64点采样值的正弦波。图4.11正弦波采样图2.矩形波的实现较之正弦波发生简单,由于矩形波是两个电平值间的交替变换,因此波形采样值的预存只要有两个不同的数值就行了,为了使矩形波发生的频率灵活可调,采用60个采样值扫描输出来实现,每半个矩形波周期采用三十个采样值,循环反复将存储器中的60点采样值通过DAC0832进行还原输出,得到幅值正比于点采样值的矩形波。图4.12方波采样图3.由于三角波是线性的,比较简单就可以产生,如果最低电压设为15V,最高是255V,那么根据它的公式255/15=17,每个点的电压只要依次加17就可以得到,一个波形所以采用简单的加减算法就可

37、实现 图4.13 三角波采样图5. 设计总结FPGA是当前数字系统设计领域比较火热的一种工具,它可以大大缩短设计需要的时间,降低成本的同时也提高了系统的稳定性。使用VHDL语言描述硬件系统使得FPGA技术有了更广阔的应用领域。本设计使用了基于Altera公司的FPGA系列,采用Altera公司提供的系统开发工具Quartus II软件进行了系统的设计和仿真。数字信号发生器在实验室以及工业场所都被大量使用着,本系统即实现了可以输出四种波形的简易多功能波形发生器,仿真结果证明,该设计正确有效,可以作为制作实物的理论依据。但由于设计者能力有限,本系统仍然有着很多可改进的地方,比如可以升级为输出频率、

38、幅值可调的波形,或者输出任意波形以更贴近实际情况。附 录数字信号发生器程序-主控文件LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SUN ISPORT( CLK:IN STD_LOGIC;RST:IN STD_LOGIC;VADD:IN STD_LOGIC;VDEC:IN STD_LOGIC;PADD:IN STD_LOGIC;PDEC:IN STD_LOGIC;SEL :IN STD_LOGIC;CNT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END E

39、NTITY;ARCHITECTURE ONE OF SUN ISSIGNAL DCLK:STD_LOGIC;SIGNAL DIV :STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL DCNT :STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL DDATA :STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL CNT1H:STD_LOGIC_VECTOR(24 DOWNTO 0); -定义一个1HZ的分频系数信号SIGNAL CLK1H:STD_LOGIC; -定义一个1HZ频率信号。SIGNAL DOUT0,DOUT1,DOUT2

40、,DOUT3:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL SELCON :STD_LOGIC_VECTOR(1 DOWNTO 0);COMPONENT FOUTPORT( CLK:IN STD_LOGIC;RST:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);DOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END COMPONENT;COMPONENT SOUTPORT( CLK:IN STD_LOGIC;RST:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR(

41、7 DOWNTO 0);DOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END COMPONENT;COMPONENT JOUTPORT( CLK:IN STD_LOGIC;RST:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);DOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END COMPONENT;COMPONENT SINPORT( CLK:IN STD_LOGIC;RST:IN STD_LOGIC;DATA:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END

42、 COMPONENT;BEGINCNT <= DOUT0 WHEN SELCON="00" ELSEDOUT1 WHEN SELCON="01" ELSEDOUT2 WHEN SELCON="10" ELSEDOUT3 ;PROCESS(CLK1H,RST,SEL)BEGINIF RST='0' THENSELCON<="00"ELSIF CLK1H'EVENT AND CLK1H='1' THENIF SEL='1' THENIF SELCON&

43、lt;"11" THENSELCON<=SELCON+1;ELSESELCON<="00"END IF;END IF;END IF;END PROCESS;PROCESS(CLK1H,RST,PADD,PDEC)BEGINIF RST='0' THENDIV<="00000000"ELSIF CLK1H'EVENT AND CLK1H='1' THENIF PADD='1' THENDIV<=DIV+1;ELSIF PDEC='1' THE

44、NDIV<=DIV-1;END IF;END IF;END PROCESS;PROCESS(CLK1H,RST,VADD,VDEC)BEGINIF RST='0' THENDDATA<="00000000"ELSIF CLK1H'EVENT AND CLK1H='1' THENIF VADD='1' THENDDATA<=DDATA+1;ELSIF VDEC='1' THENDDATA<=DDATA-1;END IF;END IF;END PROCESS;PROCESS(CLK,

45、RST,DIV)BEGINIF RST='0' THENDCLK<='0'DCNT<="00000000"ELSIF CLK'EVENT AND CLK='1' THENIF DCNT<DIV THENDCNT<=DCNT+1;ELSEDCNT<="00000000"DCLK<=NOT DCLK;END IF;END IF;END PROCESS;-/- 1HZ分频进程-/PROCESS(CLK,RST)BEGINIF RST='0' THEN -

46、当RST=0时复位CNT1H<=(OTHERS=>'0');ELSIF CLK'EVENT AND CLK='1' THEN -上升沿时计数。IF CNT1H<"1011111010111100000111111" THEN CNT1H<=CNT1H+1;-当分频系数少于24999999时分频系数加1。ELSE CNT1H<=(OTHERS=>'0'); CLK1H<=NOT CLK1H;-当分频系数等于24999999时分频系数清零同时1hz信号取反。END IF;END I

47、F;END PROCESS;U0: SOUT PORT MAP(DCLK,RST,DDATA,DOUT1);U1: FOUT PORT MAP(DCLK,RST,DDATA,DOUT2);U2: JOUT PORT MAP(DCLK,RST,DDATA,DOUT3);U3: SIN PORT MAP(DCLK,RST,DOUT0);END ONE;-方波数据产生文件LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY FOUT ISPORT( CLK:IN STD_LOGIC;RST:IN

48、 STD_LOGIC;DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);DOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END ENTITY;ARCHITECTURE ONE OF FOUT ISSIGNAL DIV :STD_LOGIC_VECTOR(5 DOWNTO 0);BEGINDOUT<= "00000000" WHEN DIV<"100000" ELSEDIN;PROCESS(CLK,RST)BEGINIF RST='0' THENDIV<="000

49、000"ELSIF CLK'EVENT AND CLK='1' THENIF DIV<"111111" THENDIV<=DIV+1;ELSE DIV<="000000"END IF;END IF;END PROCESS;END ONE;-三角波数据产生文件LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SOUT ISPORT( CLK:IN STD_LOGIC;RST:IN STD_LOGI

50、C;DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);DOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END ENTITY;ARCHITECTURE ONE OF SOUT ISSIGNAL DIV :STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL CONT:STD_LOGIC;BEGINDOUT<=DIV;PROCESS(CLK,RST)BEGINIF RST='0' THENDIV<="00000000"CONT<='0'ELSIF CLK'

51、;EVENT AND CLK='1' THENIF CONT='0' THENIF DIV<DIN THENDIV<=DIV+1;ELSE CONT<='1'END IF;ELSIF CONT='1' THENIF DIV>"00000000" THENDIV<=DIV-1;ELSE CONT<='0'END IF;END IF;END IF;END PROCESS;END ONE;-锯齿波数据产生文件LIBRARY IEEE;USE IEEE.STD_LOG

52、IC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY JOUT ISPORT( CLK:IN STD_LOGIC;RST:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);DOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END ENTITY;ARCHITECTURE ONE OF JOUT ISSIGNAL DIV :STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINDOUT<=DIV;PROCESS(CLK,RST)BEGINIF RST=

53、9;0' THENDIV<="00000000"ELSIF CLK'EVENT AND CLK='1' THENIF DIV<"11111111" THENDIV<=DIV+1;ELSE DIV<="00000000"END IF;END IF;END PROCESS;END ONE;-正弦波数据产生文件LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOG

54、IC_ARITH.ALL;ENTITY SINISPORT(CLK:IN STD_LOGIC; -读取数据频率输入RST:IN STD_LOGIC; -复位键DATA:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) -正弦信号产生数据);END ENTITY;ARCHITECTURE ONE OF SIN ISSIGNAL CNT0:INTEGER RANGE 0 TO 63; -数据计数BEGIN-/- 正弦信号数据读取频率计数-/PROCESS(CLK,RST)BEGINIF RST='0' THEN CNT0<=0;ELSIF CLK'EV

55、ENT AND CLK='1' THENCNT0<=CNT0+1;END IF;END PROCESS;-/- 正弦信号数据-/PROCESS(CNT0,RST)BEGINIF RST='0' THEN DATA<="00000000"ELSECASE CNT0 ISwhen 0 => DATA<="10000000"when 1 => DATA<="10001100"when 2 => DATA<="10011001"when 3 =

56、> DATA<="10100101"when 4 => DATA<="10110001"when 5 => DATA<="10111101"when 6 => DATA<="11001000"when 7 => DATA<="11010010"when 8 => DATA<="11011011"when 9 => DATA<="11100100"when 10 =>

57、DATA<="11101011"when 11 => DATA<="11110010"when 12 => DATA<="11110111"when 13 => DATA<="11111011"when 14 => DATA<="11111110"when 15 => DATA<="11111111"when 16 => DATA<="11111111"when 17 => DATA<="11111110"when 18 => DATA<="11111100"when 19 => DATA<="11111001"when 20 => DATA<="11110100"when 21 => DATA<="111

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论