基于EDA智能函数发生器的设计毕业设计论文.doc
乐山职业技术学院毕业设计 清华大学 2012年毕业设计(论文) 论文题目: 基于EDA技术的智能函数发生器的设计 摘要应用EDA技术完成一个电子产品的设计,以 FPGA芯片中集成一个在电子生产或检测中通常用到波形发生器。在Max+plus软件开发平台,输入原理图或硬件描述语言VHDL完成的设计文件,系统将自动地完成逻辑编译、综合、仿真、目标芯片的适配编译、下载等的工作。设计的工作是利用编程的方式来进行对系统的功能的描述,在EDA工具的帮助下,应用相应的可编程器件,实现设计的最终结果。使常用到的波形发生器微型化,设计简单化,使用简单化。关键词:FPGA EDA 六种波形 Max+plus软件AbstractEDA application of technology to complete an electronic product design to FPGA chip integrated in a production or electronic detection function in usually used in signal generator. MAX+PLUS in the software development platform for the importation of schematic or hardware description language HDL design document completed, the system will automatically compile the completion of logic, integrated, simulation, the goal of the chips fit to compile, download, and so on. Design work is to use programming on the way to carry out the function of the system described in the EDA tools with the help of the appropriate application of the programmable devices, designed to achieve the final result. Used to make the micro-function signal generator, simple design, simple to use. Key words:FPGA EDA Six kinds of waveform Max+plus23目 录摘要2ABSTRACT3目 录0第1章 引言1第2章EDA和MAX+PLUS软件介绍32.1 EDA技术的简介32.2 Max+plus软件介绍3第3章系统的设计53.1设计要求53.2设计思路53.3系统细化框图6第4章 各模块程序设计及仿真84.1递增斜波模块84.2递减斜波模块84.3 三角波模块94.4 阶梯波模块104.5正弦波模块104.6方波模块114.7输出波形选择模块12第5章 系统的编译与调试135.1系统联调与测试分析135.2 编译135.3 引脚锁定135.4编程下载145.5硬件验证15第6章 结论16参考文献17附录18第1章 引言EDA(electronic design automation,电子设计自动化)技术是现代电子工程领域的一门新技术。它提供了基于计算机和信息技术的电路系统设计方法。EDA技术的发展和推广应用极大地推动了电子工业的发展,随着EDA技术的发展,硬件电子电路的设计几乎全部可以依靠计算机来完成。这样就大大缩短了硬件电子电路设计的周期从而使制造商可以快速开发出品种多批量小的产品,以满足市的众多需求。EDA技术的推广是当今世界的一个技术热点。EDA技术是现代电子工业中不可缺少的一项技术。传统设计应用分立元件或通用数字电路芯片,设计周期长,花费大,而且往往局部功能优化,而整体功能较差。EDA 以计算机为平台,根据硬件描述语言,如VHDL自动地完成逻辑编译、化简分割、综合及优化,布局布线,仿真直至对特定目标芯片的适配编译,逻辑映射和编程下载等工作。以自顶向下的设计方法,使硬件设计软件化,摆脱了传统手工设计的众多缺点。其方法简单,频率稳定度高,易于程控。随着EDA技术的深入发展,基于硬件描述语言的方法将有取代传统手工设计方法的趋势。尝试用VHDL设计来产生正弦波,其频率切换非常便捷,调试、修改也非常节省时间。FPGA是英文Field Programmable Gate Array的缩写,即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个新概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。它与分立元件相比,具有速度快、容量大、功耗小和可靠性高等优点。由于集成度高,设计方法先进、现场可编程,可以设计各种数字电路,因此,在通信、数据处理、网络、仪器、工业控制、军事和航空航天等众多领域内得到了广泛应用。不久的将来将全部取代分立数字元件,目前一些数字集成电路生产厂商已经停止了分立数字集成电路的生产。此外,FPGA还具有静态可重复编程和动态在系统重构的特性,使得硬件的功能可以像软件一样通过编程来修改。因此,FPGA技术的应用前景非常广阔。VHDL(Very High Speed Integrated Circuit Hardware Description Language,超高速集成电路硬件描述语言)诞生于1982年,是由美国国防部开发的一种快速设计电路的工具,目前已经成为IEEE(The Institute of Electrical and Electronics Engineers)的一种工业标准硬件描述语言。相比传统的电路系统的设计方法,VHDL具有多层次描述系统硬件功能的能力,支持自顶向下(Top to Down)和基于库(LibraryBased)的设计的特点,因此设计者可以不必了解硬件结构。从系统设计入手,在顶层进行系统方框图的划分和结构设计,在方框图一级用VHDL对电路的行为进行描述,并进行仿真和纠错,然后在系统一级进行验证,最后再用逻辑综合优化工具生成具体的门级逻辑电路的网表,下载到具体的FPGA器件中去,从而实现可编程的专用集成电路(ASIC)的设计。波形发生器在生产实践和科技领域中有着广泛的应用。例如在通信、广播、电视系统中,都需要射频(高频)发射,这里的射频波就是载波,把音频(低频)、视频信号或脉冲信号运载出去,就需要能够产生高频的振荡器。在工业、农业、生物医学等领域内,如高频感应加热、熔炼、淬火、超声诊断、核磁共振成像等,都需要功率或大或小、频率或高或低的振荡器。第2章EDA和Max+plus软件介绍2.1 EDA技术的简介 EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。EDA技术就是以计算机为工具,在EDA软件平台上,根据原理图或硬件描述语言HDL完成的设计文件,自动地完成逻辑编译、化简、分割、综合及优化,布局布线、仿真、目标芯片的适配编译,逻辑映射和编程下载等工作。设计者的工作只限于软件的方式来完成对就的硬件功能的描述了,要EDA工具的帮助下,就应用相应的FPGA器件就可以得到最后的设计结果。尽管目标系统是硬件,但整个设计和修改过程如同完成软件设计一样方便和高效。当然我们这说的是EDA是狭义的EDA,主要是指数字系统的自动化设计。2.2 Max+plus软件介绍在这设计中是基于Max+plus为EDA的开发工具,用这两者作为我们的桥梁,满足开发的需求,在一切工作开始之前先了解下我们的工具FPGA芯片和Max+plus软件。MAX+plus(Multiple Array and Programming Logic User System)开发工具是美国Altera 公司推出的一种EDA 工具,具有灵活高效,使用便捷,易学易用的特点。Altera 公司在推出各种CPLD 和FPGA 的同时也在不断地升级相应的开发工具软件,已从早期的第一代A+plus、第二代MAX+plus 发展到目前的第三代MAX+plus II 和第四代Quartus。使用MAX+plus 软件,设计者无需精通器件内部的复杂结构,只需熟悉所用的设计输入工具,如硬件描述语言、原理图等进行输入,MAX+plus自动将设计转换成目标文件下载到器件中去。Max+plus开发系统的特点: 1、开放的界面Max+plus支持与Cadence,Exemplarlogic,Mentor Graphics,Synplicty,Viewlogic和其它公司所提供的EDA工具接口。2、与结构无关Max+plus系统的核心Complier支持Altera公司的FLEX10K、FLEX8000、FLEX6000、MAX9000、MAX7000、MAX5000和Classic可编程逻辑器件,提供了世界上唯一真正与结构无关的可编程逻辑设计环境。3、完全集成化Max+plus的设计输入、处理与较验功能全部集成在统一的开发环境下,这样可以加快动态调试、缩短开发周期。4、丰富的设计库Max+plus提供丰富的库单元供设计者调用,其中包括74系列的全部器件和多种特殊的逻辑功能(Macro-Function)以及新型的参数化的兆功能(Mage-Function)。5、模块化工具设计人员可以从各种设计输入、处理和较验选项中进行选择从而使设计环境用户化。6、硬件描述语言(HDL)Max+plus软件支持各种HDL设计输入选项,包括VHDL、Verilog HDL和Altera自己的硬件描述语言AHDL。7、Opencore特征Max+plus软件具有开放核的特点,允许设计人员添加自己认为有价值的宏函数。第3章系统的设计3.1设计要求要求设计一个函数发生器,该函数发生器能够产生递增斜波、递减斜波、方波、三角波、正弦波、及阶梯波,并且可以通过选择开关选择相应的波形输出;系统具有复位的功能;通过按键确定输出的波形及确定是否输出波形。FPGA是整个系统的核心,构成系统控制器,波形数据生成器,加法器,运算/译码等功能。通过以上分析设计要求完成的功能,确定函数发生器可由递增斜波产生模块、递减斜波产生模块、三角波产生模块、阶梯波产生模块、正弦波产生模块、方波产生模块和输出波形选择模块组成,以及按键复位控制和时钟输入。由此可确定系统的总体原理框图为:D/A转换波形发生模块时钟clk复位reset波形输出选择模块3.2设计思路3.2.1 波形函数发生方案对比选择波形函数发生是本设计的最重要的部分,实现函数发生的途径也有很多,因此必须选择一种易于实现且精度高的方案,以此来提高本设计的实用性。方案一:通过单片机控制D/A,输出三种波形。此方案输出的波形不够稳定,抗干扰能力弱,不易调节,而且达不到题目要求的六种波形。方案二:使用传统的锁相频率合成方法。通过芯片IC145152,压控振荡器搭接的锁相环电路输出稳定性极好的正弦波,再利用过零比较器转换成方波,积分电路转换成三角波。此方案,电路复杂,干扰因素多,不易实现。方案三:利用MAX038芯片组成的电路输出波形。MAX038是精密高频波形产生电路,能够产生准确的三角波、方波和正弦波三种周期性波形,但无法实现阶梯波和递增递减斜波的产生。方案四:利用在系统编程技术和FPGA芯片产生。用VHDL语言编写程序,调试成功后下载至实验装置的芯片上,再利用外接D/A转换电路实现以上设计功能。此种方案完全可以生成设计要求的6种波形,而且通过软件仿真可以直观的观测的输出的波形参数,方便调试和更改波形参数,外围电路简单,减少器件损耗,精度高。基于方案四的外围电路简单容易实现、波形产生精度高、易于仿真观测调试的优点,因此本设计的函数发生器选择方案四完成波形发生的全部功能。3.2.2 波形函数输出控制方式选择方案一:控制多路D/A开关输出方式此种方案为每一路输出的波形函数使用一路D/A转换后输出,通过控制开关控制每一路D/A是否工作,决定输出的波形。此种方案可以同时输出多路波形,但是需要路D/A转化器,外围电路复杂,制作成本较高而且控制复杂。方案二:采用数据选择器方式此种方案可以利用VHDL语言写出数据选择器,然后每种函数发生器的输出和数据选择器输入相连接,通过控制开关选择对应的波形输出。方案二完全可以得到方案一的设计要求,而且只需一个D/A转换器就可以。电路不需要外部搭建,节约成本且控制简单方便。方案三:采用数据分配器方式此种方案利用数据分配器的功能,通过控制开关选择相应的函数发生器模块,使之产生相应的波形输出,并通过数据分配器的使能复位控制决定是否输出波形,此种方案和方案二很相似,也能够实现设计的功能也具有方案二的优点。基于方案二的设计简便、节约制作元件和成本、控制简便等优点,选择方案二作为波形函数输出控制方式。3.3系统细化框图通过以上各个模块的分析最终确定函数信号发生器的自顶向下的细化框图为:3.3.1 系统的整体原理框图:波形选择模块递增斜波模块递减斜波模块三角波模块阶梯波模块正弦波模块方波模块时钟clk复位reset波形选择开关D/A转换器系统时钟输入后,通过复位开关选择是否产生波形,当各个模块产生相应的信号波形后,通过波形选择模块波形选择开关选泽输出不同的波形,再通过D/A转换器转换,就可以把数字信号(由FPGA输出)变成了相应模拟的信号波形。整个系统设计的核心就是FPGA部分。第4章 各模块程序设计及仿真根据自上而下的思路进行项目设计。明确每个模块的功能以后,开始编写各个模块的程序。4.1递增斜波模块递增斜波icrs的VHDL程序如附录所示,其中clk是输入时钟端口,sel0、sel1、sel2为选择波形按键值,reset为输入复位端口,q为八位二进制输出端口。图1 递增斜波模块仿真图程序设计的当复位信号为0时,输出为0,无对应的波形产生。当复位信号为1时,每当检测到时钟上升沿时,计数器值加1,当增加到最大后清零。计数值增加呈现线性关系,因此输出的波形是递增的斜波。从仿真波形图也能看出这种变化规律。VHDL描述为:IF reset='0' THEN tmp:= "00000000"-复位信号清零ELSIF clk'EVENT AND clk='1' THEN IF tmp="11111111" THEN tmp:="00000000"-递增到最大值清零 ELSE tmp:=tmp+1;-递增运算4.2递减斜波模块递减斜波dcrs的VHDL程序如附录所示,其中clk是输入时钟端口,sel0、sel1、sel2为选择波形按键值,reset为输入复位端口,q为八位二进制输出端口。图2 递减斜波模块仿真图程序设计的是复位信号为0时输出为0,无对应的波形产生。当复位信号为1时,当每当检测到时钟上升沿时,计数值减1,当减到0后赋值到最大。计数值减少呈现线性关系,因此输出的波形是递减的斜波。从仿真波形图也能看出这种变化规律。VHDL描述为:IF reset='0' THEN tmp:="11111111"-复位信号置最大值ELSIF clk'EVENT AND clk='1' THEN-检测时钟上升沿IF tmp="00000000" THEN tmp:="11111111"-递减到0置最大值ELSE tmp:=tmp-1;-递减运算4.3 三角波模块三角波delat的VHDL程序如附录所示,其中clk是输入时钟端口,sel0、sel1、sel2为选择波形按键值,reset为输入复位端口,q为八位二进制输出端口。三角波波形是对称的,每边呈线形变化,所以可以根据数据做简单运算,就可以得到三角波。图3 三角波模块仿真图程序设计的是reset复位信号为0时输出为0,无对应的波形产生。当复位信号为1时,当每当检测到时钟上升沿时,当计数的数据不是最大值时,数值做递增运算,当增大到最大时,然后再做递减运算,因此输出的波形便呈现出三角波的形状。从仿真波形图也能看出这种变化规律。VHDL描述如下:IF reset='0' THEN tmp:="00000000"-复位信号为0,置最小值 ELSIF clk'EVENT AND clk='1' THEN-检测时钟上升沿 IF a='0' THEN IF tmp="11111110" THENtmp:="11111111" -置最大值a:='1' ELSE -不是最大值时递增tmp:=tmp+1;-递增运算 END IF; ELSE IF tmp ="00000001" THENtmp:="00000000" -置最小值a:='0' ELSE -a为1时,执行递减运算tmp:=tmp-1;-递减运算4.4 阶梯波模块阶梯波ladder的VHDL程序如附录所示,其中clk是输入时钟端口,sel0、sel1、sel2为选择波形按键值,reset为输入复位端口,q为八位二进制输出端口。图4 阶梯波模块仿真图阶梯波设计的是数据的递增是以一定的阶梯常数向上增加,所以输出的波形呈现是成阶梯状的,而不是,完全呈现是直线增长。从仿真波形图也能看出这种变化规律。VHDL描述如下:IF reset='0' THEN tmp:="00000000"-复位信号为0,置最小值ELSIF clk'EVENT AND clk='1' THEN-检测时钟上升沿 IF a='0' THEN-判断a数值,计数。 IF tmp="11111111" THENtmp:="00000000" -计数到最大清零a:='1' ELSEtmp:=tmp+16;-阶梯常数为16,可修改a:='1' END IF; ELSEa:='0'-循环计数标志 END IF; END IF;q<=tmp;END PROCESS; END behave;4.5正弦波模块正弦波sin的VHDL程序如附录所示,其中clk是输入时钟端口,sel0、sel1、sel2为选择波形按键值,reset为输入复位端口,q为八位二进制输出端口。图5 正弦波模块仿真图正弦波产生原理:通过循环不断地从波形数据ROM文件中依次读取正弦波一个周期在时域上64个采样点的波形数据送入波形DAC,从而产生正弦波。4.6方波模块方波模块的square的VHDL程序描述如下:其中clk为输入时钟端口,sel0、sel1、sel2为选择波形按键值,reset为输入复位端口,q为整数输出端口。图6 方波模块仿真图方波模块的设计是当内部计数cnt达到64时,根据输出标志a的数值输出对应的数值,当a=0输出0,也即是方波周期中的低电平,当a=1,输出255,也即是方波周期中的高电平。连续的输出便成了观测到的方波波形。其VHDL描述如下:IF clr='0' THEN a<='0' ELSIF clk'EVENT AND clk='1' THEN -检测时钟上升沿IF cnt<63 THEN -计数64个点cnt:=cnt+1;-计数 ELSEcnt:=0; -当计数的值大于64时,清零。a<=NOT a; -对内部a变量取反,a变化启动进程END PROCESS; .PROCESS(clk,a)BEGINIF clk'EVENT AND clk='1' THEN IF a='1' THENq<=255; -a=1,输出一个波形周期内的高电平 ELSEq<=0; -a=0,输出一个波形周期的低电平。4.7输出波形选择模块波形选择模块是一个设计位6选1的数据选择器,其中sel为波形数据选择端口,d0d5为8位二进制输入端口,q为8位二进制输出端口。该模块可以根据外部开关的状态选择相应的波形输出。其选择VHDL程序如下:CASE sel ISWHEN"000"=>q<=d0;-递增波形输出,十进制0WHEN"001"=>q<=d1;-递减波形输出,十进制1WHEN"010"=>q<=d2;-三角波形输出,十进制2WHEN"011"=>q<=d3;-阶梯波形输出,十进制3WHEN"100"=>q<=d4;-正弦波形输出,十进制4WHEN"101"=>q<=d5;-方波输出,十进制5WHEN OTHERS=>NULL; 第5章 系统的编译与调试5.1系统联调与测试分析通过以上各个模块的细化和分析,最终在Max+plus中完成了整个系统的联合调试,并通过示波器读输出信号的波形符合设计的要求。调试整个系统了原理图如下图所示:5.2 编译 (1)选择目标器件 Assion-Device-Device Family-EPF10K10LC84-4-OK(2)启动编译器 Max+PlusII-Compiler-Start将以上模块分别编译通过,并将它们全部保存到自己所建的工程文件夹:wang中。5.3 引脚锁定(1)确定设计实体输入输出端口与目标芯片引脚的对应关系端口分类端口名称GW48-CK结构图上信号芯片引脚号输入端口Clk时钟CLOCK02Reset键1PIO05Sel0键2PIO16Sel1键3PIO27Sel2键4PIO38输出端口q7.4数码管4PIO31285350q3.0数码管3PIO27244947、39目标芯片:EPF10K10CL84-4 模式:NO.5(2) 引脚锁定 Assign-Pin Location chip-Node nam栏中输入端口名-输入引脚号-Add,最后按OK键。再按Compiler编译一次。引脚锁定图如下:5.4编程下载1用下载电缆把计算机的并口与目标板(实验开发系统),连接好并打开电源。2将已经完成好的顶层原理图设一次当前工程,然后将其在Max+plus-Compilerz下编译一次,将引脚锁定图在Max+plus-FloorplanEditor中打开,再编译一次。3Max+plus-Programmer-Option-Hardware Setup-ByteBlaster(编程方式为)-Configute,双击Enter键,进行硬件验证。5.5硬件验证下载完成后在GW48-CK实验箱上选择模式5,把示波器连接到实验箱上,并在实验箱上选择适当的时钟频率(以示波器上显示的波形清晰为标准,我选择的事730Khz,但是在阶梯波输出的时候需要调小一些)。准备工作完成后按下实验箱的键1即复位键,健2、键3、键4组合为波形选择键,组合键的键值与对应波形关系如下表:键4值键3值键2值对应产生的波形000递增斜波001递减斜波010三角波011阶梯波100正弦波101方波第6章 结论应用EDA技术用FPGA完成波形发生器,通过选择波形的按钮,实现6种波形的互相转换。利用示波器可以验证波形发生器与原定的设计的理论是相一致。用FPGA完成波形发生器的方法与传统的方法相比较,硬件结构是相当简单的。大大减小了它的体积和重量。可以节去传统的烦琐的硬件设计和硬件组合。易于使用,按下选择波形的选择按钮,即可选出你所需的波形。PFGA里面有的是有待连接的逻辑门、D触发器等器件,它的外围还要有EEPROM、SDRAM、FLASH与之相配合才可以正常工作,这一点可能会广泛应用FPGA来比较麻烦。随着技术的发展,如果把EEPROM、SDRAM、FLASH都集成要在FPGA中去,组成它的最小系统,这样的话将会,节去芯片外的线路设计,会得到更加广泛地的应用。 应用EDA技术完成波形发生器的设计,设计简单。 可以看到利用EDA技术完成一个电子设计,可以节省我们开发时间,从而提高大大地了我们的效率。采用新技术就是为了提高效率,快速完成设计任务。我们做一个项目时,所在追求的也是快且高效率。不断地去快速掌握并能快速地应用新技术是我们做技术的人的基本素质。我们要注重自己在这方面的能力。当然我们不能废弃我们基本的东西-学科基础,全面发展自己,这需要我不断去追求。参考文献1潘松,黄继业.EDA技术实用教程(第二版).科学出版社,2007.92 徐守堂刘艳惠,李娜,孔旭梅.EDA技术教程.西北师范大学知行学院计算机与电子信息科学系3潭会生,张昌凡.EDA技术及应用.西安电子科技大学出版社,2001.94李洋. EDA技术使用教程.机械工业出版社,2002.3附录1、递增波形源程序LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY icrs IS PORT(clk,reset: IN STD_LOGIC; q: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); END icrs; ARCHITECTURE behave OF icrs ISBEGINPROCESS(clk,reset)VARIABLE tmp : STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINIF reset='0' THEN tmp:= "00000000"-复位信号清零ELSIF clk'EVENT AND clk='1' THEN IF tmp="11111111" THEN tmp:="00000000"-递增到最大值清零 ELSE tmp:=tmp+1;-递增运算 END IF; END IF; q<=tmp; END PROCESS; END behave;2、递减波形源程序LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY dcrs ISPORT (clk,reset:IN STD_LOGIC; q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END dcrs;ARCHITECTURE behave OF dcrs ISBEGINPROCESS(clk,reset)VARIABLE tmp:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGINIF reset='0' THEN tmp:="11111111"-复位信号置最大值ELSIF clk'EVENT AND clk='1' THEN-检测时钟上升沿IF tmp="00000000" THEN tmp:="11111111"-递减到0置最大值ELSE tmp:=tmp-1;-递减运算END IF; END IF;q<=tmp;END PROCESS; END behave;3、三角波形源程序LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY delta IS PORT(clk,reset:IN STD_LOGIC; q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);end delta;ARCHITECTURE behave OF delta ISBEGIN PROCESS(clk,reset) VARIABLE tmp:STD_LOGIC_VECTOR(7 DOWNTO 0); VARIABLE a:STD_LOGIC; BEGINIF reset='0' THEN tmp:="00000000"-复位信号为0,置最小值 ELSIF clk'EVENT AND clk='1' THEN-检测时钟上升沿 IF a='0' THEN IF tmp="11111110" THENtmp:="11111111" -置最大值a:='1' ELSE -不是最大值时递增tmp:=tmp+1;-递增运算 END IF; ELSE IF tmp ="00000001" THENtmp:="00000000" -置最小值a:='0' ELSE -a为1时,执行递减运算tmp:=tmp-1;-递减运算 END IF; END IF; END IF; q<=tmp; END PROCESS;END behave;4、阶梯波形程序源程序LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ladder ISPORT(clk,reset:IN STD_LOGIC; q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END ladder;ARCHITECTURE behave OF ladder ISBEGINPROCESS(clk,reset)VARIABLE tmp: STD_LOGIC_VECTOR(7 DOWNTO 0); -定义内部变量VARIABLE a: STD_LOGIC; BEGINIF reset='0' THEN tmp:="00000000"-复位信号为0,置最小值ELSIF clk'EVENT AND clk='1' THEN-检测时钟上升沿 IF a='0' THEN-判断a数值,计数。 IF tmp="11111111" THENtmp:="00000000" -计数到最大清零a:='1' ELSEtmp:=tmp+16;-阶梯常数为16,可修改a:='1' END IF; ELSEa:='0'-循环计数 END IF; END IF;q<=tmp;END PROCESS; END behave;5、正弦波源程序LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY sin IS PORT(clk,clr:IN STD_LOGIC; d: OUT INTEGER RANGE 0 TO 255); END sin ; ARCHITECTURE behave OF sin IS BEGIN PROCESS(clk,clr) VARIABLE tmp: INTEGER RANGE 0 TO 63; BEGIN IF clr='0'THEN d<=0; ELSIF clk'EVENT AND clk='1'THEN IF tmp=63 THEN tmp:=0; ELSE tmp:=tmp+1; END IF; CASE tmp IS WHEN 00=>d<=255;WHEN 01=>d<=254;WHEN 02=>d<=252; WHEN 03=>d<=249;WHEN 04=>d<=245;WHEN 05=>d<=239; WHEN 06=>d<=233;WHEN 07=>d<=225;WHEN 08=>d<=217; WHEN 09=>d<=207;WHEN 10=>d<=197;WHEN 11=>d<=186; WHEN 12=>d<=174;WHEN 13=>d<=162;WHEN 14=>d<=150; WHEN 15=>d<=137;WHEN