目录
摘要 ...................................................................... I ABSTRACT .............................................................. II 第1章 绪论 .............................................................. 1 1.1 1.2 1.3
信号发生器的研究意义与内容 ........................................ 1 信号发生器的发展现状和前景展望 .................................... 1 信号发生器的总体设计思路 .......................................... 3
第2章设计简介 ............................................................ 4 2.1 FPGA简介 ........................................................... 4 2.2 VHDL硬件描述语言介绍 ............................................... 6 2.3 QUARTUSII软件介绍 ................................................... 8 2.4 RLT级仿真 ........................................................... 9 第3章系统硬件电路设计 ................................................... 10 3.1 信号发生器的系统组成 ............................................... 10 3.2 设计原理 ........................................................... 11 3.3 输入部分 ........................................................... 12 3.3 D/A数模转换部分 .................................................... 14 第4章系统的软件设计 ..................................................... 16 4.1 系统软件流程图 ..................................................... 16 4.2 系统各模块 ......................................................... 16 4.2.1 三角波产生模块 ................................................. 16 4.2.2 递减斜坡产生模块 ............................................... 19 4.2.3递增斜坡产生模块 ............................................... 21 4.2.4 方波产生模块 ................................................... 23 4.2.5 阶梯波产生模块 ................................................. 25 4.2.6 正弦波产生模块 ................................................. 27 4.2.7 自定义波形产生模块 ............................................. 32 4.2.8 波形选择器产生模块 ............................................. 35
4.2.9 频率调节器产生模块 ............................................. 37 4.2.10 主控制器产生模块 .............................................. 39 4.3 引脚锁定 ........................................................... 43 第5章信号发生器的仿真 ................................................... 45 5.1递增斜坡的仿真结果及分析 ............................................ 45 5.2 递减斜坡的仿真结果及分析 ........................................... 45 5.3 三角波的仿真结果及分析 ............................................. 46 5.4 正弦波的仿真结果及分析 ............................................. 47 5.5 方波的仿真结果及分析 ............................................... 47 5.6 阶梯波的仿真结果及分析 ............................................. 48 5.6 自定义波形的仿真结果及分析 ......................................... 48 结束语 ................................................................... 49 参考文献 ................................................................. 49 致谢 ...................................................... 错误!未定义书签。
信号发生器的FPGA实现毕业设计
信号发生器的FPGA实现
摘要:信号发生器在各种实验和测试中是必不可少的器件,同时在生产和科技领域中有着广泛的运用,例如在通信、控制、雷达、教学、军事等领域。本次设计的内容是信号发生器的FPGA实现,要求用EAD技术设计一个信号发生器,此信号发生器的实现是利用EDA的硬件描述语言VHDL产生各个模块,然后在Altera公司提供的FPGA/CPLD开发集成环境的Quartus II软件上实现波形的编译、仿真、下载到Cyclone芯片上。信号发生器由波形产生模块、频率调节模块和波形选择模块组成,波形产生模块可以产生三角波、正弦波、方波、阶梯波、递增斜坡、递减斜坡、自定义波形等,通过波形选择模块和频率调节模块可以选择自己所需要的波形和调节一定的频率。
关键字:信号发生器;FPGA;EDA;VHDL;Quartus
I
信号发生器的FPGA实现毕业设计
FPGA implementation of signal generator
Abstract:The signal generator is a essential device in various experiments and tests, at the same time, it widely used in the production and technology field, such as communications, controlling, radar, teaching, military and other fields. The content of this design is the signal generator’s implementation of FPGA, it required to design a signal generator with EAD technology, which used EDA’s hardware description language VHDL to produce each modules, and then achieved the compilation, simulation and downloads of the waveform to the Cyclone chip by using Quartus II software on the integrated development environment of FPGA / CPLD which provided bycompany Altera. The signal generator contains the waveform generator module, frequency adjustment module and waveform selection module. The waveform generator module can produce triangular wave, sine wave, square wave, staircase, ascending slope, descending ramp, custom waveforms, etc., and the waveform selection module and the frequency adjustment module can select the waveform in their needs and adjust the certain frequency.
Keywords: Signal Generator; FPGA; EDA; VHDL; Quartus
II
信号发生器的FPGA实现毕业设计
第1章
绪论
1.1 信号发生器的研究意义与内容
信号发生器在系统检测和调试、自动测量和控制、教学实验和测试中是必不可少的一种基本的电子设备,它广泛的应用于通信工程、自动测控、雷达、电子设备以及现代化仪器仪表等多个领域,它可以产生正弦波、递增斜坡、递减斜坡、三角波、锯齿波、方波等多种波形。信号发生器为电子测量工作提供了符合要求的精确的输入电信号和示波器等,几乎涉及电参量测量的都要用到信号发生器。同时信号发生器是一种能够提供各种频率、波形以及输出电平的电信号,经常用来作为测试的信号源或者激励源的设备。综上所述,不论是在生产实践还是在科研与教育上,信号发生器都是电子工程师和电气工程师等信号仿真试验的最佳工具。随着我国经济和科技的迅速发展和进步,对相应的测量仪器也有了更高的要求,信号发生器已经不断成为测量仪器中必不可少的一类,所以对信号发生器的研究具有重大意义。
信号发生器的研究内容是利用EDA技术实现信号的产生,EDA技术作为现代电子设计技术的核心,它依赖功能强大的计算机,在EDA工具软件平台上,对以硬件描述语言HDL为系统逻辑描述手段完成的设计文件,自动地完成逻辑化简、逻辑分割、逻辑综合、结构综合,以及逻辑优化和仿真测试等项功能,直至实现既定性能的电子线路系统功能。EDA技术使得设计者的工作几乎仅限于利用软件的方式,即利用硬件描述语言HDL和EDA软件来完成对系统硬件功能的实现。EDA技术在硬件实现方面融合了大规模集成电路制造技术、IC版图设计技术、ASIC测试和封装技术、FPGA和CPLD编程下载技术、自动测试技术等,在计算机辅助工程方面融合了计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)、计算机辅助工程(CAE)技术以及多种计算机语言的设计概念。FPGA和CPLD是可编程逻辑件它们的特点是直接面向用户、具有极大的灵活性和通用性,使用方便,硬件测试和实现快捷,开发效率高,成本低,上市时间短,技术维护简单,工作可靠性好等。
1.2 信号发生器的发展现状和前景展望
信号发生器是一种最悠久的测量仪器,早在20年代电子设备刚出现时它就产生了。随着通讯和雷达技术的发展40年代出现了主要用于测试各种接收机的标准信号发生器,使信号发生器从定性分析的测试仪器发展成定量分析的测量仪器。同时还出现了可用来
1
信号发生器的FPGA实现毕业设计
测量脉冲电路或用作脉冲调制器的脉冲信号发生器。由于早期的信号发生器机械结构比较复杂,功率比较大,电路比较简单,因此发展速度比较慢。直到1964年才出现第一台全晶体管的信号发生。
从六十年代开始,信号发生器有了快速的发展,逐渐出现了函数信号发生器,在这个时期的信号发生器以采用模拟电子技术为主,它是由模拟集成电路或者分立元件构成,它的电路结构尤其的复杂,并且它只能够产生三角波、正弦波、矩形波和锯齿波等几种简单基本的波形;因为模拟电路结构的漂移比较大,使得它的输出波形的弧度稳定性较差,而且它的电路存在着尺寸大、功耗大和价格贵等缺点,如果要产生复杂的信号波形,那么它的电路结构尤其的复杂。
七十年代出现微处理器以后,利用微处理器、D/A和A/D转换器、硬件和软件组成的信号发生器具有强大的功能和能够产生复杂的波形。这个时期的信号发生器主要以软件为主,它的实质是采用微处理器对DAC的程序进行控制,就可以得到简单的波形。然而软件控制波形有一个最大的缺点就是它的输出波形频率低,这是由于CPU的工作速度决定输出波形的频率,如果想要提高波形的频率可以通过改进软件的程序来减少它的执行周期,或者提CPU的工作时钟周期。但是这些方法都是有限的不能完全解决,根本的办法还是要对硬件电路进行改进。
随着计算机和信号处理技术的不断发展,数字化技术在电子测量仪器中的应用也得到了极大的促进,使得原有的模拟信号处理慢慢的被数字信号处理替代,从而不断扩充了信号仪器的处理能力,提高了信号测量的精度和准确度以及变换速度,克服了模拟信号处理的缺点,数字信号发生器也随之逐渐发展起来。
现在信号发生器的应用是非常宽阔的,种类也很多。信号发生器可以分为通用和专用的两大类发生器,专用的信号发生器主要是为了测量某些特殊值而研发的,例如电视信号和脉冲编码信号发生器等。如果按其产生的频率方法来分类可以分为谐振法和合成法两类。一般的传统信号发生器就是采用谐振法来产生的,即利用具有频率选择性的回路产生正弦振荡的发生器来获得所需要的频率。
如今电子测量技术对于信号发生器的频率精确度和稳定度的要求越来越苛刻,要求在较宽的频率范围之内可以获得较高频率稳定度和精确度的输出信号。对于作为一种精密测量的信号发生器,它的频率准确度一般要达到106~107。所以传统的信号发生器已经不能满足现代电子测量的要求。然而,合成的信号发生器具有频率稳定度高,它的频率准确度可以达到109或者更高的水平。它可以输出多种波形,具有广泛和精确的输出电平调整,同时具有较宽的频率范围和更小的输出频率间隔,所以应用前景十分的广阔。
2
信号发生器的FPGA实现毕业设计
1.3 信号发生器的总体设计思路
信号发生器的实现方法有很多种,包括利用数字电路小规模多器件组合、单片机、以及基于FPGA的实现方法。本设计采用FPGA芯片实现,与用其他方法相比,FPGA不仅可以输出用户所需要的任意波形,而且还可以通过改变信号发生器和计算机的通信接口来拓展信号端口的地址空间,可以增加数据的位数和提高频率分辨率的精度,以及可以增加信号发生器的输出波形种类等的特性。而且它具有高速的传输速率和可靠性高的现场可编程,同时它能够降低成本和系统工作稳定可靠等优点。
信号发生器是由信号产生模块、信号控制模块和D/A转换器模块组成,整个系统是以FPGA为核心,加上必要的外围电路来组成。FPGA主要是用来进行初值和时钟分频等,外围电路主要有波形的选择和频率的控制以及数据转换电路,完成波形的显示信息以及控制波形数据的输出等功能。通过不同的选择波形输出后,经过数码转换,将一个数字信号的波形转换为一个模拟信号的波形。本次设计利用的软件是Quartus II 9.1来进行编程和时序仿真,以及产生RTL和各模块的结构框图。
3
信号发生器的FPGA实现毕业设计
2.1 FPGA简介
第2章设计简介
目前电子产品已渗透到几乎所有的消费领域,针对不同的市场产品需求,器件的专用性越来越强,而产品的升级换代速率快使专用器件的使用周期不断缩短。半导体产业界为降低器件制造成本,希望采用标准化技术生产通用器件,因而推出了超大规模通用可编程逻辑器件(Programmable Logic Device,PLD),以便改变市场需求的专用化和器件功能标准化的突出矛盾。PLD的内部资源结构主要分为阵列型和单元型,互连线方式分为集总型和分布型,编程信息存储主要依赖EEMOS或RAM,每个存储单元载入编程配置数据中的一位。根据可编程逻辑器件的逻辑资源结构、编程工艺和互连方式的不同,可编程器件一般可分为复杂的可编程器件(Complex Programmable Logic Device,CPLD)和现场可编程门陈列(Field Programmaable Gate Array,FPGA)。
CPLD的基本结构一般基于含可编程与—或阵列和触发器的宏逻辑块(Logic Array Block,LAB)。每个宏逻辑块具有数十个的输入端口和十几个输出端口,逻辑块与逻辑块之间的互连方式一般采用集总连线方式,通过集中在一个全局布线区PIA的可编程互连线结构组成更大规模的PLD。集总型互连方式的连线资源采用长度确定的金属线串联各逻辑单元。由于各逻辑块间的信号传递路径固定,与布局无关,系统的信号延迟时间可预测。CPLD具有强大的时序控制能力,它很适合用来实现控制密集型的数字电路系统。CPLD的I/O端口可以连接到任何端口控制的逻辑块。CPLD的逻辑资源密度较相同芯片面积的FPGA低,配置采用在系统可编程技术,从电可擦除只读存储器保存编程数据,芯片的配置数据将不会断电失效。
FPGA是20世纪80年代中期出现的可编程逻辑器件。FPGA和CPLD两者都是可编程逻辑器件,它们都是在PAL、GAL等逻辑器件的基础之上迅速发展起来的,与以前的PAL、GAL等可编辑逻辑器件相比,FPGA和CPLD不仅规模更大而且可以替代几十甚至几千块通用的IC芯片。这类FPGA和CPLD实际上就是一个字系统部件,受到广大的电子工程编辑者的关注和欢迎。经过几十年的不断发展,各个公司相继开发了多种PLD。比较典型的就是Xilinx公司的FPGA和Altera公司的CPLD器件系列,他们的起步比较早,占领了较大的PLD市场。
FPGA以基于查找表结构的可编程逻辑元构成庞大的阵列,每个逻辑元的规模不大,输入端不足十个,输出仅1-2个。可编程的连线分布在逻辑元之间的布线区。分布型连线方式的连线资源是分段的,利用长度不同的金属线沿传输路径连接逻辑元。片内互连方
4
信号发生器的FPGA实现毕业设计
式灵活,可人为干预,但信号路径与系统布局有关,布线延时是累加的,不可以预测。FPGA的集成度更高,资源更丰富,适于实现运算能力较强的数据密集型数字系统。FPGA内部配置的阵列一般是采用在电路可重构技术上编辑数据,然后由静态存储器进行保存。当FPGA器件突然失电的时候,静态存储器中的配置数据也会随之消失。
FPGA是具有掩模可编辑门阵列的通用可编程结构,它是由逻辑功能块排成阵列并且由可编程的互连资源连接到这些逻辑功能块来实现不同的设计。FPGA一般由3种可编程电路和一个用于存放编程数据的静态存储器SRAM组成。这3种可编程电路是:可编程逻辑块(Configurable Logic Block,CLB)、输入/输出模块(I/O Block,IOB)和互连资源(Interconnect Resource,IR)。 (1)可编程逻辑块CLD
CLB是FPGA的主要组成部分,是实现逻辑功能的基本单元,主要由逻辑函数发生器、触发器、数据选择器和变换电路等组成。CLB通常规则地排列成一个阵列,散布于整个芯片之中。 (2)输入/输出模块IOB
输入/输出模块IOB主要由输入触发器、输入缓冲器和输出触发/锁存器、输出缓冲器组成。每个IOB控制一个引脚,可配置为输入、输出或双向I/O功能。 (3)可编程互连资源IR
可编程互连资源IR包括各种长度的连线和一些可编程连接开关,它们将各CLB、各IOB以及CLB与IOB连接起来,构成特定功能的电路。
基于EDA软件的CPLD/FPGA设计流程如图2-1。
原理图/HDL文本编辑 综合 FPGA/CPLD器件和电路系统 时序与功能门级仿真
FPGA/CPLD配置
FPGA/CPLD编程下载 图2-1应用于FPGA/CPLD的EDA设计流程
5
信号发生器的FPGA实现毕业设计
2.2VHDL硬件描述语言介绍
在EDA技术中最重要的组成部分是硬件描述语言HDL,目前常用的HDL主要是VHDL、Verilog HDL、System Verilog和System C。其中VHDL、Verilog HDL语言在现在EDA设计中时最常使用的,也得到了大部分的主流EDA工具的支持。而System Verilog和System C这两种硬件描述语言现在还处于待完善的过程中,主要是为了加强了系统验证方面的功能。VHDL已经是电子设计主流硬件的描述语言之一。VHDL的英文全名是VHSIC(Very High Speed Integrated Circuit)Hardware Description Language,与1983年由美国国防部(DOD)发起创建,由IEEE(The Institute of Electrical and Electronics Engineers)进一步发展并在1987年作为“IEEE标准1076”发布。
VHDL是用于描述数字系统的结构、行为、功能和接口的主要硬件描述语言,它除了具有许多硬件特征的语句之外,VHDL的语言描述方法和语言的格式以及语法和一般的计算机高级语言相似。在描述硬件的结构和行为中,VHDL具有如下几个特点: (1)VHDL语言不仅支持自顶向下的设计方法,它同时还能够支持同步和异步电路、FPGA以及其他随机电路的设计。
(2)VHDL可以在很多种EDA工具环境中进行运行,它具有很好的通用性和兼容性。
(3)VHDL语言是可以多层次的描述系统硬件功能,可以从系统的数模到门级电路,其高层次的行为描述可以和低层次的结构描述、寄存器传输级描述进行混合使用。 (4)VHDL具有电路仿真和验证功能,可以保证程序设计的正确性和有效性,用户不必要编写如何测试相量的程序便可以进行源代码级的调试和仿真,并且编程者可以非常方便地对各种方案进行比较,可以确定它的可行性和优劣性,不必要做任何实际的电路实验和操作。
(5)VHDL语言主要是以行为描述为主,它能够从一个比较抽象的角度来描述一个电子实体的各项功能。并且它的语言使用的是结构化语言,因此也能够从一个比较具体的角度来描述电子实体的结构。
在VHDL程序设计中有一些经常用到的术语,在进行VHDL的程序编写时,在每个程序的描述中都会用到有一些基础的VHDL程序构造块。如:
(1)实体(Entity)。实体是硬件描述语言VHDL设计中最基本的组成部分之一,VHDL表达的所有设计都与实体有关系,是程序设计中最基本的不可缺少的构造块。
(2)结构体(Architecture)。所有能够被仿真的实体都必须具有结构体描述语句,结构体语句是用于描述实体的结构或行为的语句。
6
信号发生器的FPGA实现毕业设计
(3)配置(Configuration),一个配置语句是用来绑定一个元器件到实体的结构体的语句,一个配置可以看成是设计的一个元件表。
(4)程序包(Package)。在VHDL中,常量、变量、信号等数据对象和数据类型与子程序语句可以在实体说明或结构体说明部分加以说明,且实体说明部分它所定义的常量和数据类型与子程序在对应的结构体中是可见的。
(5)属性(Attribute)。属性是描述VHDL实体和结构体、类型以及信号的一些特征,比如数据和预定义数据等。
(6)进程(Process)。进程在VHDL中是最具特色的语句,并且是VHDL中执行语句的基本单元。
(7)类属(Generic)。一个类属在VHDL中是用于将信息传递给一个实体的参数。例如。具有上升和下降延迟的门级模型。
(8)信号驱动器(Driver)。这是一个信号的驱动源。如果一个信号由两个驱动源,那么当两个源都有效时,则信号具有两个驱动器。
(9)总线(Bus)。总线通常指的是用于硬件设计中的特定通信方式或一组信号。在VHDL中,一条总线就是一种特定的信号,通常总线可以关闭其驱动器。
一个完整的VHDL程序或者说设计实体,是指能够为VHDL综合器所接受,并且能够作为一个单独的设计单元,即以元件的形式存在于VHDL的程序中。VHDL的设计实体基本结构如图2-2。
配置(CONFIGURATION) 图2-2 VHDL设计实体结构图
7
库、程序包 实体(ENTITY) 结构体 (ARCHITECTURE) 进程 或其他并行结构 信号发生器的FPGA实现毕业设计
2.3QuartusII软件介绍
Quartus II是Altera提供的FPGA/CPLD开发集成环境,Altera是世界上最大的可编程逻辑器件供应商之一。Quartus II在21世纪初推出,是Altera前一代FPGA/CPLD集成开发环境MAX+plus II的更新换代产品,其界面友好,使用便捷。Altera为Quartus II设计软件提供完整的多平台设计环境,它可以轻易满足特定设计的需要。它是单芯片可编程系统设计的综合性环境。Quartus II软件拥有FPGA和CPLD设计的所有阶段的结局方案。Quartus II具有以下主要模块:
(1)设计输入。Quartus II软件中的工程由所有设计文件和涉及有关的设置组成。用户可以使用Quartus II Block Editor、Text Editor、MegaWizard Plug-In Manage和EDA设计输入工具建立包括Altera宏功能模块、参数化模块库(LPM)函数和知识产权(IP)函数在内的设计。
(2)综合。可以使用Complier的Quartus II Analysis & Synthesis模块分析设计文件和建立工程数据库。Analysis & Synthesis使用Quartus II Integrated Synthesis综合VHDL设计文件(.vhd)或Verilog设计文件(.v)。用户喜欢的话,可以使用其他EDA综合工具综合VHDL或Verilog HDL设计文件,然后再生成可以与Quartus II软件配合使用的EDIF网表文件(.edf)或(.vqm)。
(3)仿真。可以使用Quartus II仿真器在工程中仿真任何设计。视所需的信息类型而定,可以进行功能仿真以测试设计的逻辑运算,也可以进行时序仿真以在目标器件中测试设计的逻辑运算和最差时序。Quartus II软件可以仿真整个设计,或仿真设计的任何部分。可以在工程中将任何设计实体指定为仿真焦点。在仿真时,仿真器仿真焦点实体及其所有附属设计实体。
(4)布局布线。Quartus II Timing Analyzer允许用户分析设计中所有逻辑的性能,并协助引导Fitter满足设计中的时序分析要求。
如图2-3上排所示的是Quartus II编译设计主控界面,它显示了Quartus II自动设计的各主要处理环节和设计流程,包括设计输入编辑、设计分析与综合、适配、编程文件汇编、时序参数提取以及编程下载几个步骤。图2-3下排的流程框图,是与上面的Quartus II设计流程相对照的标准的EDA开发流程。
8
信号发生器的FPGA实现毕业设计
图形或HDL 编辑 设计输入 分析与综合 适配器 编辑文件汇编 编程器 时序分析器 综合或编译 适配器件 下载 仿真 图2-3 Quartus II设计流程图
2.4 RLT级仿真
RLT级仿真是用来验证RLT级的硬件描述语言VHDL的描述是否正确。设计者已经描述了设计对象的行为模型。现在的设计者只要使用表达式设计环境的激励信号来驱动设计,并且进行检验确认结果是否符合自己的所建的行为模型。一个标准的仿真器可以用来读取RTL VHDL描述,而且可以验证设计的正确性。VHDL仿真器读取VHDL语言描述,并且将它们编译成为内部格式,然后使用测试量来执行所编译的格式。设计不仅可以查看输出的仿真结果,而且可以确定设计描述工作是否正确。一般的RTL级仿真步骤如图2-4所示。
编写VHDL代码
编译检查VHDL
运行RTL仿真 否 否 结果正确否 是 图2-4 RTL级仿真过程
9
信号发生器的FPGA实现毕业设计
第3章系统硬件电路设计
3.1信号发生器的系统组成
本信号发生器的系统由输入部分、FPGA部分、波形转换部分组成。如图3-1所示。 FPGA部分 时钟 波形选择 频率选择 图3-1信号发生器的系统组成
递增斜坡 递减斜坡 复位 系统控制器波形的 D/A 三角波 正弦波 转换 波形输出 方波 阶梯波 自定义
10
信号发生器的FPGA实现毕业设计
3.2设计原理
本设计是利用FPGA实现信号发生器,采用的是自顶向下的设计方法,自顶向下的设计方法现在已经是EDA技术的主要的设计方法,是FPGA的主要设计开发手段。自顶向下的设计流程如图3-2所示。
(1)设计说明书 (7)测试向量生成 (2)建立VHDL行为模型 (8)功能仿真 (3)HDL行为仿真 (9)结构综合 (4)HDL-RTL级建模 (10)门级时序仿真 (5)前端功能仿真 (11)硬件测试 (6)逻辑综合 设计完成
图3-2 自顶向下的设计流程
信号发生器的FPGA实现是利用硬件描述语言VHDL实现波形的选择、频率的控制和波形的产生。波形的产生是通过VHDL语言进行编程产生一组波形数据,然后把程序下载到FPGA上经过D/A转换输出波形。我们利用Quartus II 9.1软件来建立工作库文件和编辑设计文件、创建工程、全程编译、时序仿真,最后完成整个设计。
11
信号发生器的FPGA实现毕业设计
3.3输入部分
输入部分主要包括:基准时钟、信号复位、波形选择、频率控制 (1) 基准时钟:时钟的频率选为100MHz。 (2) 信号复位:设置为低电平有效。
(3) 波形选择:通过按键可以自由选择7种波形。
(4) 频率控制:通过按键可以选择1KHz-10KHZ、步进1KHz的任意频率。 波形的选择是利用波形控制模块的内部选择端口与外部的按键连接,通过按键的控制产生递增斜坡、递减斜坡、三角波、正弦波、方波、阶梯波和自定义波形,因为只有7种波形,所以设置7个不同的数值来选择波形。例如:按键如果输入的是“001”则输出递增斜坡、输入“010”则输出递减斜坡、输入“011”则输出三角波、输入“100”则输出正弦波、输入“101”则输出方波、输入“110”则输出阶梯波、输入“111”则输出自定义波形。频率的控制也是通过调频模块的内部选择端口与外部的按键相连,通过按键的选择可以产生1KHz-10KHz、步进1KHz的任意频率。因为频率范围为1KHz-10KHZ、步进为1KHz,所以把频率分为10份,每一份用一个按键控制。
频率选择的计算,因为频率范围为1KHz-10KHz、步进为1KHz、每个波形的一个周期有256个点,每一个点都是当基准时钟有一个上升沿产生,所以通过分频可以控制信号的频率。当输出频率要求1KHz时,它的周期时间T1=1000μs。基准时钟的频率为100MHz,所以它的周期为T2=10ns。因为一个波形由256个数据组成,而每个数据都是在基准时钟有一个上升沿产生,所以当不采用分频时波形的一个周期为T3=2560ns=2.56μs。因此调频系数为K=T1/T3=390.625 。所以设置的PK=“110000111”。通过频率调节模块里面的CASE语句,当频率调节按键SELCON1=“0001”时,把“110000111”的值赋给PK,然后输出的波形就是1KHz了。
输出频率要求2KHz时: T1=500μs
T3=2560ns=2.56μs K=T1/T3=195.3
所以: PK=“0011000011”SELCON1=“0010”
输出频率要求3KHz时: T1=330μs
T3=2560ns=2.56μs
K=T1/T3=128.9
所以: PK=“0010000001”SELCON1=“0011”
12
信号发生器的FPGA实现毕业设计
输出频率要求4KHz时: T1=250μs
T3=2560ns=2.56μs
K=T1/T3=97.65
所以: PK =“0001100010”SELCON1=“0100”
输出频率要求5KHz时: T1=200μs
T3=2560ns=2.56μs K=T1/T3=78.125
所以: PK =“0001100010”SELCON1=“0101”
输出频率要求6KHz时: T1=167μs
T3=2560ns=2.56μs K=T1/T3=65.2
所以: PK =“0001000001”SELCON1=“0110”
输出频率要求7KHz时: T1=143μs
T3=2560ns=2.56μs K=T1/T3=55.85
所以: PK =“0000111000”SELCON1=“0111”
输出频率要求8KHz时: T1=125μs
T3=2560ns=2.56μs K=T1/T3=48.8
所以: PK=“0000110001”SELCON1=“1000”
输出频率要求9KHz时: T1=111μs
T3=2560ns=2.56μs K=T1/T3=43.3
所以: PK =“0000101011”SELCON1=“1001”
输出频率要求10KHz时:T1=100μs
T3=2560ns=2.56μs K=T1/T3=39.06
所以:PK =“0000100111”SELCON1=“1010”
13
信号发生器的FPGA实现毕业设计
3.3 D/A数模转换部分
数字信号到模拟信号的转换称为模数转换,简称D/A转换。能够现实D/A转换的电路称为D/A转换器或者DAC。为D/A转换器的结构如图3-3所示,它是由数码锁存器、电阻网络、电子开关以及求和电路组成。
数电电求 D0 码子阻和锁 D1 模拟输出 开网电存关络路器
Dn-1
Vref 图3-3数模转换电路
数模的转换过程是需要时间的,数码锁存器的作用是把要保存的数字输入暂时保存起来,方便进行数模转换。电子开关具有两个档位置,一档是接基准电压Vref,另一个档接地。电子开关受到数码锁存器的控制,当数码锁存器中的数字控制字为1时,开关接基准电压Vref,当为0的时候接地。电阻网络是由不同的阻值电阻构成,电阻的一端跟随开关的位置分别接与基准电压Vref或地。求和电路是把电阻网络中的各个电阻上的电流相加起来,然后经过一个输出反馈电阻就可以形成输出电压了。8位的数模转换器DAC0832为典型的D/A芯片。DAC0832的引脚图如图3-4所示,它是由8位的DAC寄存器和8位的输入寄存器、D/A转换器组成。
图3-4 DAC0832的引脚图
14
信号发生器的FPGA实现毕业设计
CS—片选信号。芯片的寻址输入信号,当CS=0时,芯片处于工作状态,当CS=1是,芯片处于禁止状态而不能工作。 ILE—允许锁存信号。
WR1—写信号1。是输入寄存器的写选通信号。 WR2—写信号2。
XFER—通道控制信号。数据传送控制信号的输入线,低电平有效 Iout1—模拟电流输出1。 Iout2—模拟电路输出2。 Rfb—反馈电阻引出端。
Vref—参考电压输入。范围:+10V — -10V。 Vcc—芯片电压。范围+5-+15V,最佳15V。 AGND—模拟地。 DGND—数字地。
DAC0832可以采用双缓冲器和单缓冲器的两种方式进行工作。采用双缓冲器进行工作时,输入数据寄存器是用于数据采集的,DAC寄存器是用于D/A转换的数据锁存。在这种方式下工作,数模转换的速度较快,但是它的控制电路复杂。
采用单缓冲器的工作方式时,由输入数据寄存器来完成数据的采集和数据的锁存,而DAC寄存器仅仅作为一个数据通道。在这种方式下工作,数模转换的速度没有双缓冲器方式那么快,但是它的控制电路简单,所以它是最常用的工作方式。
15
信号发生器的FPGA实现毕业设计
4.1系统软件流程图
第4章系统的软件设计
信号发生器的FPGA实现是以FPGA为核心来控制波形的输出和频率的调节,通过外部按键可以自由的选择所需要的波形和频率,设计的具体流程如图4-1所示。
输出波形 图4-1 系统流程图
初始化 按键输入,选择所需要的波形和频率 由FPGA生成波形数据 由Quartus II软件进行仿真
4.2 系统各模块
4.2.1 三角波产生模块
(1)三角波的VHDL的描述
利用VHDL语言编程产生一个三角波波形数据,同时通过调节PK可以调节三角波形的频率,波形的前128值从1开始依次递增到128,后128个点从127依次递减到0,这样就形成一个以256个数值为一个周期的三角波。
16
信号发生器的FPGA实现毕业设计
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; --算符重载函数 ENTITY SJB IS--三角波实体
PORT( CLK : IN STD_LOGIC;--基准时钟
REST : IN STD_LOGIC;--信号复位
PK : IN STD_LOGIC_VECTOR(9 DOWNTO 0);--频率调节 Q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));--信号输出 END ENTITY SJB;
ARCHITECTURE HAVE OF SJB IS--三角波结构体 SIGNAL B:STD_LOGIC_VECTOR(9 DOWNTO 0); BEGIN
PROCESS(CLK,REST)
VARIABLE TEM: STD_LOGIC_VECTOR(7 DOWNTO 0); VARIABLE A: STD_LOGIC;--变量A BEGIN
IF REST='0' THEN Q<=\"00000000\";--低电平复位
ELSIF CLK'EVENT AND CLK='1' THEN--CLK上升沿有效 B<=B+1;
IF B=PK THEN --判断B是否等于分频系数 B<=\"0000000000\"; IF A='0' THEN
IF TEM=\"01111111\" THEN--前128个依次递增 TEM:=\"10000000\"; A:='1';
ELSE TEM:=TEM+1; END IF; ELSE
IF TEM=\"00000001\" THEN --后128个依次递减 TEM:=\"00000000\"; A:='0';
ELSE TEM:=TEM-1; END IF; END IF; END IF;
17
信号发生器的FPGA实现毕业设计
END IF; Q<=TEM;
END PROCESS;
END ARCHITECTURE HAVE; (2)三角波的RTL电路图
通过选择Quartus II软件中的Tools下的Netlist Viewers命令中的RTL,可以看到文件综合之后生成的应用RTL电路图观察图。三角波的RTL图如图4-2所示。
图4-2 三角波的RTL图
(3)三角波的结构框图
三角波的结构图如图4-3所示,其中PK为频率的控制输入端口,CLk为基准时钟,REST为复位键,Q为输出信号。
图4-3 三角波结构框图
18
信号发生器的FPGA实现毕业设计
4.2.2 递减斜坡产生模块
(1)利用VHDL语言编程产生一个递减斜坡,通过PK可以进行调节波形的频率,递减斜坡的波形值是从255开始依次递减到0,然后再从255依次递减到0,这样就形成一个以256个数值为一个周期的递减斜坡。
LIBRARY IEEE;--递减斜坡 USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; --算符重载函数 ENTITY DJXP IS--递减斜坡实体
PORT ( CLK : IN STD_LOGIC;--基准时钟
REST: IN STD_LOGIC;--信号复位
Q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--信号输出 PK : IN STD_LOGIC_VECTOR(9 DOWNTO 0));--频率调节
END ENTITY DJXP;
ARCHITECTURE HAVE OF DJXP IS--递减斜坡结构体 SIGNAL A:STD_LOGIC_VECTOR(9 DOWNTO 0); BEGIN
PROCESS(CLK,REST)
VARIABLE TEM: STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN
IF REST='0' THEN --低电平复位 TEM:=\"11111111\";
ELSIF CLK'EVENT AND CLK='1' THEN--CLK上升沿有效
A<=A+1;
IF A=PK THEN--判断A是否等于分频系数 A<=\"0000000000\";
IF TEM=\"00000000\" THEN--判断TEM是否等于0 TEM:=\"11111111\"; ELSE
TEM:=TEM-1;--从255减到0 END IF; END IF;
19
信号发生器的FPGA实现毕业设计
END IF; Q<=TEM; END PROCESS;
END ARCHITECTURE HAVE; (2)递减斜坡的电路图
通过选择Quartus II软件中的Tools下的Netlist Viewers命令中的RTL,可以看到文件综合之后生成的应用RTL电路图观察图。递减斜坡的RTL图如图4-4所示。
图4-4 递减斜坡的RTL图
(3)递减斜坡的结构框图
递减斜坡的结构框图如图4-5所示,PK为频率控制输入端口,CLk为基准时钟,REST为复位键,Q为输出信号。
图4-5 递减斜坡的结构框图
20
信号发生器的FPGA实现毕业设计
4.2.3递增斜坡产生模块
(1)利用VHDL语言编程产生一个递增斜坡,通过PK可以进行调节波形的频率,递增斜坡的波形值从0开始依次递增到255,然后再从0依次递增到255,通过输出就形成一个递增斜坡。
LIBRARY IEEE;--递增斜坡 USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;--算符重载函数 ENTITY DZXP IS--递增斜坡的实体
PORT ( CLK : IN STD_LOGIC;--基准时钟
REST : IN STD_LOGIC;--复位信号
PK : IN STD_LOGIC_VECTOR(9 DOWNTO 0);--频率调节 Q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --输出信号
END ENTITY DZXP;
ARCHITECTURE HAVE OF DZXP IS--递增斜坡的结构体 SIGNAL A:STD_LOGIC_VECTOR(9 DOWNTO 0); BEGIN
PROCESS(CLK,REST)
VARIABLE TEM: STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
IF REST='0' THEN--低电平复位 TEM:=\"00000000\";
ELSIF CLK' EVENT AND CLK='1' THEN--CLK上升沿有效 A<=A+1;
IF A=PK THEN--判断A是否等于分频系数 A<=\"0000000000\";
IF TEM=\"11111111\" THEN--判断变量TEM是否等于255
TEM:=\"00000000\";
ELSE
TEM:=TEM+1;--TEM依次递增
END IF;
21
END IF;
信号发生器的FPGA实现毕业设计
END IF;
Q<=TEM; END PROCESS;
END ARCHITECTURE HAVE; (2)递增斜坡的电路图
通过选择Quartus II软件中的Tools下的Netlist Viewers命令中的RTL,可以看到文件综合之后生成的应用RTL电路图观察图。递增斜坡的RTL图如图4-6所示。
图4-6递增斜坡的RTL图
(3)递增斜坡的结构框图
递增斜坡的结构框图如图4-7所示,PK为频率控制的输入端口,CLk为基准时钟,REST为复位键,Q为输出信号。
图4-7递增斜坡的结构框图
22
信号发生器的FPGA实现毕业设计
4.2.4 方波产生模块
(1)利用VHDL语言编程产生一个方波,通过PK可以进行调节波形频率,方波的波形值前128个是255,后128个是0。通过输出就形成一个方波。 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY FB IS--方波的实体
PORT ( CLK : IN STD_LOGIC;--基准时钟
REST : IN STD_LOGIC;--信号复位
PK : IN STD_LOGIC_VECTOR(9 DOWNTO 0);--频率调节 Q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));--信号输出 END ENTITY FB;
ARCHITECTURE HAVE OF FB IS--方波的结构体 SIGNAL A:STD_LOGIC;
SIGNAL B:STD_LOGIC_VECTOR(9 DOWNTO 0); BEGIN
PROCESS(CLK,REST)--计算半个周期的进程
VARIABLE TEM: STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN
IF REST='0' THEN--低电平复位 A<='0';
ELSIF CLK'EVENT AND CLK='1' THEN--CLK上升沿有效 B<=B+1;
IF B=PK THEN --判断B是否等于分频系数 B<=\"0000000000\";
IF TEM=\"11111111\" THEN --判断变量TEM是否等于255 TEM:=\"00000000\";ELSE TEM:=TEM+1;END IF;
IF TEM<=\"10000000\" THEN--半个周期 A<='1'; ELSE A<='0'; END IF;END IF;END IF;
23
信号发生器的FPGA实现毕业设计
END PROCESS;
PROCESS(CLK,A) --信号的输出 BEGIN
IF CLK'EVENT AND CLK='1' THEN IF A='1' THEN
Q<=\"11111111\";--前128个为‘1’
ELSE
Q<=\"00000000\";--后128个为‘0’ END IF;END IF; END PROCESS;
END ARCHITECTURE HAVE; (2)方波的电路图
通过选择Quartus II软件中的Tools下的Netlist Viewers命令中的RTL,可以看到文件综合之后生成的应用RTL电路图观察图。方波的RTL图如图4-8所示。
图4-8方波的RTL图
(3)方波的结构框图
方波的结构框图如图4-9所示,PK为频率控制输入端口,CLk为基准时钟,REST为复位键,Q为输出信号。
图4-9方波的结构框图
24
信号发生器的FPGA实现毕业设计
4.2.5 阶梯波产生模块
(1)利用VHDL语言编程产生一个阶梯波,利用PK可以进行调节频率,阶梯波的波形值是从0开始通过信号B的来延迟8个基准时钟,然后再每次加8。通过输出就形成一个与没有调频的256个数值的波形信号一样的周期。 LIBRARY IEEE;--阶梯波
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY JTB IS--阶梯波实体
PORT ( CLK: IN STD_LOGIC;--基准时钟
REST: IN STD_LOGIC;--复位信号
PK : IN STD_LOGIC_VECTOR(9 DOWNTO 0);--频率调节 Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));--信号输出
END;
ARCHITECTURE HAVE OF JTB IS--阶梯波结构体
SIGNAL A:STD_LOGIC_VECTOR(9 DOWNTO 0);--分频信号 SIGNAL B:STD_LOGIC_VECTOR(3 DOWNTO 0);--延迟信号 BEGIN
PROCESS(CLK,REST)
VARIABLE TEM: STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN
IF REST='0' THEN--低电平复位
TEM:=\"00000000\";
ELSIF CLK 'EVENT AND CLK='1' THEN--上升沿有效 A<=A+1;
IF A=PK THEN --判断A是否等于分频系数 A<=\"0000000000\";
IF TEM=\"11111111\" THEN--判断变量TEM是否等于255 TEM:=\"00000000\"; ELSE B<=B+1;
IF B=\"0111\" THEN-- 判断B是否延迟了8个基准时钟信号
25
信号发生器的FPGA实现毕业设计
TEM:=TEM+8;B<=\"0000\"; END IF; END IF;
END IF;
END IF;
Q<=TEM;
END PROCESS; END;
(2)阶梯波的电路图
通过选择Quartus II软件中的Tools下的Netlist Viewers命令中的RTL,可以看到文件综合之后生成的应用RTL电路图观察图。阶梯波的RTL图如图4-10所示。
图4-10阶梯波的RTL图
(3)阶梯波的结构框图
阶梯波的结构框图如图4-11所示,PK为频率控制的输入端口,CLk为基准时钟,REST为复位键,Q为输出信号。
图4-11阶梯波的结构框图
26
信号发生器的FPGA实现毕业设计
4.2.6 正弦波产生模块
(1)利用VHDL语言编程产生一个正弦波,利用PK可以进行调节频率,正弦波的波形值是利用CASE语句来进行赋值的,它的值是从255到0然后由1到255形成一个正弦波形。
LIBRARY IEEE; --正弦波
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ZXB IS--正弦波的实体
PORT( CLK:IN STD_LOGIC;--基准时钟 REST:IN STD_LOGIC;--信号复位
PK : IN STD_LOGIC_VECTOR(9 DOWNTO 0);--频率调节 Q:OUT INTEGER RANGE 0 TO 255);--信号输出 END ENTITY ZXB;
ARCHITECTURE HAVE OF ZXB IS--正弦波的结构体 SIGNAL A:STD_LOGIC_VECTOR(9 DOWNTO 0); BEGIN
PROCESS(CLK,REST)
VARIABLE TEM:INTEGER RANGE 0 TO 255; BEGIN
IF REST='0' THEN--低电平复位 Q<=0;
ELSIF CLK'EVENT AND CLK='1' THEN--上升沿有效 A<=A+1;
IF A=PK THEN--判断A是否等于分频系数 A<=\"0000000000\"; IF TEM=255 THEN TEM:=0; ELSE TEM:=TEM+1; END IF;
27
信号发生器的FPGA实现毕业设计
CASE TEM IS--正弦波的波形数值
WHEN 00=>Q<=255; WHEN 84=>Q<=89; WHEN 168=>Q<=81; WHEN 01=>Q<=255; WHEN 85=>Q<=87; WHEN 169=>Q<=83; WHEN 02=>Q<=251; WHEN 86=>Q<=85; WHEN 170=>Q<=85; WHEN 03=>Q<=249; WHEN 87=>Q<=83; WHEN 171=>Q<=87; WHEN 04=>Q<=247; WHEN 88=>Q<=81; WHEN 172=>Q<=89; WHEN 05=>Q<=245; WHEN 89=>Q<=79; WHEN 173=>Q<=91; WHEN 06=>Q<=243; WHEN 07=>Q<=241; WHEN 08=>Q<=239; WHEN 09=>Q<=237; WHEN 10=>Q<=235; WHEN 11=>Q<=233; WHEN 12=>Q<=231; WHEN 13=>Q<=229; WHEN 14=>Q<=227; WHEN 15=>Q<=225; WHEN 16=>Q<=223; WHEN 17=>Q<=221; WHEN 18=>Q<=219; WHEN 19=>Q<=217; WHEN 20=>Q<=215; WHEN 21=>Q<=213; WHEN 22=>Q<=211; WHEN 23=>Q<=209; WHEN 24=>Q<=207; WHEN 25=>Q<=205; WHEN 26=>Q<=203; WHEN 27=>Q<=201; WHEN 28=>Q<=199; WHEN 29=>Q<=197; WHEN 30=>Q<=195; WHEN 90=>Q<=77; WHEN 91=>Q<=75; WHEN 92=>Q<=73; WHEN 93=>Q<=71; WHEN 94=>Q<=69; WHEN 95=>Q<=67; WHEN 96=>Q<=65; WHEN 97=>Q<=63; WHEN 98=>Q<=61; WHEN 99=>Q<=59; WHEN 100=>Q<=57; WHEN 101=>Q<=55; WHEN 102=>Q<=53; WHEN 103=>Q<=51; WHEN 104=>Q<=49; WHEN 105=>Q<=47; WHEN 106=>Q<=45; WHEN 107=>Q<=43; WHEN 108=>Q<=41; WHEN 109=>Q<=39; WHEN 110=>Q<=37; WHEN 111=>Q<=35; WHEN 112=>Q<=33; WHEN 113=>Q<=31; WHEN 114=>Q<=29; 28
WHEN 174=>Q<=93; WHEN 175=>Q<=95; WHEN 176=>Q<=97; WHEN 177=>Q<=99; WHEN 178=>Q<=101; WHEN 179=>Q<=103; WHEN 180=>Q<=105; WHEN 181=>Q<=107; WHEN 182=>Q<=109; WHEN 183=>Q<=111; WHEN 184=>Q<=113; WHEN 185=>Q<=115; WHEN 186=>Q<=117; WHEN 187=>Q<=119; WHEN 188=>Q<=121; WHEN 189=>Q<=123; WHEN 190=>Q<=125; WHEN 191=>Q<=127; WHEN 192=>Q<=129; WHEN 193=>Q<=131; WHEN 194=>Q<=133; WHEN 195=>Q<=135; WHEN 196=>Q<=137; WHEN 197=>Q<=139; WHEN 198=>Q<=141;
信号发生器的FPGA实现毕业设计
WHEN 31=>Q<=193; WHEN 115=>Q<=27; WHEN 199=>Q<=143; WHEN 32=>Q<=191; WHEN 116=>Q<=25; WHEN 200=>Q<=145; WHEN 33=>Q<=189; WHEN 117=>Q<=23; WHEN 201=>Q<=147; WHEN 34=>Q<=187; WHEN 118=>Q<=21; WHEN 202=>Q<=149; WHEN 35=>Q<=185; WHEN 119=>Q<=19; WHEN 203=>Q<=151; WHEN 36=>Q<=183; WHEN 120=>Q<=17; WHEN 204=>Q<=153; WHEN 37=>Q<=181; WHEN 121=>Q<=15; WHEN 205=>Q<=155; WHEN 38=>Q<=179; WHEN 39=>Q<=177; WHEN 40=>Q<=175; WHEN 41=>Q<=173; WHEN 42=>Q<=171; WHEN 43=>Q<=169; WHEN 44=>Q<=167; WHEN 45=>Q<=165; WHEN 46=>Q<=163; WHEN 47=>Q<=161; WHEN 48=>Q<=159; WHEN 49=>Q<=157; WHEN 50=>Q<=155; WHEN 51=>Q<=153; WHEN 52=>Q<=151; WHEN 53=>Q<=149; WHEN 54=>Q<=147; WHEN 55=>Q<=145; WHEN 56=>Q<=143; WHEN 57=>Q<=141; WHEN 58=>Q<=139; WHEN 59=>Q<=137; WHEN 60=>Q<=135; WHEN 61=>Q<=133; WHEN 62=>Q<=132; WHEN 122=>Q<=13; WHEN 123=>Q<=11; WHEN 124=>Q<=9; WHEN 125=>Q<=6; WHEN 126=>Q<=3; WHEN 127=>Q<=1; WHEN 128=>Q<=0; WHEN 129=>Q<=1; WHEN 130=>Q<=3; WHEN 131=>Q<=6; WHEN 132=>Q<=9; WHEN 133=>Q<=11; WHEN 134=>Q<=13; WHEN 135=>Q<=15; WHEN 136=>Q<=17; WHEN 137=>Q<=19; WHEN 138=>Q<=21; WHEN 139=>Q<=23; WHEN 140=>Q<=25; WHEN 141=>Q<=27; WHEN 142=>Q<=29; WHEN 143=>Q<=31; WHEN 144=>Q<=33; WHEN 145=>Q<=35; WHEN 146=>Q<=37; 29
WHEN 206=>Q<=157; WHEN 207=>Q<=159; WHEN 208=>Q<=161; WHEN 209=>Q<=163; WHEN 210=>Q<=165; WHEN 211=>Q<=167; WHEN 212=>Q<=169; WHEN 213=>Q<=171; WHEN 214=>Q<=173; WHEN 215=>Q<=175; WHEN 216=>Q<=179; WHEN 217=>Q<=181; WHEN 218=>Q<=183; WHEN 219=>Q<=185; WHEN 220=>Q<=187; WHEN 221=>Q<=189; WHEN 222=>Q<=191; WHEN 223=>Q<=193; WHEN 224=>Q<=195; WHEN 225=>Q<=197; WHEN 226=>Q<=201; WHEN 227=>Q<=203; WHEN 228=>Q<=205; WHEN 229=>Q<=207; WHEN 230=>Q<=209;
信号发生器的FPGA实现毕业设计
WHEN 63=>Q<=131; WHEN 147=>Q<=39; WHEN 231=>Q<=211; WHEN 64=>Q<=129; WHEN 148=>Q<=41; WHEN 232=>Q<=213; WHEN 65=>Q<=127; WHEN 149=>Q<=43; WHEN 233=>Q<=215; WHEN 66=>Q<=125; WHEN 150=>Q<=45; WHEN 234=>Q<=217; WHEN 67=>Q<=123; WHEN 151=>Q<=47; WHEN 235=>Q<=219; WHEN 68=>Q<=121; WHEN 152=>Q<=49; WHEN 236=>Q<=221; WHEN 69=>Q<=119; WHEN 153=>Q<=51; WHEN 237=>Q<=223; WHEN 70=>Q<=117; WHEN 154=>Q<=53; WHEN 238=>Q<=225; WHEN 71=>Q<=115; WHEN 155=>Q<=55; WHEN 239=>Q<=227; WHEN 72=>Q<=113; WHEN 156=>Q<=57; WHEN 240=>Q<=229; WHEN 73=>Q<=111; WHEN 157=>Q<=59; WHEN 241=>Q<=231; WHEN 74=>Q<=109; WHEN 158=>Q<=61; WHEN 242=>Q<=233; WHEN 75=>Q<=107; WHEN 159=>Q<=63; WHEN 243=>Q<=235; WHEN 76=>Q<=105; WHEN 160=>Q<=65; WHEN 244=>Q<=237; WHEN 77=>Q<=103; WHEN 161=>Q<=67; WHEN 245=>Q<=239; WHEN 78=>Q<=101; WHEN 162=>Q<=69; WHEN 246=>Q<=241; WHEN 79=>Q<=99; WHEN 163=>Q<=71; WHEN 247=>Q<=243; WHEN 80=>Q<=97; WHEN 164=>Q<=73; WHEN 248=>Q<=245; WHEN 81=>Q<=95; WHEN 165=>Q<=75; WHEN 249=>Q<=247; WHEN 82=>Q<=93; WHEN 166=>Q<=77; WHEN 250=>Q<=249; WHEN 83=>Q<=91; WHEN 167=>Q<=79; WHEN 251=>Q<=251; WHEN 252=>Q<=253; WHEN 253=>Q<=254; WHEN 254=>Q<=255; WHEN 255=>Q<=255; WHEN OTHERS=>NULL; END CASE; END IF; END IF; END PROCESS;
END ARCHITECTURE HAVE; (2)正弦波的电路图
通过选择Quartus II软件中的Tools下的Netlist Viewers命令中的RTL,可以看到文件综合之后生成的应用RTL电路图观察图。正弦波的RTL图如图4-12所示。
30
信号发生器的FPGA实现毕业设计
图4-12正弦波的RTL图
(3)正弦波的结构框图
正弦波的结构框图如图4-13所示,PK为频率控制的输入端口,CLk为基准时钟,REST为复位键,Q为输出信号。
图4-13正弦波的结构框图
31
信号发生器的FPGA实现毕业设计
4.2.7 自定义波形产生模块
(1)利用VHDL语言编程产生一个自定义波形,利用PK可以进行调节频率,自定义的波形值是前128个的值从1开始依次递增128,然后后128值为0,通过输出就产生一个自定义波形。 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ZIDINGYI IS--自定义波形的实体 PORT (CLK: IN STD_LOGIC;--基准时钟
REST: IN STD_LOGIC;--信号复位
PK : IN STD_LOGIC_VECTOR(9 DOWNTO 0);--频率调节 Q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));--信号输出
END ENTITY ZIDINGYI;
ARCHITECTURE HAVE OF ZIDINGYI IS--自定义波形的结构体 SIGNAL A:STD_LOGIC;
SIGNAL B:STD_LOGIC_VECTOR(9 DOWNTO 0); SIGNAL C:STD_LOGIC_VECTOR(9 DOWNTO 0); BEGIN
PROCESS(CLK,REST)--确定前后128个时钟的进程 VARIABLE TEM: STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
IF REST='0' THEN A<='0';
ELSIF CLK'EVENT AND CLK='1' THEN B<=B+1;
IF B=PK THEN --判断B是否等于调频系数PK B<=\"0000000000\";
IF TEM=\"11111111\" THEN--判断TEM是否等于255 TEM:=\"00000000\"; ELSE
32
信号发生器的FPGA实现毕业设计
TEM:=TEM+1; END IF;
IF TEM<=\"10000000\" THEN--判断是否等于128 A<='1'; ELSE A<='0'; END IF; END IF; END IF; END PROCESS;
PROCESS(CLK,A) --信号输出进程
VARIABLE TEW: STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN
IF CLK'EVENT AND CLK='1' THEN
C<=C+1;
IF C=PK THEN--判断C是否等于调频系数PK C<=\"0000000000\"; IF A='1' THEN
IF TEW=\"10000000\" THEN
TEW:=\"00000000\";
ELSE
TEW:=TEW+1;
END IF;
ELSE
TEW:=\"00000000\"; END IF;
END IF; END IF;
Q<=TEW; END PROCESS; END;
33
信号发生器的FPGA实现毕业设计
(2)自定义波形的电路图
通过选择Quartus II软件中的Tools下的Netlist Viewers命令中的RTL,可以看到文件综合之后生成的应用RTL电路图观察图。自定义波形的RTL图如图4-14所示。
图4-14 自定义波形的RTL图
(3)自定义波形的结构框图
自定义波形的结构框图如图4-15所示,PK为频率的控制键,CLk为基准时钟,REST为复位键,Q为输出信号。
图4-15 自定义波形的结构框图
34
信号发生器的FPGA实现毕业设计
4.2.8 波形选择器产生模块
(1)利用VHDL语言编程产生一个波形选择器,通过CASE语句来选择递增斜坡、递减斜坡、三角波、正弦波、方波、阶梯波、自定义波形。 LIBRARY IEEE;--选择器
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY XUANZEQI IS--选择器的实体
PORT ( SEL: IN STD_LOGIC_VECTOR(2 DOWNTO 0);--选择输入端口
D1,D2,D3,D4,D5,D6,D7:IN STD_LOGIC_VECTOR(7 DOWNTO 0);--波形输入端口 Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));--选择波形输出端口
END;
ARCHITECTURE HAVE OF XUANZEQI IS--选择器的结构体 BEGIN
PROCESS(SEL)--选择进程 BEGIN CASE SEL IS
WHEN \"001\"=>Q<=D1;--递增斜坡 WHEN \"010\"=>Q<=D2;--递减斜坡 WHEN \"011\"=>Q<=D3;--三角波 WHEN \"100\"=>Q<=D4;--正弦波 WHEN \"101\"=>Q<=D5;--方波 WHEN \"110\"=>Q<=D6;--阶梯波 WHEN \"111\"=>Q<=D7;--自定义 WHEN OTHERS=>NULL; END CASE; END PROCESS; END;
(2)波形选择器的电路图
通过选择Quartus II软件中的Tools下的Netlist Viewers命令中的RTL,可以看到文件综合之后生成的应用RTL电路图观察图。波形选择器的RTL图如图4-16所示。
35
信号发生器的FPGA实现毕业设计
图4-16波形选择器的RTL图
(3)波形选择器的结构框图
波形选择器的结构框图如图4-17所示,SEL为波形选择输入,D1-D7为波形的输入端口,Q为选择波形的输出端口。
图4-17 波形选择器的结构框图
36
信号发生器的FPGA实现毕业设计
4.2.9 频率调节器产生模块
(1)利用VHDL语言编程产生一个频率调节器,通过CASE语句来选择1KHz-10KHz、步进为1KHz的频率。 LIBRARY IEEE; --频率控制 USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY TIAOPIN IS--频率调节器的实体 PORT(CLK :IN STD_LOGIC;--基准时钟输入 REST :IN STD_LOGIC;--信号复位
SELEC :IN STD_LOGIC_VECTOR(3 DOWNTO 0);--选择按键 PK :OUT STD_LOGIC_VECTOR(9 DOWNTO 0) );--分频输出 END ENTITY TIAOPIN;
ARCHITECTURE HAVE OF TIAOPIN IS
SIGNAL A: STD_LOGIC_VECTOR(9 DOWNTO 0); BEGIN
PROCESS(CLK,SELEC) BEGIN
IF (CLK'EVENT AND CLK='1') THEN CASE SELEC IS
WHEN \"0001\" => A<=\"0110000111\";--391分频,产生1KHz的频率 WHEN \"0010\" => A<=\"0011000011\";--195分频,产生2KHz的频率 WHEN \"0011\" => A<=\"0010000001\";--129分频,产生3KHz的频率 WHEN \"0100\" => A<=\"0001100010\";--95 分频,产生4KHz的频率 WHEN \"0101\" => A<=\"0001001110\";--78 分频,产生5KHz的频率 WHEN \"0110\" => A<=\"0001000001\";--65 分频,产生6KHz的频率 WHEN \"0111\" => A<=\"0000111000\";--56 分频,产生7KHz的频率 WHEN \"1000\" => A<=\"0000110001\";--49 分频,产生8KHz的频率 WHEN \"1001\" => A<=\"0000101011\";--43 分频,产生9KHz的频率 WHEN \"1010\" => A<=\"0000100111\";--39 分频,产生10KHz的频率 WHEN OTHERS => A<=\"0000000000\"; END CASE;
37
信号发生器的FPGA实现毕业设计
END IF; PK<=A; END PROCESS;
END ARCHITECTURE HAVE; (2)频率调节器的电路图
通过选择Quartus II软件中的Tools下的Netlist Viewers命令中的RTL,可以看到文件综合之后生成的应用RTL电路图观察图。频率调节器的RTL图如图4-18所示。
图4-18频率调节器的RTL图
(3)频率选择器的结构框图
频率选择器的结构框图如图4-19所示,SELEC为频率选择输入,CLK为基准时钟信号,REST为复位信号,PK为频率调节的输出端口。
图4-19频率选择器的结构框图
38
信号发生器的FPGA实现毕业设计
4.2.10 主控制器产生模块
(1)利用VHDL语言编程产生一个主控制器,通过调用语句来调用各种波形,然后通过例化语句来把各个模块连接起来形成一个主控制模块。 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ZHUKONGZHI IS--主控制器的实体 PORT( CLK
:IN STD_LOGIC;--基准时钟
REST :IN STD_LOGIC;--信号复位
SELCON :IN STD_LOGIC_VECTOR(2 DOWNTO 0);--波形的选择 SELCON1 :IN STD_LOGIC_VECTOR(3 DOWNTO 0);--频率的调节 CNT
:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --信号的输出
END ENTITY;
ARCHITECTURE ONE OF ZHUKONGZHI IS--主控制器的结构体 SIGNAL WAVE1:STD_LOGIC_VECTOR(7 DOWNTO 0);--模块连接的节点 SIGNAL WAVE2:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL WAVE3:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL WAVE4:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL WAVE5:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL WAVE6:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL WAVE7:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL PLKZ :STD_LOGIC_VECTOR(9 DOWNTO 0); COMPONENT DZXP--调用递增斜坡模块 PORT( CLK : IN STD_LOGIC;
REST: IN STD_LOGIC;
PK : IN STD_LOGIC_VECTOR(9 DOWNTO 0);--频率调节 Q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END COMPONENT;
COMPONENT DJXP--调用递减斜坡模块 PORT( CLK: IN STD_LOGIC;
REST: IN STD_LOGIC;
39
信号发生器的FPGA实现毕业设计
PK : IN STD_LOGIC_VECTOR(9 DOWNTO 0);--频率调节 Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END COMPONENT;
COMPONENT SJB--调用三角波模块 PORT( CLK: IN STD_LOGIC;
REST: IN STD_LOGIC;
PK : IN STD_LOGIC_VECTOR(9 DOWNTO 0);--频率调节 Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END COMPONENT;
COMPONENT JTB--调用阶梯波模块 PORT( CLK: IN STD_LOGIC;
REST: IN STD_LOGIC;
PK : IN STD_LOGIC_VECTOR(9 DOWNTO 0);--频率调节 Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END COMPONENT;
COMPONENT FB--调用方波模块 PORT( CLK: IN STD_LOGIC;
REST: IN STD_LOGIC;
PK : IN STD_LOGIC_VECTOR(9 DOWNTO 0);--频率调节 Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END COMPONENT;
COMPONENT ZXB--调用正弦波模块 PORT( CLK: IN STD_LOGIC;
REST: IN STD_LOGIC;
PK : IN STD_LOGIC_VECTOR(9 DOWNTO 0);--频率调节 Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END COMPONENT;
COMPONENT ZIDINGYI--调用自定义波形模块 PORT( CLK: IN STD_LOGIC;
REST: IN STD_LOGIC;
PK : IN STD_LOGIC_VECTOR(9 DOWNTO 0);--频率调节 Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
40
信号发生器的FPGA实现毕业设计
END COMPONENT;
COMPONENT XUANZEQI--调用选择器模块
PORT( SEL: IN STD_LOGIC_VECTOR(2 DOWNTO 0);
D1,D2,D3,D4,D5,D6,D7:IN STD_LOGIC_VECTOR(7 DOWNTO 0); Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END COMPONENT;
COMPONENT TIAOPIN --调用频率调节模块 PORT( CLK :IN STD_LOGIC; REST :IN STD_LOGIC;
SELEC :IN STD_LOGIC_VECTOR(3 DOWNTO 0);--选择按键 PK :OUT STD_LOGIC_VECTOR(9 DOWNTO 0) );--分频输出 END COMPONENT; BEGIN--例化语句
U0 : DZXP PORT MAP(CLK=>CLK,REST=>REST,PK=>PLKZ,Q=>WAVE1); U1 : DJXP PORT MAP(CLK=>CLK,REST=>REST,PK=>PLKZ,Q=>WAVE2); U2 : SJB PORT MAP(CLK=>CLK,REST=>REST,PK=>PLKZ,Q=>WAVE3); U3 : ZXB PORT MAP(CLK=>CLK,REST=>REST,PK=>PLKZ,Q=>WAVE4); U4 : FB PORT MAP(CLK=>CLK,REST=>REST,PK=>PLKZ,Q=>WAVE5); U5 : JTB PORT MAP(CLK=>CLK,REST=>REST,PK=>PLKZ,Q=>WAVE6); U6 : ZIDINGYI PORT MAP(CLK=>CLK,REST=>REST,PK=>PLKZ,Q=>WAVE7); U7:TIAOPIN PORT MAP(CLK=>CLK,REST=>REST,SELEC=>SELCON1,PK=>PLKZ); U8:XUANZEQI PORT MAP(SEL=>SELCON,D1=>WAVE1,D2=>WAVE2,D3=>WAVE3,D4=>WAVE4,D5=>WAVE5,D6=WAVE6,D7=>WAVE7,Q=>CNT); END ONE;
(2)主控制器的电路图
通过选择Quartus II软件中的Tools下的Netlist Viewers命令中的RTL,可以看到文件综合之后生成的应用RTL电路图观察图。主控制器的RTL图如图4-20所示
41
信号发生器的FPGA实现毕业设计
图4-20 主控制器的RTL图
(3)主控制器的结构框图
主控制器的结构框图如图4-21所示,SELCON1为频率选择控制输入,SELCON为信号选择按键输入,CLK为基准时钟信号,REST为复位信号,CNT为波形的输出。
图4-21主控制器的结构框图
42
信号发生器的FPGA实现毕业设计
4.3引脚锁定
(1)为了能够对信号发生器进行硬件的测试,需要将其的输入和输出信号锁定在芯片确定的引脚上,然后编译下载。如图4-22是引脚的锁定图,用两个按键来控制REST和CLK;用7个拨码开关来控制频率的调节和波形的选择。
图4-22引脚锁定图
43
信号发生器的FPGA实现毕业设计
(2)本次设计所用到的芯片是Cyclone II系列的EP2C5T144C8芯片,这里的EP2C5表示的是Cyclone II系列及此器件的规模;E表示的是芯片底面具有接地电极层的TQFP封装,C8表示速度级别。如图4-23所示就是芯片图和引脚锁定图
图4-23 芯片及引脚锁定图
44
信号发生器的FPGA实现毕业设计
5.1递增斜坡的仿真结果及分析
第5章信号发生器的仿真
当SELCON的输入是“1”时,选择的是输出递增斜坡波形,递增波形的波形数值从1依次递增到255,再从0依次递增到255。当SELCON1的输入是“1”时,波形的输出频率是1KHz,如图5-1所示。当SELCON1的输入是“10”时,波形的输出频率是10KHz如图5-2所示。
图5-1 递增斜坡1KHz的仿真图
图5-2 递增斜坡10KHz的仿真图
5.2递减斜坡的仿真结果及分析
当SELCON的输入是“2”时,选择的是输出递减斜坡波形,递减波形的波形数值从255依次递减到0。当SELCON1的输入是“2”时,波形的输出频率是2KHz,如图5-3所示。当SELCON1的输入是“9”时,波形的输出频率是9KHz如图5-4所示。
图5-3递减斜坡2KHz的仿真图
45
信号发生器的FPGA实现毕业设计
图5-4递减斜坡9KHz的仿真图
5.3 三角波的仿真结果及分析
当SELCON的输入是“3”时,选择的是输出三角波的波形,三角波的波形数值从1依次递增到128,再从128依次递增到0。当SELCON1的输入是“3”时,波形的输出频率是3KHz,如图5-5所示。当SELCON1的输入是“8”时,波形的输出频率是8KHz如图5-6所示。
图5-5三角波3KHz的仿真图
图5-6三角波8KHz的仿真图
46
信号发生器的FPGA实现毕业设计
5.4正弦波的仿真结果及分析
当SELCON的输入是“4”时,选择的是输出正弦波的波形,正弦波的波形数值从255依次递减到0,再从0依次递增到255。当SELCON1的输入是“4”时,波形的输出频率是4KHz,如图5-7所示。当SELCON1的输入是“7”时,波形的输出频率是7KHz如图5-8所示。
图5-7 正弦波4KHz的仿真图
图5-8 正弦波7KHz的仿真图
5.5方波的仿真结果及分析
当SELCON的输入是“5”时,选择的是输出方波的波形,方波的波形数值前128个为255,后128个为0。当SELCON1的输入是“5”时,波形的输出频率是5KHz,如图5-9所示。当SELCON1的输入是“6”时,波形的输出频率是6KHz如图5-10所示。
图5-9方波5KHz的仿真图
47
信号发生器的FPGA实现毕业设计
图5-10 方波6KHz的仿真图
5.6 阶梯波的仿真结果及分析
当SELCON的输入是“6”时,选择的是输出阶梯波的波形,阶梯波的波形数值为从0依次递增到248。当SELCON1的输入是“10”时,波形的输出频率是10KHz,如图5-11所示。
图5-11阶梯波10KHz的仿真图
5.6 自定义波形的仿真结果及分析
当SELCON的输入是“7”时,选择的是输出自定义的波形,自定义波的波形数值为前128个从1依次递增到128,后128个为0。当SELCON1的输入是“10”时,波形的输出频率是10KHz,如图5-12所示。
图5-12自定义波形10KHz的仿真图
48
信号发生器的FPGA实现毕业设计
结束语
参考文献
[1] 江思敏,VHDL数字电路及系统的设计,北京:机械工业出版社,2006.8 [2] 汪国强,数字系统的VHDL设计,北京:机械工业出版社,2008.10
[3] 易宏、杜志明、吴国辉、赵汝波、韩明,基于FPGA的函数信号发生器设计[J],南
昌航空大学,电气电子教学学报,2009.31(6):36-37
[4] 潘松、黄继业,EDA技术实用教程—VHDL版(第四版),北京:科学出版社,2010 [5] 姜雪松、张海风,可编程逻辑器件和EDA设计技术,北京:机械工业出版社,2006 [6] 申彦春、王欢、梁延贵,基于FPGA的信号发生器的设计[J],唐山学院学报,
2008.21(2):22-23
[7] 柴志勇、基于FPGA的可编程函数信号发生器设计. 西南石油大学,2010
[8]刘端新、胡健、高明远,VHDL语言与FPGA设计,北京:机械工业出版社,2004.4 [9]南利平,通信原理简明教程,北京:清华大学出版社,1999
49
信号发生器的FPGA实现毕业设计
[10]徐建、刘晓好,基于FPGA的信号发生器设计[J],湖北民族学院学报,
2013.31(3):331-332
[11]陈耀和,VHDL语言设计技术,北京:电子工业出版社,2004.3
[12]吴继华、王诚,Altera FPGA/CPLD设计高级篇,北京:人民邮电出版社,2005 [13]黄智伟,FPGA系统设计与实践,北京:电子工业出版社,2005.1 [14]黄仁欣,EDA技术实用教程,北京:清华大学出版社,2006.9
[15]Saul PH, Direct frequency synthesis-a review of techniques and potential, IEEE 15th
International
Conference
on
Radio
Receivers
and
Associated
System
Landom,UK,1900,5-9
[16]Miller Warren. etal. New FPGA architecture challenges CPLDs [J]. Electron Eng.
50
因篇幅问题不能全部显示,请点此查看更多更全内容