函数信号发生的设计
摘 要
本次设计课题为应用VHDL语言及MAX+PLUS II软件提供的原理图输入设计功能,结合电子线路的设计加以完成一个可应用于数字系统开发或实验时做输入脉冲信号或基准脉冲信号用的信号发生器,它具结构紧凑,性能稳定,设计结构灵活,方便进行多功能组合的特点,经济实用,成本低廉。具有产生三种基本波形脉冲信号(正弦波、矩形波和三角波),以及三次(及三次以下)谐波与基波的线性组合脉冲波形输出,且单脉冲输出脉宽及连续脉冲输出频率可调,范围从100HZ到1kHZ,步进为100HZ;幅度可调,从0到5伏,步进为0.1V。 关键词:信号发生器, FPGA, VHDL语言
II
Function of signal design
Abstract
The design issues for the application of VHDL language and the MAX + PLUS II software provides the schematic design features, combined with the design of electronic circuits can be used to complete a number of system development and experiments to do the input pulse signal or the signal reference pulse signals generator, it is a compact structure, stable performance, design a flexible structure to facilitate combination of the characteristics of multi-functional, economical and practical, low cost. Has three basic waveforms generated pulse signal (sine wave, square wave and triangular wave), and three (and three or less) linear combination of harmonic and fundamental pulses output, and single-pulse output pulse width and pulse output frequency can be continuously tone, ranging from 100HZ to 1kHZ, step for the 100HZ; rate adjustable from 0 to 5 V, step to 0.1V.
Key words: signal generator, FPGA, EDA, VHDL language
III
目 录
摘 要 .............................................................................. I Function of signal design ......................................................... II Abstract .......................................................................... II 1绪论 .............................................................................. 1
1.1 选题背景.......................................................................................................................................... 1 1.2 课题研究的意义 .............................................................................................................................. 1 1.3 信号发生器的发展现状 .................................................................................................................. 2 1.4 本文设计模块 .................................................................................................................................. 2 2 EDA简介 ...................................................................................................................................................... 4
2.1 EDA技术发展概况 ........................................................................................................................... 4 2.2 FPGA 简介 ........................................................................................................................................ 4 2.3 VHDL语言简介 ................................................................................................................................. 4 2.4 MAX+PLUS Ⅱ开发软件 ................................................................................................................... 5
2.4.1 MAX+PLUS II简介 .................................................................................................................. 5 2.4.2 软件组成 ............................................................................................................................... 6 2.4.3 设计流程 ............................................................................................................................... 7
3 设计方案..................................................................................................................................................... 8
3.1 总体设计思路 .................................................................................................................................. 8
3.1.1 设计步骤 ............................................................................................................................... 8 3.1.2 设计思想 ............................................................................................................................... 8 3.2 方案论证.......................................................................................................................................... 8
3.2.1 方案一:采用DDS来设计 .................................................................................................. 9 3.2.2 方案二:采用震荡器频率合成设计 ................................................................................... 9 3.2.3 方案三:采用VHDL语言来编程设计 ................................................................................ 9 3.3 方案确定.......................................................................................................................................... 9 4软件设计.................................................................................................................................................... 11
4.1 波形产生模块 ................................................................................................................................ 11
4.1.1 正弦波................................................................................................................................. 11 4.1.2 矩形波................................................................................................................................. 13 4.1.3 三角波................................................................................................................................. 14 4.1.4 基波..................................................................................................................................... 14 4.1.5 谐波的产生 ......................................................................................................................... 14
IV
4.1.6 波形模块图 ......................................................................................................................... 14 4.2 频率控制模块 ................................................................................................................................ 14 4.3 选择波形模块 ................................................................................................................................ 15 4.4 分频器模块 .................................................................................................................................... 16
4.4.1 设计思路 ............................................................................................................................. 16 4.4.2 VHDL实现 ............................................................................................................................ 16 4.4.3 分频值计算 ......................................................................................................................... 17 4.4.4 分频器模块及初步仿真图 ................................................................................................. 17
5 硬件电路设计 ........................................................................................................................................... 18
5.1硬件设计注意事项 ......................................................................................................................... 18 5.2滤波电路......................................................................................................................................... 18 5.3幅度控制电路 ................................................................................................................................. 19 5.4 FPGA器件引脚分配 ....................................................................................................................... 19 5.5 硬件电路实现 ................................................................................................................................ 20 6 调试 .......................................................................................................................................................... 21
6.1设计及仿真调试使用设备 ............................................................................................................. 21 6.2调试方法......................................................................................................................................... 21
6.2.1 硬件调试 ............................................................................................................................. 21 6.2.2 软件调试 ............................................................................................................................. 21 6.2.3 综合调试 ............................................................................................................................. 21 6.3 调试结果........................................................................................................................................ 21
6.3.1 软件仿真结果及分析 ......................................................................................................... 21
7结 论 ......................................................................................................................................................... 26 参 考 文 献 ................................................................................................................................................. 27 附录Ⅰ 矩形波VHDL实现 .......................................................................................................................... 28 附录Ⅱ 三角波VHDL实现 .......................................................................................................................... 29
函数信号发生的设计 1
1绪论
1.1 选题背景
随着我国的经济日益增长,社会对电子产品的需求量也就越来越大,目前,我国的电子产品市场正在迅速的壮大,市场前景广阔。FPGA(Field Programmable Gate Array,现场可编程门阵列)在现代数字电路设计中发挥着越来越重要的作用。 FPGA/CPLD(Complex Programmable Logic Device)
所具有的静态可重复编程和动态在系统重构的特性,使得硬件的功能可以像软件一样通过编程来修改,这样就极大地提高了电子系统设计的灵活性和通用性,缩短了产品的上市时间并降低可电子系统的开发成本,且可以毫不夸张地讲,FPGA/CPLD能完成任何数字器件的功能,从简单的74电路到高性能的CPU。它的影响毫不亚于20世纪70年代单片机的发明和使用。
现在随着电子技术的发展,产品的技术含量越来越高,使得芯片的复杂程度越来越高,人们对数万门乃至数百万门设计的需求也越来越多,特别是专用集成电路(ASIC)设计技术的日趋进步和完善,推动了数字系统设计的迅速发展。仅靠原理图输入方式已不能满足要求,采用硬件描述语言VHDL的设计方式应运而生,解决了传统用电路原理图设计大系统工程时的诸多不便,成为电子电路设计人员的最得力助手。设计工作从行为、功能级开始,并向着设计的高层次发展。这样就出现了第三代EDA系统,其特点是高层次设计的自动化。
第三代EDA系统中除了引入硬件描述语言,还引入了行为综合工具和逻辑综合工具,采用较高的抽象层次进行设计,并按层次式方法进行管理,可大大提高处理复杂设计的能力,缩短设计周期,综合优化工具的采用使芯片的品质如面积、速度和功耗等获得了优化,因而第三代EDA系统迅速得到了推广应用。
目前,最通用的硬件描述语言有VHDL和VerilogHDL两种,现在大多设计者都使用93年版标准的VHDL,并且通过了IEEE认定,成为世界范围内通用的数字系统设计标准。VHDL是一种新兴的程序设计语言,使用VHDL进行设计其性能总是比常规使用CPU或者MCU的程序设计语言在性能上要高好几个数量级。这就是说,在传统上使用软件语言的地方,VHDL语言作为一种新的实现方式会应用得越来越广泛。本课题设计是采用美国Altera公司的FLEX10K10器件,使用的是Altera公司的EDA软件平台Maxplus –II可编程逻辑器件开发软件。基于EDA工具的FPGA/CPLD的开发流程CPLD/FPGA器件的设计一般可分为设计输入、设计实现和编程三个设计步骤。
1.2 课题研究的意义
信号发生器是数字设备运行工作中必不可少的一部分,没有良好的脉冲信号源,最
陕西科技大学毕业设计 2
终就会导致系统不能够正常工作,更不必谈什么实现其它功能了。不论是处于开发还是故障检修阶段,输出标准且性能优秀的信号发生器总是能够带来工作效率的大幅提升,使新产品有一个标准的信号源、损坏的系统得到正确校验,不会被一些故障所蒙蔽。在传统的信号发生器中,大都使用分立元件,而且体积庞大携带不便,且大部分只能输出一种脉冲信号波形。在设计领域,不管采用什么技术生产,生产的产品用在哪里,其产品设计的宗旨都是离不开以下几点:实用性高、成本低、可升级、功能完善可扩展等使用专用的数字电路设计的信号发生器,设备成本高、使用复杂。基于以上考虑,在中小型数字电路的设计和测试中,迫切需要设计一种小型易用成本低廉的信号发生器。此课题的设计以小型经济,集成度高,性能稳定,使用方便为指导,在功能上力求完善实用,同时兼顾商业价值与应用价值。
1.3 信号发生器的发展现状
波形发生器是能够产生大量的标准信号和用户定义信号,并保证高精度、高稳定性、可重复性和易操作性的电子仪器。函数波形发生器具有连续的相位变换、和频率稳定性等优点,不仅可以模拟各种复杂信号,还可对频率、幅值、相移、波形进行动态、及时的控制,并能够与其它仪器进行通讯,组成自动测试系统,因此被广泛用于自动控制系统、振动激励、通讯和仪器仪表领域。在70年代前,信号发生器主要有两类:正弦波和脉冲波,而函数发生器介于两类之间,能够提供正弦波、余弦波、方波、三角波、上弦波等几种常用标准波形,产生其它波形时,需要采用较复杂的电路和机电结合的方法。这个时期的波形发生器多采用模拟电子技术,而且模拟器件构成的电路存在着尺寸大、价格贵、功耗大等缺点,并且要产生较为复杂的信号波形,则电路结构非常复杂。同时,主要表现为两个突出问题,一是通过电位器的调节来实现输出频率的调节,因此很难将频率调到某一固定值;二是脉冲的占空比不可调节。现在随着电子技术的发展,产品的技术含量越来越高,使得芯片的复杂程度越来越高,人们对数万门乃至数百万门设计的需求也越来越多,特别是专用集成电路(ASIC)设计技术的日趋进步和完善,推动了数字系统设计的迅速发展。
1.4 本文设计模块
基于EDA工具的FPGA/CPLD的开发流程CPLD/FPGA器件的设计一般可分为设计输入、设计实现和编程三个设计步骤:
1.设计输入方式主要由文本输入和图形输入两种,可根据需要选择,也可混合输入。EDA工具会自动检查语法;
2.设计实现阶段EDA工具对设计文件进行编译,进行逻辑综合、优化,并针对器件进行映射、布局、布线,产生相应的适配文件;
3.编程阶段EDA软件将适配文件配置到相应的CPLD/FPGA器件中,使其能够实
函数信号发生的设计 3
现预期的功能。
陕西科技大学毕业设计 4
2 EDA简介
2.1 EDA技术发展概况
电子设计自动化(Electornic Design Automation,EDA)技术是以计算机科学和微电子技术发展为先导,汇集了计算机图形学、拓扑逻辑学、微电子工艺与结构学和计算数学等多种计算机应用学科最新成果的先进技术,并具体表现为在先进的计算机工作平台上开发出来的一整套电子系统设计的软件工具。从20世纪60年代中期开始,人们就不断开发出各种计算机辅助工具来帮助设计人员进行集成电路和电子系统的设计,集成电路技术的发展不断对EDA提出新的要求,并促进了EDA技术的发展。
EDA技术是电子设计领域的一场革命,目前正处于高速发展阶段,每年都有新的EDA工具问世。目前EDA技术已在各大公司、企事业单位和科研教学部门广泛使用。例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA技术。
2.2 FPGA 简介
FPGA是英文Field Programmable Gate Array的缩写,即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个新概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。FPGA的基本特点主要有:
(1)采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。 (2)FPGA可做其它全定制或半定制ASIC电路的中试样片。 (3)FPGA内部有丰富的触发器和I/O引脚。
(4)FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小器件之一。 (5)FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。
可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。目前FPGA的品种很多,有XILINX的XC系列、TI公司的TPC系列、ALTERA公司的FIEX系列等。
2.3 VHDL语言简介
VHDL语言的英文全名是Very High Speed Integrated Circuit Hardware Description
函数信号发生的设计 5
Language 即超高速集成电路硬件描述语言。所谓硬件描述语言就是该语言可以描述硬件电路的功能,信号连接关系及定时关系 。VHDL语言在80年代初期出现,现在已被接受为描述、研制和设计电子线路的最重要的标志语言之一。
VHDL语言主要用于电子系统设计的硬件描述、文档描述、综合和模拟等。利用VHDL语言和基于VHDL语言的EDA系统,设计者可采用自顶向下的设计方法,将系统设计的行为描述自动综合门级的结构,并对各种工艺库进行优化。VHDL描述是可执行的,即可以直接运行VHDL模拟器来验证设计的正确性。
VHDL程序包含实体(Entity)、结构体(Architecture)、配置(Configuation)、包集合(Package)、库(Library)5个部分。其中实体是一个VHDL程序的基本单元,由实体说明和结构体两部分组成。实体说明用于描述设计系统的外部接口信号;结构体用于描述系统的行为、系统数据的流程或者系统组织形式;配置用于从库中选取所需单元来组成系统设计的不同规格的不同版本,使被设计系统的功能发生变化;库用于存放已编译的实体、构造体、包集合、配置。库有两种,一种是用户自行生成的IP库,有些集成电路设计中心开发了大量的工程软件,有不少好的设计范例,可以重复引用。另一类是PLD,ASIC芯片制造商提供的库,比如常用的74系列芯片,RAM,ROM控制器,Counter计数器等标准模块。
2.4 MAX+PLUS Ⅱ开发软件
2.4.1 MAX+PLUS II简介
MAX+PLUS II(Multiple Array and Programming Logic User System)开发工具是Altera公司推出的一种EDA工具,具有灵活高效、使用便捷和易学易用等特点。MAX+PLUS II开发系统具有以下特点。
(1)多平台。MAX+PLUS II软件可以在基于PC机的操作系统如Windows 95、Windows 98、Windows 2000、Windows NT下运行,也可以在Sun SPAC station等工作站上运行。
(2)开放的桌面。MAX+PLUS II提供了与其他设计输入、综合和校验工具的接口,接口符合EDIF 200/300、LPM、VHDL、Verilog-HDL等标准。目前MAX+PLUS II所支持的主流第三方EDA工具主要有Synopsys、Viewlogic、Mentor、Graphics、Cadence、OrCAD、Xilinx等公司提供的工具。
(3)模块组合式工具软件。MAX+PLUS II具有一个完整的可编程逻辑设计环境,包括设计输入、设计处理、设计校验和下载编程4个模块,设计者可以按设计流程选择工作模块。
(4)与结构无关。MAX+PLUS II开发系统的核心——Compiler(编译器)能够自动完成逻辑综合和优化,它支持Altera的Classic、MAX 5000、MAX 7000、MAX 8000
陕西科技大学毕业设计 6
和FLEX 10K等可编程器件系列,提供一个与结构无关的PLD开发环境。
(5)支持硬件描述语言。MAX+PLUS II支持各种HDL设计输入语言,包括VHDL、Verilog-HDL和Altera的硬件描述语言AHDL。
(6)丰富的设计库。MAX+PLUS II提供丰富的库单元供设计者调用,其中包括一些基本的逻辑单元、74系列的器件和多种特定功能模块以及参数化的兆功能模块。调用库单元进行设计,可以大大减轻设计人员的工作量,缩短设计周期。 2.4.2 软件组成
MAX+PLUS Ⅱ软件采用模块化结构,包括设计输入、项目处理、项目效验和器件编程4个部分,所有这些部分集成在一个可视化的操作环境下,如下图3-1:
设计输入 图像编辑器文本编辑器 项目处理MAX+PLUS Π 编译器波形编辑器底层图编辑器符号编辑器MAX+PLUS п 信息处理和层次显示 器件编程MAX+PLUS Π编辑器
项目效验MAX+PLUS Π仿真器MAX+PLUS п定时分析器
图2-1 MAX+PLUS Ⅱ软件组成
(1)设计输入
MAX+PLUS Ⅱ的设计输入方法有很多种,主要包括文本设计输入、原理输入、波形设计输入等多种方式。另外,还可以利用第三方EDA工具生成的网表文件输入,该软件可接受的网表有EDIF格式、VHDL格式及Verilog格式。MAX+PLUS Ⅱ是一种层次设计工具,可根据实际情况灵活的使用最适合每一层次的设计方法。
(2)项目处理
设计处理的任务就是对项目进行编译,编译实际就是将设计者编写的设计,改为可以用于生产的“语言”。编译器通过读入设计文件并产生用于编程、仿真和定时分析的输出文件来完成编译工作。MAX+PLUS Ⅱ提供的编译软件,只需简单的操作,如参数选择、指定功能等,就可进行网表转换、逻辑分割和布线布局。
(3)项目效验
函数信号发生的设计 7
MAX+PLUS Ⅱ提供的设计效验过程包括仿真和定时分析,项目编译后,为确保设计无误,要在用专门软件进行仿真。如发现了错误,则应对设计输入进行部分修改直至无误。
(4)器件编程
MAX+PLUS Ⅱ通过编程器将编译器生成的编程文件编程或配置到Altera CPLD器件中,然后加入实际激励信号进行测试,检查是否达到了设计要求。 2.4.3 设计流程
使用MAX+PLUS Ⅱ进行可编程逻辑器件开发主要包括4个阶段:设计输入、编译处理、验证和器件编程,其设计流程图3-2如下:
设计要求设计输入设计修改编译处理验证器件编程器件测试系统产品 图2-2 MAX+PLUS的设计流程
陕西科技大学毕业设计 8
3 设计方案
3.1 总体设计思路
3.1.1 设计步骤
此设计将按模块式实现,据任务书要求,设计总共分四大步份完成:(1)产生波形(三种波形:方波、三角波和矩形波)信号;(2)波形组合;(3)频率控制;(4)幅度控制。 3.1.2 设计思想
利用VHDL编程,依据基本数字电路模块原理进行整合。系统各部分所需工作时钟信号由输入系统时钟信号经分频得到,系统时钟输入端应满足输入脉冲信号的要求。组合波形信号经显示模块输出。具备幅度和频率可调功能,幅度可通过电位器调整,频率控制模块则是一个简易的计数器,控制步径为100HZ的可调频率,最终送至脉冲发生模块输出脉冲信号,达到设计课题所要求的输出波形频率可调及幅度可调功能。幅度可调功能由于比较简单,可以在FPGA外部利用硬件电路实现。总体设计框图如下图3-1所示:
正弦波、方波、三角波信号产生波形组合选择模块 幅度控制/电位器 输出电路 滤波电路 控制电路3.2 方案论证
100HZ~1KHZ 频率控制模块/计数器模块 FPGA 1KHZ 图3-1总体设计框图
函数信号发生的设计 9
3.2.1 方案一:采用DDS来设计
采用DDS(直接数字频率合成器)来设计,设计总体框图如图3-2所示。在设计界里众所周知,DDS器件采用高速数字电路和高速D/A 转换技术,具有频率转换时间短、频率分辨率高、频率稳定度高、输出信号频率和相位可快速程控切换等优点,所以,我们可以利用DDS具有很好的相位控制和幅度控制功能,另外其数据采样功能也是极具精确和完善的,它可以产生较为精确的任何有规则波形信号,可以实现对信号进行全数字式调制。用FPGA和DDS实现信号调制,既克服了传统的方法实现带来的缺点,若采用它来编程设计,必定会事半功倍,且使设计趋于理想状态。但鉴于DDS的占用RAM空间较大,我们设计是采用FPGA10K10器件,总共只有一万门的逻辑门数量,而整个DDS设计下来,大概最少会占用3-4万门的数量,所以在性价比方面不合理,这样也使得我们的设计会有些不切实际。
频率控制字 信号输出
相位累加器 ROM D/A变换 低通滤波 时钟 图3-2 DDS与FPGA总体设计图
3.2.2 方案二:采用震荡器频率合成设计
采用震荡器频率合成方案。具体方案如下:首先通过频率合成技术产生所需要频率的方波,通过积分电路就可以得到同频率的三角波,再经过滤波器就可以得到正弦波。其优点是工作频率可望做得很高,也可以达到很高的频率分辨率;缺点是使用的滤波器要求通带可变,实现很难,高低频率比不可能做得很高。 3.2.3 方案三:采用VHDL语言来编程设计
采用VHDL语言来编程,然后下载文件到FPGA来实现。VHDL语言是电子设计领域的主流硬件描述语言,具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,从而大大降低了硬件设计任务,提高了设计效率和可靠性,要比模拟电路快得多。该方案是利用FPGA具有的静态可重复编程和动态在系统重构的特性,使得硬件的功能可以像软件一样通过编程来修改,极大地提高了电子系统设计的灵活性和通用性,而且大大缩短了系统的开发周期。
3.3 方案确定
由上述三个方案方案确定对比,采用第三种方案:
陕西科技大学毕业设计 10
通过FPGA软件扫描方式将波形数据读出传输给DAC0832产生波形输出。这种方法在软、硬件电路设计上都简单,且与我们的设计思路紧密结合。
由于幅度控制部分在设计需要用到数字电子,这样有要经过D/A转换器再输出,必将占用大量资源,造成不必要的开销。鉴于有设计经验的同学和老师的建议,采用一个电位器代替,虽然精确度不够,但是也弥补了性价比方面的不足。
波形组合如果采用分开式模块实现,也必将导致占用大量的资源,而且模块设计复杂度提高,只要采用重复调用一个模块的设计方法,既可以降低资源的占用率,也使得设计更加灵活且有针对性。此信号发生器的特点及功能集成度高,因采取整体模块式设计,在此也考虑到实际应用中,万一FPGA的逻辑门数量不够,特准备了一套备用方案。
备用方案:将波形数据存放在6116RAM中,6116的存储容量大,且可重复使用,虽用单片机在速度方面远不及FPGA,但是这样是在出现上述状况后的最佳补偿方式。
综合以上涉及方面的分析,因此本次课题采用采用VHDL语言来编程进行设计。
函数信号发生的设计 11
4软件设计
4.1 波形产生模块
本设计用VHDL语言根据傅立叶函数采集点进行扫描,分别产生正弦波、三角波和矩形波。以下介绍各种常用周期信号的傅立叶函数展开式。 4.1.1 正弦波
1设计思想
正弦波发生分为两个步骤,即正弦波幅值采样存储和正弦波波形的还原输出。幅值采样是将一个周期正弦波进行64等分,如图4-1所示,将64个采样点进行量化处理,量化值=255*sin360/64(V),将64点量化值存入存储器。正弦波形的产生是通过循环反复将存储器中的64点采样值通过DAC0832进行还原输出,得到幅值正比于64点采样值的正弦波。
f(t) f(t) At t 0.5T0 -A T
T 图4-1 正弦波采样图 图4-2 方波采样图
2 VHDL实现
1)正弦信号波形数据文件建立
正弦波波形数据由64个点构成,此数据经DAC0832,可在示波器上观察到正弦波形。源程序如下程序[1]所示: [程序1]
WIDTH=8; ------表示数据输出位宽是8 DEPTH=64; ----表示共有64个8位数据点 ADDRESS_RADIX=HEX; -----表示地址信号用十六进制数表示
DATA_RADIX=DEC; -----表示输出数据是十进制数
陕西科技大学毕业设计 12
CONTENT BEGIN
00:255;01:254;02:252;03:249;04:245;05:239;06:233;07:225; 08:217;09:207;0A:197;0B:186;0C:174;0D:162;0E:150;0F:137; 10:124;11:112;12: 99;13: 87;14: 75;15: 64;16: 53;17: 43; 18: 34;19: 26;1A: 19;1B: 13;1C: 8;1D: 4;1E: 1;1F: 0; 20: 0;21: 1;22: 4;23: 8;24: 13;25: 19;26: 26;27: 34; 28: 43;29: 53;2A: 64;2B: 75;2C: 87;2D: 99;2E:112;2F:124; 30:137;31:150;32:162;33:174;34:186;35:197;36:207;37:217; 38:225;39:233;3A:239;3B:245;3C:249;3D:252;3E:254;3F:255; END;
2) 定制ROM源程序如下所示: SINDATA.VHD: LIBRARY ieee;
USE ieee.std_logic_1164.all; entity sindata is
port(address:in std_logic_vector(5 downto 0); inclock:in std_logic;
q:out std_logic_vector(7 downto 0); end sindata;
architecture syn of sindata is
signal sub_wire0 :std_logic_vector(7 downto 0); component 1pm_rom generic(1pm_width :natural; 1pm_widthid :natural; 1pm_address_control:string; 1pm_outdata:string; 1pm_file:string);
port(address:in std_logic_vector(5 downto 0); inclock:in std_logic;
q:out std_logic_v ector(7 downto 0)); end component; begin
q<=sub_wire0(7 downto 0); 1pm_rom_component:1pm_rom
generic map(lpm_width=>8,lpm_widthad=>6,
函数信号发生的设计 13
lpm_address_comtrol=>\"registered\lpm_file=>\"D:/SIN_G/DATA/sin_data.mif\")
port map(address=>address,inclock=>inclock,q=>sub_wire0); end syn;
3) 正弦波信号发生器顶层设计源程序: library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigend.all; entity signt is port(clk:in std_logic;
dout:out std_logic_vector(7 downto 0)); end
architecture dacc of singt is component sindata
port(address:in std_logic_vector(5 downto 0); inclock:in std_logic;
q:out std_logic_vector(7 downto 0)); end conponent;
signal q1:std_logic_vector(5 downto 0); begin process(clk) begin
if clk'event and clk='1'then q1<=q1+1; end if end process;
u1:sindata port map(address=>q1,q=>dout;in clock=>clk); end; 4.1.2 矩形波
1设计思路
矩形波的实现较之正弦波发生简单,由于矩形波是两个电平值间的交替变换,因此波形采样值的预存只要有两个不同的数值就行了,为了使矩形波发生的频率灵活可调,采用60个采样值扫描输出来实现,每半个矩形波周期采用三十个采样值,循环反复将存储器中的60点采样值通过DAC0832进行还原输出,得到幅值正比于点采样值的矩形波。采样图如图4-2所示:
陕西科技大学毕业设计 14
2 VHDL实现 见附录Ⅰ 4.1.3 三角波
1设计思路
由于三角波是线性的,比较简单就可以产生,如果最低电压设为15V,最高是255V,那么根据它的公式255/15=17,每个点的电压只要依次加17就可以得到,一个波形所以采用简单的加减算法就可实现,如图4-3所示三角波的采样图:
f(t) A t T -A
图4-3 三角波采样图
2 VHDL实现 见附录Ⅱ 4.1.4 基波
通过VHDL编程产生的正弦波、方波、三角波三种周期性波形即为基波。 4.1.5 谐波的产生
采用与基波产生的同样原理,编程产生三种波形的谐波,所不同的是一个波形的周期采样的点数不同,如果基波采样点为63个,谐波采样点数则为21个,其每点的电压值为255*(sin360/60+sin360/20)(V),在对其进行循环扫描即可实现基波与谐波的线性叠加。 4.1.6 波形模块图
最终波形的设计模块图如图4-4所示,L1是三角波,L2是方波,L3是正弦波,
L4是谐波。
4.2 频率控制模块
本课题要求频率控制是在100HZ-1KHZ,步进为100HZ。在本题设计中只需借助FPGA便可完成。根据用户需要的频率,通过编程把频率控制数值传送给各个模块,从而实现频率的控制。如下图4-5所示:
函数信号发生的设计 15
4.3 选择波形模块
这一部分主要是通过一个按键对波形进行循环选择,按下确认按钮后进行波形的调用。设计流程图如下图4-6所示:
图4-4波形模块图
图4-5 频率控制模块流程图
陕西科技大学毕业设计 16
图4-6 选择波形电路设计流程图
4.4 分频器模块
4.4.1 设计思路
分频器模块将输入的高频脉冲降频得到各模块所需的低频脉冲,分频器模块利用计数器的原理进行设计,通过对预设的分频值进行比较计数,实现输入高频时钟脉冲的分频输出功能。本次课题的设计方案中使用了十组分频器,其设计原理完全相同,将对应的频率用8421BCD码对其进行编程赋值,如100HZ则对应的二进制数是“0000”,200HZ则是“0001”„1KHZ则是“1010”。现选取其中的500分频分频器进行简单说明。
具体程序见附录Ⅲ 4.4.2 VHDL实现
PROCESS(CLK_IN) BEGIN
IF(CLK_IN'EVENT AND CLK_IN='0') THEN
IF Step<249 THEN ――分频值
函数信号发生的设计 17
Step<=Step+1; Step<=0;
――循环累加
――计数满,输出翻转
ELSE
CLK_OUT<=NOT CLK_OUT;
END IF;
END IF;
END PROCESS;
4.4.3 分频值计算
分频值=(输出时钟脉冲周期/输入时钟脉冲周期)/2-1
输入时钟脉冲频率=1KHz,周期=1ms;输出时钟脉冲频率=2Hz,周期=500ms 分频值=(500ms/1ms)/2-1=249 4.4.4 分频器模块及初步仿真图
分频器模块及初步仿真图如图4-7所示:
图4-7分频
陕西科技大学毕业设计 18
5 硬件电路设计
5.1硬件设计注意事项
此次设计利用EDA试验箱实现硬件功能,试验箱设计可靠,干扰小,能使系统在良好的环境中正常工作。但是实际制作硬件电路时,就应考虑到干扰所带来的负面影响。为了避免干扰信号影响系统正常工作,未分配功能的FPGA引脚必须接地,在FPGA器件的电源端必须并连一0.01uF的退耦电容,在所有的输入引脚上串联100欧姆左右电阻减弱干扰信号影响,如有必要还应在输入端设置上拉或下拉电阻。
5.2滤波电路
如图5-1所示,设计D/A输出后,通过滤波电路、输出缓冲电路,使信号平滑且具有负载能力。
正弦波的输出频率小于262kHz,为保证262kHz 频带内输出幅度平坦,又要尽可能抑制谐波和高频噪声,综合考虑取
R1=1k,R2=1k,C1=100pF,C=100pF
运放选用宽带运放LF351,用 Electronics Workbench 分析表明:截止频率约为1MHz,262KHz 以内幅度平坦。
为保证稳幅输出,选用AD817,这是一种低功耗、高速、宽带运算放大器 , 具有很强的大电流驱动能力。实际电路测量结果表明:当负载100Ω、输出电压峰-峰值1OV时,带宽大于500kHz,幅度变化小于土1%。
图5-1 滤波电路
函数信号发生的设计 19
5.3幅度控制电路
幅度控制电路采用初定方案来设计,即用一个电位器来控制波形的输出幅度。电位器的型号为10K 欧。
5.4 FPGA器件引脚分配
为了方便硬件设计,降低硬件设计的复杂度,对FPGA的输入输出引脚进行分配,将关联的引脚集中排布,将同一组内的引脚按顺序排布,将需要输入高频时钟脉冲的端口安排在时钟输入端,以提高其信号接收能力。分配如下:
CLKUSR CS0 CS1
PIN62。 PIN67。 PIN68 PIN76.
PIN31、33、73、75。 PIN1 PIN9 PIN4 PIN64 PIN3 PIN23 PIN70 PIN69 PIN46 PIN45 PIN66 PIN2 PIN44 PIN20 PIN21
BEV_CLK IN D0 TD0 TD1 CE0 CE1
BEV_OE PIN72
CONFIG RS WS TMS TRST TCK DCLK MSEL0 MSEL1
CONF_DONE PIN65
STATUS
INIT_DONE PIN58 RDY_BUSY PIN59 DEV_OE DEV_CLR
PIN72
PIN77
陕西科技大学毕业设计 20
5.5 硬件电路实现
此次设计硬件部分通过FPGA/CPLD实验箱完成,如今后需制作单独的硬件电路,亦可以依照实验箱各部分结构进行设计。
函数信号发生的设计 21
6 调试
6.1设计及仿真调试使用设备
示波器,万用表,FPGA实验箱(或自制电路板),PC机各一台。
6.2调试方法
根据方案设计的要求,调试过程共分三大部分:硬件调试、软件调试和综合调试。电路用FPGA/CPLD实验箱按模块调试,各模块逐个调试通过后再进行综合调试。 6.2.1 硬件调试
(1)在做控制电路的调试时,分析输入输出,可以发现时序与仿真结果是否有出入,便于找出硬件电路中的故障。再调试D/A转换是否正常。
(2)为提 高电路抗干扰性能,我们采取了一些抗干扰措施。如接线线尽量短,减少交叉,每个芯片的电源与地之间都接有去扰电容,数字地与模拟地分开。实践证明,这些措施对消除某些引脚上的 “毛刺 ” 及高频噪声起到了很好的效果。
(3) 运算放大器的选择 由于输出频率达到上千赫兹,因此对放大器的带宽有一定要求。所以,在调试滤波电路和缓冲输出电路时,都选择了高速宽带运放。 6.2.2 软件调试
本系统的软件功能强大,运用VHDL语言来编写,先在MAX+PLUS II对所编的模块一一进行仿真,排除了语法的错误编写和设计逻辑思维的错误,当仿真完确认程序没问题时,再直接下载到FPGA芯片,用FPGA实验箱进行调试。采取的就是自底向上的调试方法,即先单独调试好每一个模块,然后再连接成一个完整的系统再调试。 6.2.3 综合调试
FPGA系统的软硬件设计是紧密相连的,将软件编译综合并且通过下载对FPGA进行适配,运行中的FPGA是由其内部的硬件结构控制读出数据,从而产生波形。因此,如果在软硬件都基本调通的情况下,系统的软硬件综合调试难度不是很大。
6.3 调试结果
6.3.1 软件仿真结果及分析
1.分频
(1)仿真波形图如图6-1所示:
陕西科技大学毕业设计 22
图6-1分频仿真波形图
CLKIN:基准时钟输入; CLKOUT:分频时钟输出; MOVIN:处始置入值; (2)仿真结果分析
CLK_IN为输入高频时钟脉冲,CLKOUT为分频输出的低频时钟脉冲。此分频器输入为1KHz,输出为100Hz,为10分频分频器,如图6-1所示。
2.信号波形产生 (1)正弦波
仿真波形图如图6-2所示:
图6-2正弦波仿真波形图
FRCT:相位控制端; CLK:时钟输入; SINOUT:正弦波输出; VSIN:正弦波地址寄存器; (2)方波
仿真波形图如图6-3所示:
图6-3方波仿真波形图
函数信号发生的设计 23
CLK:时钟输入; FRCT:相位控制端; SQUOUT:方波输出; (3)三角波
仿真波形图如图6-4所示:
图6-4三角波仿真波形图
CLK:时钟输入; FRCT:相位控制端; TRIOUT:三角波输出; (4)任意波形的地址 仿真波形图如图6-5所示:
图6-5任意波形仿真波形图
FRCT:相位控制端; CLK:时钟输入; ADDOUT:地址输出; (5)波形选择
仿真波形图如图6-6所示:
陕西科技大学毕业设计 24
图6-6波形选择
RI:RAM的读数控制端;
SELIN:波形选择输入端(0:正弦波;1:三角波;2:方波;3:任意波地址;4:三角波和正弦波的叠加;5:方波和正弦波的叠加;6:方波和三角波的叠加;7:三种波形的叠加)
ADDIN:地址输入端; SININ:正弦波输入端; TRIIN:三角波输入端; SQUIN:方波输入端; QADD:地址输出端; Q:波形选择输出端; (6)仿真结果分析
经过仿真,从各个仿真图上看得,基本上可以实现预期的波形产生功能。
6.3.2 综合调试结果
1.基波的输出波形如图6-7所示:
(1)方波 (2)正弦波 (3)三角波
图6-7 基波输出波形图
2.谐波与基波叠加的输出波形
(1)正弦与其三次谐波的叠加,如图6-8与图6-9所示:
f2(t) f1(t) 4A/ O t 4A1(sintsin3t) 3 f2(t) A O t 图6-8 正弦波 图6-9正弦与其三次谐波的叠加
函数信号发生的设计 25
(2)我们观察到图6-10D的波形,它也混有二次谐波,但这二次谐波带有一定的相移(图6-10C)。同样地,当观察到图6-11B的波形,我们就知道它除了基波以外混有三次谐波(见图6-11A)。图6-11D的波形也混有三次谐波,并带有一定相移(图11C)。
(A) (B) (C) (D)
图6-10 基波与二次谐波叠加
(A) (B) (C) (D)
图6-11 基波与三次谐波的叠加图
3.综合调试数据
(1)输出波形频率范围测试测试数据如下表6-1所示 :
表6-1输出波形频率范围
单位:HZ
预置频率 100 500 800 1K
输出频率 正弦波 100.03 500.06 800.5 1 000.2 方波 100.03 500.06 800.5 1 000.2 三角波 100.03 500.06 800.5 1 000.2 负载电阻 (欧姆) 100 100 100 100 (2) 输出波形幅度范围测试,在频率为100HZ-1KHZ测得的输出幅度数据范围可以达到0-5V的要求。
陕西科技大学毕业设计 26
7结 论
通过此次设计,让我深深的感觉到自己所学知识真是非常的浅薄。面对电子技术日新月异的发展,利用EDA手段进行设计已成为不可阻挡的趋势。相对于传统至底向上的设计方式,自上而下的设计具有其显著的优越性。利用EDA设计软件辅助设计,方便快捷,减少了错误率的产生,缩短了产品的设计及上市周期,既减轻了设计工作量又满足了商业利益的需求。
该系统以FPGA10K10器件为核心部件,可利用软件编程实现了对D/A转换信号的处理。努力做到了线路简单、高性价比的特点,充分利用了软件编程,弥补了硬件元器件的不足。
在设计过程当中,遇到了软件操作不熟练,程序编写不规范等诸多问题,通过对问题的总结分析得出,应用软件的主要功能必须熟练操作,才能提高工作效率,需要规范操作的地方必须严格按照使用说明操作,避免由于软件使用不当造成的错误产生。程序的编写格式必须规范,模块、端口以及信号变量的命名应当反映实际意义,缩进格式工整明了,方便阅读理解,这样有利于程序的编写,有利于分析调试,也有利于程序的重复使用。
此次课题的设计已告一段落,在这次毕业设计过程中需要用一些不曾学过的东西时,就要去有针对性地查找资料,然后加以吸收利用,以提高自己的应用能力,而且还能增长自己见识,补充最新的专业知识,学会了一些编程方面的常用算法。作为一名电子专业的毕业生,我将会继续在新技术的道路上不断钻研、开拓进取。相信通过此次设计的锻炼,我对专业知识和技能的掌握将更加牢靠,在今后的工作和学习中,必将使我受益匪浅,取得应有的成果。
函数信号发生的设计 27
参 考 文 献
[1] 杨刚,周群.电子系统设计与实现[M].北京:电子工业出版社,2008:1-35.
[2] 刘丽华,辛德禄,李本俊.专用集成电路设计方法[M].北京:北京邮电大学出版社,2000:1-10.
[3] 张亦华,延明,肖冰.数字逻辑设计实验技术工具[M].北京:北京邮电大学出版社,2003:25-33.
[4] 康华光.电子技术基础(模拟部分)[M].北京:高等教育出版社,2006.
[5] Stephen G Kochan. programming in ANSIC. Hagden Books Indianapolis:Indiana,U.S.A,1994.
[6] 邱关源,罗先觉主编.电路(第五版)[M].北京:高等教育出版社,2006. [7] 陈希有主编.电路理论基础(第三版)[M].北京:高等教育出版社,2004.
[8] FAIR CHILD Semi-Conductor.LM7805 3-Terminal 1A Positive Voltage Regulator data sheet.2005.
陕西科技大学毕业设计 28
附录Ⅰ 矩形波VHDL实现
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity fangbo is port(reset:in std_logic; clk: in std_logic;
cnt:buffer std_logic_vector(7 downto 0)); end entity;
architecture one of fangbo is begin process(clk)
variable count:integer range 0 to 500; begin
if reset='0' then count:=0; elsif rising_edge(clk) then if count=500 then cnt<=\"00000000\"; count:=0; elsif
count=255 then cnt<=\"11111111\"; count:=count+1; else count:=count+1; end if; end if; end process; end one;
函数信号发生的设计 29
附录Ⅱ 三角波VHDL实现
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity sanjiaobo is port(reset:in std_logic; clk: in std_logic;
cnt:buffer std_logic_vector(7 downto 0)); end entity;
architecture one of sanjiaobo is begin process(clk)
variable up:integer range 0 to 1; begin
if reset='0' then cnt<=\"00000000\"; elsif rising_edge(clk) then if up=1 then
if cnt=\"11111111\" then up:=0;
cnt<=\"11111110\"; else cnt<=cnt+1; end if; else
if cnt=\"00000000\"then up:=1;
cnt<=\"00000001\"; else cnt<=cnt-1; end if; end if; end if; end process; end one;
因篇幅问题不能全部显示,请点此查看更多更全内容