基于FPGA和QuartusII设计的智能函数发生器毕业设计论文.doc

上传人:文库蛋蛋多 文档编号:2387820 上传时间:2023-02-17 格式:DOC 页数:26 大小:1.60MB
返回 下载 相关 举报
基于FPGA和QuartusII设计的智能函数发生器毕业设计论文.doc_第1页
第1页 / 共26页
基于FPGA和QuartusII设计的智能函数发生器毕业设计论文.doc_第2页
第2页 / 共26页
基于FPGA和QuartusII设计的智能函数发生器毕业设计论文.doc_第3页
第3页 / 共26页
基于FPGA和QuartusII设计的智能函数发生器毕业设计论文.doc_第4页
第4页 / 共26页
基于FPGA和QuartusII设计的智能函数发生器毕业设计论文.doc_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《基于FPGA和QuartusII设计的智能函数发生器毕业设计论文.doc》由会员分享,可在线阅读,更多相关《基于FPGA和QuartusII设计的智能函数发生器毕业设计论文.doc(26页珍藏版)》请在三一办公上搜索。

1、 课程设计题 目 基于FPGA和Quartus II设计的智能函数发生器 所在院(系) 物理与电信工程学院 基于FPGA和Quartus II设计的智能函数发生器摘要 信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的应用。它能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波等,在电路实验和设备检测中具有十分广泛的用途。例如在通信、广播、电视系统中,都需要射频(高频)发射,这里的射频波就是载波,把音频(低频)、视频信号或脉冲信号运载出去,就需要能够产生高频的振荡器。在工业、农业、生物医学等领域内,如高频感应加热、熔炼、淬火、超声诊断、核磁共振成像等,都需要功率或大或小、频

2、率或高或低的信号发生器。本设计采用FPGA来设计制作多功能信号发生器。该信号发生器可以产生锯齿波、三角波、方波等波形。 关键词 信号发生器;VHDL;FPGA;三角波;方波;锯齿波。目录1.引言12.FPGA简介12.1 VHDL 和 Verilog简介32.2 设计工具简介33.系统设计33.1 VHDL程序语言基本设计33.2波形发生器设计43.3 程序设计原理框图44 系统的软件设计与仿真64.1 系统仿真时序图64.2 RTL仿真硬件图75总结体会与展望8参考文献9附录A 设计原理图10附录B 系统仿真图11附录C 源程序清单131.引言20世纪90年代,国际上电子和计算机技术较先进的

3、国家,一直在积极探索新的电子电路设计方法。电子设计自动化(EDA)工具给电子设计带来了巨大的变革,特别是可编程逻辑器件和硬件描述语言的出现和发展,解决了用传统的方法设计较大系统工程时的诸多不便,成为电子电路设计人员最得力的助手。随着计算机和EDA技术的发展,基于FPGA的电子设计则是目前发展较为迅速的一个领域,而且广泛应用于计算机、通信等各个领域。因此,本文主要利用VHDL,设计制作一个多功能波形发生器。采用传统的模拟振荡电路构成的波形发生器产生的信号频率精度低,不仅成本高,外围电路复杂,易受外界干扰,而且调试困难,不便于调控,实现的性能指标也不理想。对此采用具有良好性能的专用集成芯片就能达到

4、本题的目的要求。但采用该方法所需的外围电路模块多且较为复杂,不利于控制和问题的检查。而纯单片机的方法虽便于控制但又难以达到题目的要求。 现如今是信息时代,人们对使用计算机获取信息、处理信息的依赖性也越来越高。因此,利用FPGA采用DDS的方式来设计的波形发生器前景十分可观。随着电子技术的飞速发展,VHDL作为标准化的硬件描述语言获得了广泛的应用。无论是采用传统的模拟振荡电路还是专用的集成芯片所作的波形发生器已不能满足需要。因此,对波形发生器的设计势在必行。本文主要利用VHDL语言,设计制作一个多功能波形发生器,能实现多种波形的输出及组合,并进行仿真。2.FPGA简介FPGA(FieldProg

5、rammable Gate Array)即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。与传统们阵列和掩模可编程门阵列(MPGA)相比,FPGA具有很多的优点,传统门阵列可以用来设计任何电路,但是只能在工厂中一次性编程,而且还需要针对该电路的特定的掩模。FPGA是标准通用器件。使用其代替MPGA,可以将设计时间由几个月缩短至几小时,并且使设计更加简单,从而减少了错误修改和设计指标变更的花费。FPGA器件在结构上,由逻辑功能块排

6、列为阵列,它的结构可以分为三个部分:可编程快CLB(Configurable Logic Blocks)、可编程I/O模块IOB(Input Block)和可编程内部连线PI(Programmable Interconnect)。CLB在器件中排列为阵列,周围有环形内部连线,IOB分布在四周的管脚上。 FPGA也存在缺点,FPGA中,每个可编程的点都有电阻和电容。电阻和电容的使用减慢了信号的传输速度,所以FPGA的速度比传统门阵列要低,而且,FPGA中互联延迟是不可预测的。 FPGA的基本特点主要有: 一、采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。 二、FPGA可做

7、其它全定制或半定制ASIC电路的中试样片。 三、FPGA内部有丰富的触发器和IO引脚。 四、FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。 五、FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。使用FPGA时,可以根据不同的配置模式,采用不同的编程方式。加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一片EPROM

8、即可。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。FPGA有多种配置模式:并行主模式为一片FPGA加一片EPROM的方式;主从模式可以支持一片PROM编程多片FPGA;串行模式可以采用串行PROM编程FPGA;外设模式可以将FPGA作为微处理器的外设,由微处理器对其编程。2.1 VHDL&Verilog简介 VHDL(Very High Speed Integrated Circuit Hardware Description Language,超高速集成电路硬件描述语言)是一种用来描述数字系统行为和结构的硬件描述语言,被广泛的运用于描述和仿真各

9、种数字系统,小到几个门,大到许多复杂集成电路相连的系统。VHDL诞生于1982年,是由美国国防部开发的一种快速设计电路的工具,目前已经成为IEEE(The Institute of Electrical and Electronics Engineers)的一种工业标准硬件描述语言。相比传统的电路系统的设计方法,VHDL具有多层次描述系统硬件功能的能力,支持自顶向下(Top to Down)和基于库(Library Based)的设计的特点,因此设计者可以不必了解硬件结构。从系统设计入手,在顶层进行系统方框图的划分和结构设计,在方框图一级用VHDL对电路的行为进行描述,并进行仿真和纠错,然后在

10、系统一级进行验证,最后再用逻辑综合优化工具生成具体的门级逻辑电路的网表,下载到具体的FPGA器件中去,从而实现可编程的专用集成电路(ASIC)的设计。Verilog也是一种流行的硬件描述语言,他是由工业界开发的,1984年,Verilog作为一种私用的硬件描述语言,由Gateway Design Automation公司给出,1988年,Synopsis公司为Verilog开发了综合工具。1995年,Verilog成为IEEE的一个标准。Verilog 适合算法级,寄存器级,逻辑级,门级和版图级等各个层次的设计和描述。VHDL的语法是基于ADA语言的,而Verilog的语法是基于C语言的。由于

11、是基于C语言,所以它更容易掌握,但是VHDL语言在设计和描述大型系统时具有突出优势。目前两种语言各占一半市场份额,两种语言都可以满足数字系统设计者的需求。本设计中采用VHDL语言进行设计。2.2 设计工具简介本次设计是基于Altera公司的QuartusII软件。Quartus II 是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。 QuartusII支持Altera的IP核

12、,包含了LPM/MegaFuction宏功能模块库,使用它,可以简化设计的复杂性,加快设计速度。QuartusII平台支持一个工作组环境下的设计要求,其中包括支持基于Internet的协作设计。此外,QuartusII通过和DSP Builder工具与Matlab/SIMULINK相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统开发,集系统级设计、嵌入式软件设计、可编程逻辑设计于一体,是一种综性的开发平台。 3 系统设计3.1 VHDL程序语言基本设计一个VHDL语言的设计程序描述的是一个电路单元,这个电路单元可以是一个门电路,或者是一个计数器,也可以是一个CPU,一

13、般情况下,一个完整的VHDL语言程序至少包括实体、结构体和程序包三个部分。实体给出电路单元的外部输入输出接口信号和引用信息,结构体给出了电路单元的内部结构和信号的行为特点,程序包定义在设计结构体和实体中将用到的常数、数据类型、子程序和设计好的电路单元等。第一部分是程序包,程序包是用VHDL语言编写的共享文件,定义在设计结构体和实体中将要用到的常数、数据类型、子程序和设计好的电路单元等,放在文件目录名称为IEEE的程序包库中。library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_log

14、ic_unsigned.all;第二部分是程序的实体,定义电路单元的输入/输出引脚名称。程序的实体名称可以任意取,但必须与VHDL程序的文件名称相同。实体的标示符是ENTITY,实体以ENTITY开头,以END结束。ENTITY fulladder ISPORT(a,b,Ci:in std_logic;Co,s: out std_logic_vector(7 downto 0);END fulladder;其中,定义了a,b, Ci为输入信号引脚,定义Co,s为输出信号引脚。第三部分是程序的结构体,具体描述电路的内部结构和逻辑功能。结构体有三种描述方式,分别是行为(BEHAVIOR)描述方式、

15、数据流(DATAFLOW)描述方式和结构描述方式。其中数据流描述方式又被称为寄存器(RTL)描述方式。结构体以表示ARCHITECHTURE开头,以END结尾。结构体的名称可以任取。architecture behav of fulladder isBEGINs=a xor b xor Ci;Co=(a and b)or(a and Ci)or(b and Ci);END fulladder上面程序段中结构体的描述方式属于程序流描述方式。以上三段程序是一个完整的VHDL程序段,实现的功能是一位全加器。3.2波形设计采用DDS技术可以很方便地产生各种高质量的波形。DDS技术是从相位概念出发之结合

16、成所需要波形的一种频率合成技术。以正弦波为例,首先要按照一定的采样点数将正弦波形一个周期的数据信息存于ROM表中,表中包含着一个周期正弦波的数字幅度信息,每个地址对应正弦波中0到360度范围内的一个相位点的幅度值,查找表时即是把输入的地址相位信息映射成正弦波幅度的数字量信号,通过设置的输出端口输出。在实物设计中,可以使用D/A接口来实现波形信号的输出。为简化设计过程,本设计并未采用DDS技术,而是采用描点输出的方式,实现波形发生器的设计。程序中设置一个波形的起始点,经过比较、计算得出波形的其他数值,将这些点依次连续输出,从而实现波形的仿真。以递增锯齿波为例,首先定义初始点为 tmp=“0000

17、0000”;在时钟上升沿到来时,执行tmpclk,reset=reset,q0=y0); u1: jian port map(clk=clk,reset=reset,q1=y1); u2: sanjiao port map(clk=clk,reset=reset,q2=y2); u3: fangbo port map(clk=clk,clr=reset,q3=y3); u4: xuan_4 port map(sel=sel,d0=y0,d1=y1,d2=y2,d3=y3,q=q);end boxin_arc;-*-*递增锯齿波的设计程序*-*library ieee;use ieee.std_

18、logic_1164.all;use ieee.std_logic_unsigned.all;entity zeng is port (clk,reset: in std_logic; q0: out std_logic_vector(7 downto 0);end entity;architecture zeng_arc of zeng issignal m0:integer range 0 to 7;signal tmp0:std_logic_vector(7 downto 0);begin process(clk,reset)-敏感信号 beginif reset=0 then m0=0

19、; elsif clkevent and clk=1 then if m0=7 then m0=0;-定义8分频,实际时增大数字,减小分频系数,因为FPGA系统的时钟为50MH的。 if tmp0=11111111 then tmp0=00000000;-产生锯齿波 else tmp0=tmp0+1;-递增 end if; else m0=m0+1; end if;end if; q0=tmp0;end process;end zeng_arc;-*-递减锯齿波的产生-*library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_un

20、signed.all;entity jian is port (clk,reset: in std_logic; q1: out std_logic_vector(7 downto 0);end entity;architecture jian_arc of jian issignal m1:integer range 7 to 0;signal tmp1:std_logic_vector(7 downto 0);begin process(clk,reset)-敏感信号 beginif reset=0 then m1=7; elsif clkevent and clk=1 then if m

21、1=0 then m1=7;-定义8分频,实际时增大数字,减小分频系数,因为FPGA系统的时钟为50MH的。 if tmp1=00000000 then tmp1=11111111;-产生锯齿波 else tmp1=tmp1-1;-递减 end if; else m1=m1-1; end if;end if; q1=tmp1;end process;end jian_arc;-*-*三角波*-*library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sanjiao isport ( clk,

22、reset: in std_logic;q2: out std_logic_vector(7 downto 0);end entity;architecture sanjiao_arc of sanjiao issignal m2:integer range 0 to 7;signal tmp2:std_logic_vector(7 downto 0);beginprocess(clk,reset)-敏感信号variable a: std_logic:=0; beginif reset=0 then m2=0; elsif clkevent and clk=1 then if m2=7 the

23、n m2=0;-定义8分频,实际时增大数字,减小分频系数,因为FPGA系统的时钟为50MH的。 if a=0 then if tmp2=11111110 then tmp2=11111111;-向上的锯齿波 a:=1; else tmp2=tmp2+1; end if; else if tmp2=00000001 then-向下锯齿波 tmp2=00000000; a:=0; else tmp2=tmp2-1; end if; end if; else m2=m2+1;-分频自加 end if;-分频if结束end if;-复位信号if结束 q2=tmp2;end process;end sa

24、njiao_arc;-*-*方波*-*library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fangbo isport( clk,clr: in std_logic; q3: out std_logic_vector(7 downto 0);end entity;architecture fangbo_arc of fangbo issignal t: bit;beginprocess(clk,clr)-敏感信号variable cnt: integer range 0 to 63; be

25、ginif clr=0 then t=0; elsif clkevent and clk=1 then if cnt63 then cnt:=cnt+1;-定义64分频,实际时增大数字,减小分频系数,因为FPGA系统的时钟为50MH的。 else cnt:=0; t=not t; end if; end if;end process;process(clk,t) begin if clkevent and clk=1 then if t=1 then q3=11111111; else q3qqqqnull; end case; end process;end xuan_4_arc; /* 名

26、称:基于Verilog编程的智能函数发生器设计程序*/module Sin(f_clk,p,choose,data);/端口设定input 5:0 p; /频率控制字input1:0 choose; /波形选择input f_clk; /内置晶振output 7:0 data;wire 7:0data;reg 5:0 addr,address;reg 5:0 i;reg f_out;initial begin i=0; addr=0; f_out=0; endalways (posedge f_clk) /利用计数器实现任意分频begin if(i=p) /设定频率控制字pbegin i=0;

27、f_out=f_out;end elsei=i+1;endfunction 7:0 romout; /ROM的设定 input5:0 address;case(address) /各波形初值的预装入0 : romout = 10; /正弦波初值1 : romout = 17;2 : romout = 15;3 : romout = 17;4 : romout = 10;5 : romout = 3;6 : romout = 5;7 : romout = 3;8 : romout = 3; /方波初值9 : romout = 3;10: romout = 3;11: romout = 3;12:

28、 romout = 1;13: romout = 1;14: romout = 1;15: romout = 1;16 : romout = 0; /正三角波初值17 : romout = 5;18 : romout = 10;19 : romout = 15;20 : romout = 20;21 : romout = 25;22 : romout = 30;23 : romout = 35;24 : romout = 35; /反三角波初值25 : romout = 30;26 : romout = 25;27 : romout = 20;28 : romout = 15;29 : romout = 10;30 : romout = 5;31 : romout = 0; default : romout = 10hxx;endcaseendfunctionalways(posedge f_out) begin if(addr=8) /波形数据切换 addr=0; else addr=addr+1; case(choose)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号