资源描述
毕 业 设 计(论 文) 设计(论文)题目: 基于FPGA的任意信号发生器的设计 学生姓名: 指导教师: 二级学院: 龙蟠学院 专业: 电子信息工程 班级: M07电子信息工程1班 学号: 提交日期: 2011 年 05月15日 答辩日期:2011年 05月22日 金陵科技学院学士学位论文 目录目 录摘 要IIIAbstractI1 绪 论12 EDA、VHDL简介22.1 EDA技术22.2 硬件描述语言VHDL33 PLD、Quartus II简介63.1可编程逻辑器件PLD63.2 Quartus II基本使用方法64 数字系统设计84.1 数字系统的设计模型84.2 数字系统的设计方法85 任意信号发生器的简单设计过程105.1 系统需求分析105.2任意信号发生器的工作原理105.3 各组成模块及程序106 直接数字频率合成器206.1 直接数字合成器简介206.2系统设计需求206.3 系统设计方案206.4主要设计模块及程序216.5 正弦信号的VHDL程序实现307 系统仿真337.1 任意信号发生器的简单设计仿真337.2 直接数字频率合成器仿真378 基于FPGA的硬件测试388.1 KHF-1型FPGA实验开发系统388.2 硬件测试39结束语40参考文献41致谢4242金陵科技学院学士学位论文 摘要基于FPGA的任意信号发生器的设计摘 要关于信号发生器,传统的设计方法多基于模拟电路或单片机或专用芯片,由于成本高或控制方式不灵活或波形种类少不能满足实际需求。本课题充分利用了现场可编程门阵列 FPGA和VHDL语言的结合进行任意信号发生器的设计,从而易于修改和改进。用Quartus II对FPGA芯片“下载”形成专用集成电路,由于不存在人工接线的问题,所以故障率低、可靠性好。系统按模块化方式进行设计,然后进行编译、时序仿真和硬件测试等。此设计采用了两种方法,一种是简单的设计方法,任意信号发生器由两大模块组成,即函数发生电路和函数选择电路。本论文还简单介绍基于DDS技术的任意信号发生器的设计,它能高精度地产生多种基本波形,如正弦波等。关键词: VHDL;FPGA;Quartus II;EDA;DDS金陵科技学院学士学位论文 摘要FPGA-based Control System for Any signal generator designAbstractAbout the signal generator, the traditional design method is based on the small and medium-scale integrated circuits,with a lot of circuit elements,complex wiring,high failure rate,and low reliability.This topic has used scene programmable gate array FPGA and the VHDL language fully carried on the automobile taillight control systems design, making it easy to modify and improve.With Quartus II “downloading” FPGA chip,it forms the specific integrated circuit.It does not have artificial connection,therefore the failure rate is low and the reliability is good. This design uses two methods, one is simple method, Any signal generator is composed by two big modules . That is, a function generator and function select circuit. This paper alse introduces the design idea of function generator with multiple signals based on DDS technologyIt can export four basic waveforms of higher precision such as sine wave and so on.Keywords: VHDL; The FPGA; Quartus II; EDA;DDS金陵科技学院学士学位论文 1 绪论 1绪 论波形发生器是各种测试和实验中不可或缺的工具,在通信、测量、雷达、控制、教学领域应用十分广泛。不论是在生产、科研还是教学上,波形发生器都是电子工程师进行信号仿真试验的最佳工具。随着我国经济和科技的发展,对相应的测试仪器和测试手段提出了更高的要求,而波形发生器已成为测试仪器中至关重要的一类,因此开发波形发生器具有很大的意义。随着计算机与微电子技术的发展,电子设计自动化EDA(Electronic Design Automation)和可编程逻辑器件PLD(Programmable Logic Device)的发展都非常迅速,熟练地利用EDA软件进行PLD器件开发已成为电子工程师必须掌握的基本技能。先进的EDA工具已经从传统的自下而上的设计方法改变为自顶向下的设计方法,以硬件描述语言HDL(Hardware Description Language)来描述系统级设计,并支持系统仿真和高层综合。ASIC(Application Specific Integrated Circuit)的设计与制造,电子工程师在实验室就可以完成,这都得益于PLD器件的出现及功能强大的EDA软件的支持。现在应用最广泛的高密度PLD器件主要是现场可编程门阵列FPGA(Field Programmable Gate Array)和复杂可编程逻辑器件CPLD(Complex Programmable Logic Device)。 本次设计的目的就是通过实践深入理解可编程逻辑器件PLD,了解EDA技术并掌握VHDL硬件描述语言的设计方法和思想。以计算机组成原理为指导,通过学习VHDL语言结合电子电路的设计知识理论联系实际,掌握所学的课程知识和基本单元电路的综合设计应用。通过对实用汽车尾灯控制器的设计,巩固和综合运用所学知识,提高IC设计能力,提高分析、解决计算机技术实际问题的独立工作能力。基于FPGA任意信号发生器的设计作为数字电子技术课程的重要组成部分,一方面使我进一步理解了课程内容,基本掌握了数字系统设计和调试的方法,增加了集成电路的应用知识,培养了我们的实际动手能力以及分析、解决问题的能力;另一方面也使我更好地巩固和加深了对基础知识的理解,学会了设计中小型数字系统的方法,独立完成调试过程,增强了我们理论联系实际的能力,提高了我的电路分析和设计能力。通过实践引导,我在理论指导下有所创新,为日后的工程实践奠定了基础。通过本次毕业设计,一方面加深了我的理论知识,另一方面也提高了我考虑问题全面性的能力,将理论知识上升到了一个实践的阶段。金陵科技学院学士学位论文 2 EDA、VHDL简介 2 EDA、VHDL简介2.1 EDA技术2.1.1 EDA技术的概念及范畴 随着数字电子技术的飞速发展,信息化得到了有力的推动和促进,从与普通百姓生活息息相关的手机、计算机、数字电视,到关系到国家安定社会和谐的军用设备、航天技术,都采用了数字电子技术,它的应用已经渗透到人们生活的方方面面。现代电子设计技术的核心已逐步转向基于计算机的电子设计自动化技术,即EDA(Electronic Design Automation)。【1】所谓EDA技术,就是以功能强大的计算机平台,以EDA软件为工具,对用硬件描述语言HDL(Hardware Description Language)的系统逻辑设计文件,自动地完成逻辑编译、简化、分割、综合、布局布线及逻辑优化和仿真测试的电子产品自动化设计过程。当然,随着EDA技术的日渐成熟,也包括了如PSPICE、EWB、MATLAB等计算机辅助分析CAA技术,如PRETEL、ORCAD等印刷制版计算机辅助设计,等等。利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程在计算机上自动处理完成。2.1.2 EDA技术的基本特征EDA代表了当今电子设计技术的最新发展方向,它的基本特征是:设计人员按照“自顶向下”的设计方法,对整个系统进行方案设计和功能划分,系统的关键电路用一片或几片专用集成电路(ASIC)实现,然后采用硬件描述语言(HDL)完成系统行为级设计,最后通过综合器和适配器生成最终的目标器件,这样的设计方法被称为高层次的电子设计方法。2.1.3 EDA历史发展回顾 早在20世纪60年代中期,人们就开始着眼于开发出各种计算机辅助设计工具来帮助设计人员进行集成电路和电子系统的设计,集成电路技术的发展不断地对EDA技术提出新的要求,并促进了EDA技术的发展。在过去的三十多年里,计算机技术迅猛发展,也给EDA行业带来了巨大的变化。进入20世纪90年代后,电子系统已经从电路级系统集成发展成为包括ASIC、FPGA和嵌入式系统的多种模式,EDA产业已经成为电子信息类产品的支柱产业。EDA的蓬勃发展离不开设计方法学的进步,回顾过去几十年电子技术的发展历程,可大致将EDA技术的发展分为3个阶段。20世纪70年代,是EDA技术发展初期,我们称之为计算机辅助设计CAD(Computer Aided Design)阶段。随着集成电路的出现和应用,硬件设计开始大量选用中小规模的标准集成电,这也使得传统的手工布线方法很难满足产品复杂性和工作效率的要求。CAD的概念已见雏形,人们开始利用计算机替代产品设计过程中的高度重复性的复杂劳动,如利用二维图形编辑与分析工具,辅助进行集成电路版图编辑、PCB布局布线等工作。最具代表性的产品当属美国ACCEL公司的Tabgo布线软件。【2】20世纪80年代,随着集成电路设计进入COMS时代,EDA技术也进入到了计算机辅助工程设计CAE(Computer Assisst Engineering Design)阶段。PAL、GAL和FPGA等一系列复杂可编程逻辑器件都为电子系统的设计提供新的平台。较之70年代的自动布局布线的CAD工具能够替代设计中绘图的重复劳动而言,80年代出现的具有自动综合能力的CAE工具则代替了设计师的部分工作,它在PCB设计方面的原理图输入、自动布局布线及PCB分析,以及逻辑设计、逻辑仿真、布尔方程综合和简化等方面都担任了重要角色。20世纪90年代,以在设计前期将设计师从事的许多高层次设计交由工具来完成为目的,EAD技术开始从以单个电子产品开发为对象转向针对系统级电子产品的设计。EAD工具以系统级设计为核心,包括了系统行为级描述与结构综合、系统仿真与测试验证、系统划分与指标分配及系统决策与文件生成等一系列完整的功能。随着硬件描述语言标准的进一步确立,此时的EDA工具还具有高级抽象的设计构思手段,各EDA公司也致力于推出兼容各种硬件方案和支持标准硬件描述语言的EDA软件的研究。【3】进入21世纪以来,EDA技术得到了更大的发展。高速DSP、嵌入式处理器软核的成熟令EDA软件功能日益强大。电子领域各学科全方位融入EDA技术,除了成熟的数字技术外,模拟电路系统硬件描述语言的表达和设计的标准化、系统可编程模拟器件的出现、数字信号处理和图像处理的全硬件实现方案等,使得EDA工具不论是在广度上还是深度上都取得了长足的发展。2.2 硬件描述语言VHDL2.2.1 VHDL简介VHDL(Very High Speed Integrated Circuit Hardware Description Language,超高速集成电路硬件描述语言)诞生于1982年,是由美国国防部开发的一种快速设计电路的工具,目前已经成为IEEE(The Institute of Electrical and Electronics Engineers)的一种工业标准硬件描述语言。相比传统的电路系统的设计方法,VHDL具有多层次描述系统硬件功能的能力,支持自顶向下(Top to Down)和基于库(LibraryBased)的设计的特点,因此设计者可以不必了解硬件结构。从系统设计入手,在顶层进行系统方框图的划分和结构设计,在方框图一级用VHDL对电路的行为进行描述,并进行仿真和纠错,然后在系统一级进行验证,最后再用逻辑综合优化工具生成具体的门级逻辑电路的网表,下载到具体的CPLD器件中去,从而实现可编程的专用集成电路(ASIC)的设计。在现代数字系统设计中,硬件描述语言已经了成为了设计者和EDA工具之间的桥梁。VHDL采用软件的方式设计系统,即便工程师不懂硬件电路也可以设计出一个硬件系统。就像我们已经习以为常的用C、C+代替汇编语言一样,在硬件描述领域也可以用VHDL来取代原理图、逻辑状态图等。如果采用传统的电路原理图设计方法进行系统设计,则必须给出完整的具体电路结构图,且原理图的描述与实现工艺紧密相连,一旦功能发生微小的改变则可能要重新设计整个电路,造成不必要的资源浪费,降低了工作效率。而VHDL具有较强的抽象描述能力,可以对系统进行行为级描述,且与实现工艺无关,令整个设计过程变得高效简捷。2.2.2 VHDL语言的特点VHDL是一种面向设计的多领域、多层次的IEEE标准硬件描述语言,是目前十分流行的硬件描述工具,并且被大多数EDA工具支持。VHDL是一种全方位的硬件描述语言,包括系统行为级。寄存器传输级和逻辑门级多个设计层次,支持结构、数据流和行为三种描述形式的混合描述,因此VHDL几乎覆盖了以往各种硬件俄语言的功能,整个自顶向下或由底向上的电路设计过程都可以用VHDL来完成。其特点是:(1)设计技术齐全,方法灵活,支持广泛,如支持自顶向下(top down)和基于库(library-based)的设计方法等,早在1987年就已作为IEEE的标准;(2)系统硬件描述能力强,具有多层次描述系统硬件的能力,可以从系统的数学模型直到门级电路,并且高层次的行为描述可以与低层次的RTL描述、门级描述混合使用。强大的行为描述能力避开了具体的器件结构,是在逻辑行为上描述和设计大规模电子系统的重要保证。VHDL的宽范围描述能力使它成为高层次设计的核心,从而决定了它成为系统设计领域最佳的硬件描述语言,并可进行系统的早期仿真以保证设计的正确性;(3)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统功能的可行性,随时可对设计进行仿真模拟。 (4)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。(5)可以实现与工艺无关的编程,工艺更新时,无需修改原设计,只要改变相应的工艺映射工具即可;(6)VHDL语言标准规范,易于移植、共享和重用。2.2.3 用VHDL设计电路主要的工作过程和设计流程(1)编辑。用文本编辑器输入设计的源文件(为了提高输入效率,可用某些专用编辑器)。通常VHDL文件保存为.vhd文件。(2)编译。用编译工具将文本文件编译成代码文件,并检查语法错误。(3)功能仿真(前仿真)。在编译前进行逻辑功能验证,此时的仿真没有延时,对于初步的功能检测非常方便。将文件调入VHDL仿真软件进行功能仿真,检查逻辑功能是否正确。(4)逻辑综合。将设计的源文件用自动综合工具由语言转换为实际的电路图(门电路级网表),但此时还没有在芯片中形成真正的电路,就好像是把设计者脑海中的电路画成了原理图。将源文件调入逻辑综合软件进行综合,即把语言综合成最简的布尔表达式。逻辑综合软件会生成.edf或.edif 的EDA工业标准文件。(5)布局、布线。用已生成的网表文件,再根据CPLD(或FPGA)器件的容量和结构,用自动布局布线工具进行电路设计。首先根据网表文件内容和器件结构确定逻辑门的位置,然后再根据网表提供的门连接关系,把各个门的输入输出连接起来,类似于设计PCB(印刷电路板)时的布局布线工作。最后生成一个供器件编程(或配置)的文件,同时还会在设计项目中增加一些时序信息,以便于后仿真。(6)后仿真(时序仿真)。这是与实际器件工作情况基本相同的仿真,用来确定设计在经过布局、布线之后,是否仍能满足设计要求。如果设计的电路时延满足要求,则可以进行器件编程(或配置)。VHDL的设计流程如下图所示:VHDL文本输入VHDL综合,优化功能,时序仿真器件适配下载图1 VHDL设计流程金陵科技学院学士学位论文 3 PLD、Quartus II简介3 PLD、Quartus II简介3.1可编程逻辑器件PLD3.1.1 PLD简介PLD(ProgrammableLogicDevice)是一种由用户根据需要而自行构造逻辑功能的数字集成电路。目前使用最广泛的可编程逻辑器件有两类:现场可编程门阵列(Field Programmable Gate Array,FPGA)和复杂可编程逻辑器件(Complex Programmable Logic Device,CPLD)。3.1.2 FPGA的设计开发流程(1)设计输入(2)设计综合(3)仿真验证(4)设计实现(5)时序分析(6)下载验证3.2 Quartus II基本使用方法3.2.1 Quartus II概述 ALTERA公司的Quartus II开发软件根据设计者的需求提供了一个完整的多平台开发环境,它包含了整个可编程逻辑器件设计阶段的所有解决方案,提供了完整的图形用户界面,可以完成可编程片上系统的整个开发流程的各个阶段,包括输入、综合、仿真等。基于Quartus II软件工具,设计者可以方便地完成数字系统设计的全过程。3.2.2 Quartus II设计流程作为第一款从FPGA至掩模器件的完整设计工具,ALTERA公司推出的四代可编程逻辑器件集成开发环境Quartus II提供了从设计输入到器件编程的全部功能。Quartus II分为综合工具、仿真工具、实现工具、辅助设计工具和其他工具等,功能强大,界面友好,易于掌握。利用Quartus II开发工具进行数字系统设计,可以概括为以下几个步骤:设计输入、综合、布局布线、时序分析、仿真、编程和配置等,如图1所示。3.2.3应用QUASTUS II的VHDL设计利用VHDL完成电路设计,必须借助 EDA工具综合器、适配器、时序仿真器和编码器等工具进行相应的处理,才能最终在硬件上得以实现和测试。金陵科技学院学士学位论文 4 数字系统设计4 数字系统设计4.1 数字系统的设计模型数字系统指的是交互式、以离散形式表示的,具有存储、传输、信息处理能力的逻辑子系统的集合。用于描述数字系统的模型有多种,各种模型描述数字系统的侧重点不同。下面介绍一种普遍采用的模型,这种模型根据数字系统的定义将整个系统划分为两个模块或两个子系统:数字处理子系统和控制子系统。一般,我们以数字系统实现的功能或算法为依据来设计数据处理子系统。数据处理子系统主要由存储器、运算器、数据选择器等功能电路组成,完成数据采集、存储、运算和传输。数据处理子系统与外界进行数据交换,在控制子系统(或称控制器)发出的控制信号作用下,数据处理子系统将进行数据的存储和运算等操作。数据处理子系统将接收由控制器发出的控制信号,同时将自己的操作进程或操作结果作为条件信号传送给控制器。控制子系统是执行数字系统算法的核心,具有记忆功能,因此它属于时序系统。控制子系统由组合逻辑电路和触发器组成,与数据处理系统共用时钟。将数字系统划分成数据处理子系统和控制子系统,设计者面对的电路规模减小,可以对二者进行分别设计;数字系统中控制子系统的逻辑关系比较复杂,将其独立划分出来后,逻辑分工清楚,可以突出设计重点和分散设计难点。【4】因此,合理的数字系统模型能够很大程度的帮助设计者有层次地理解和处理问题,进而获得清晰、完整、正确的电路图。4.2 数字系统的设计方法数字系统设计的方法有很多,如模块设计法、自顶向下设计法和自底向上设计法等。10年前,电子设计的基本思路还是选择标准的集成电路“自底向上”地构造出一个新的系统。这种设计方法首先确定可用的元器件,然后根据这些器件进行逻辑设计,完成各模块后进行连接,最后形成系统。自底向上的设计方法如同一砖一瓦建造楼房,不仅效率低、成本高而且容易出错。而基于EDA技术的设计方法这是自顶向下进行设计的。所谓自顶向下设计,就是将数字系统的整体逐步分解为各个子系统和模块,若子系统规模较大,则还需将子系统进一步分解为更小的子系统和模块,层层分解,直到整个系统中各子系统关系合理,并便于逻辑级的设计和实现为止。这种方法从系统入手,在顶层进行功能方框图的划分和结构设计,在方框图一级进行仿真、纠错,并用硬件描述语言对高层的系统进行描述,在系统一级进行验证,然后用综合优先工具生成具体的门电路网表,其对应的物理实现级可以是印刷电路板或专用集成电路。由于设计的主要仿真和调试过程是在高层次上完成的,这既有利于早期发现结构设计上的错误,避免设计工时的浪费,同时也减少了逻辑功能仿真的工作量,提高了设计的一次成功率。自顶向下设计方法的优点可以归纳为以下几点:(1) 作为一种模块化设计方法,自顶向下的设计方法对设计的描述从上到下、从粗略到详细,符合常规的逻辑思维习惯。对数字系统的设计采用硬件描述语言,使得设计可以在各种集成电路工艺或可编程器件之间移植。(2) 自顶向下设计方法使得高层设计完全独立于目标器件的结构,在设计的初级阶段,设计人员可以摆脱芯片结构的束缚,将精力集中在可以规避传统方法中的再设计风险的环节,缩短了产品的开发周期。(3) 自顶向下的设计方法便于对设计任务进行合理分配,通过科学的系统工程管理方法,由多个设计师同时进行设计,通过分工协作完成任务。 当然,针对具体的设计要求,数字系统的设计方法会有所不同。无论采用何种方法,都要始终坚持逐层分解功能和分层次进行设计这两条不变的原则。金陵科技学院学士学位论文 5 信号发生器的简单设计过程5 任意信号发生器的简单设计过程5.1 系统需求分析 设计一个函数器,能够以稳定的频率产生递增斜波、递减斜波、三角波、梯形波、正弦波和方波。设置一个波形选择开关,通过此开关可以选择以上各种不同种类的输出函数波形。系统具有复位功能。5.2任意信号发生器的工作原理任意信号发生器主要由两大类电路模块组成,即函数发生电路如图和函数选择电路其中函数发生电路分别包括了产生递增斜波、递减斜波、三角波、梯形波、正弦波和方波六种不同函数波形模块。下图2为信号发生器总框图。图2 信号发生器总框图5.3 各组成模块及程序任意信号发生器由2个模块组成,分别为:函数发生电路和函数选择电路。4.3.1函数发生电路模块函数发生电路要产生六种不同的波形,因此要针对每种波形函数设计对应的电路模块,每个模块的输入输出设置相同,但不同函数发生模块对输入信号的处理方式是不同的,仅以递增斜波函数发生电路为例,其模块如右图所示,其中,CLK为输入时钟脉冲,CLR 图 3为复位清零信号,Q70输出波形函数。程序代码:1、递增斜波函数发生模块的VHDL源程序如下:LIBRARY IEEE;加载库文件USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY increase IS 定义实体PORT(CLK,CLR:IN STD_LOGIC;Q: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END increase;ARCHITECTURE rtl OF increase ISBEGINPROCESS(CLK,CLR)启动进程VARIABLE TMP: STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINIF CLR=1 THEN信号清零TMP:= 00000000;ELSIF CLKEVENT AND CLK=1 THENIF TMP=11111111 THEN 加法计数器满时,重新计数TMP:=00000000;ELSE TMP:=TMP+1; 否则加1,实现递增END IF;END IF;Q=TMP;END PROCESS;END rtl;递减斜波函数发生模块的VHDL语言:LIBRARY IEEE; 加载库文件USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY decrease ISPORT(CLK,CLR:IN STD_LOGIC;Q: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END decrease;ARCHITECTURE rtl OF decrease ISBEGINPROCESS(CLK,CLR) 启动进程VARIABLE TMP: STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINIF CLR=1 THEN 复位清零TMP:= 11111111;ELSIF CLKEVENT AND CLK=1 THENIF TMP=00000000 THEN 减法计数器满时,重新计数TMP:=11111111;ELSE TMP:=TMP-1; 否则减1,实现递增END IF;END IF;Q=TMP;END PROCESS;END rtl;三角波函数发生模块的 VHDL源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DELTA IS PORT( CLK ,CLR:IN STD_LOGIC; Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );END DELTA;ARCHITECTURE rtl OF DELTA ISBEGIN PROCESS(CLK,CLR) -启动进程VARIABLE TMP:STD_LOGIC_VECTOR(7 DOWNTO 0);VARIABLE TAG:STD_LOGIC;BEGIN IF CLR=1THEN -复位清零 TMP:=00000000; ELSIF CLKEVENT AND CLK=1THEN IF TAG=0THEN 加法计数IF TMP=11111110THEN 加法计数器满 TMP:=11111111; TAG:=1; 下一个时钟周期开始减法计数ELSE TMP:=TMP+1;加1操作END IF;ELSE IF TMP=00000001THEN 减法计数器满 TMP:=00000000;TAG:=0;下一时钟周期开始加法计数ELSETMP:=TMP-1;减1操作END IF; END IF;END IF;Q=TMP;END PROCESS;END rtl;梯形波函数发生模块的VHDL语言:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ladder ISPORT(CLK,CLR:IN STD_LOGIC;Q: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END ladder;ARCHITECTURE rtl OF ladder ISBEGINPROCESS(CLK,CLR) 启动进程VARIABLE TMP: STD_LOGIC_VECTOR(7 DOWNTO 0);VARIABLE TAG: STD_LOGIC;BEGINIF CLR=1 THEN 复位清零TMP:= 00000000;ELSIF CLKEVENT AND CLK=1 THENIF TAG=0 THENIF TMP=11111111 THENTMP:=00000000;TAG:=1;ELSETMP:=TMP+16; 实现梯行波TAG:=1;END IF;ELSETAG:=0;END IF;END IF;Q=TMP;END PROCESS;END rtl;正弦波函数发生模块的VHDL语言:LIBRARY IEEE;加载库文件USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY SIN IS 定义实体 PORT( CLK,CLR:IN STD_LOGIC; Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );END SIN;ARCHITECTURE rtl OF sin ISBEGIN PROCESS(CLK,CLR)启动进程VARIABLE TMP:INTEGER RANGE 0 TO 63;定义整数型变量BEGIN IF CLR=1 THEN 复位清零 QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQNULL;END CASE ;END IF;END PROCESS;END rtl;方波函数发生模块的VHDL源程序如下:LIBRARY IEEE;加载库文件USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY square IS PORT( CLK,CLR:IN STD_LOGIC; Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END square;ARCHITECTURE rtl OF square ISSIGNAL TAG:STD_LOGIC;BEGIN PROCESS(CLK,CLR)启动进程 VARIABLE CNT:INTEGER RANGE 0 DOWNTO 63;BEGIN IF CLR=1THEN TAG=0;ELSIF CLKEVENT AND CLK=1THEN IF CNT63 THEN 时钟计数 CNT:=CNT+1;ELSE 时钟计数满,输出翻转CNT:=0;TAG=NOT TAG;END IF;END IF;END PROCESS;给输出信号赋值PROCESS(CLK,TAG)BEGIN IF CLKEVENT AND CLK=1THEN IF TAG=1THEN Q=11111111; ELSE QQQQQQQNULL; END CASE ;END PROCESS;END rtl;5.4任意信号发生器的VHDL程序实现任意信号发生器的系统框图如图(3)所示。其中,CLK为输入时钟脉冲,时钟上升沿有效;CLR为复位清零信号,当信号高电平有效时,系统即时恢复为初始状态;SEL20为输出选择信号,该信号的不同取值对应递增斜波、递减斜波、三角波、梯形波、正弦波和方波六种不同波形输出;Q70为输出信号,根据输出函数选择信号 SEL2.0的取值输出相应的波形。顶层模块的VHDL源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; 图 5ENTITY top ISPORT(CLK,CLR:IN STD_LOGIC;SEL:IN STD_LOGIC_VECTOR(2 DOWNTO 0);Q: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END top;ARCHITECTURE rtl OF top IS定义元件:增、减、三角、正弦、梯形、方波六种函数发生电路和函数选择电路COMPONENT increase ISPORT(CLK,CLR:IN STD_LOGIC; Q: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END COMPONENT increase;COMPONENT decrease ISPORT(CLK,CLR:IN STD_LOGIC;Q: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END COMPONENT decrease;COMPONENT delta ISPORT(CLK,CLR:IN STD_LOGIC;Q: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END COMPONENT delta;COMPONENT ladder ISPORT(CLK,CLR:IN STD_LOGIC;Q: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END COMPONENT ladder;COMPONENT sin ISPORT(CLK,CLR:IN STD_LOGIC;Q: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END COMPONENT sin;
展开阅读全文