eda基于FPGA的波形发生器要点 - 图文

更新时间:2024-03-25 12:04:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

EDA实验设计报告

题 目:基于FPGA的波形发生器 作 者: 学 号: 专业年级: 指导教师:

摘要:本设计是采用了EDA技术设计的函数信号发生器。此函数信号发生器的实现是基于FPGA语言描述各个波形产生模块,然后在QuartusⅡ软件上实现波形的编译,仿真和下载到Cyclone芯片上。整个系统由波形产生模块、波形选择模块、波形频率控制和波形幅度控制四个部分组成。最后经过QuartusⅡ软件仿真,证明此次设计可以通过波形选择模块的设定来选择波形输出,输出正弦波、方波、三角波等规定波形,并可以通过频率控制和幅度控制改变波形。 关键字:VHDL;QuartusⅡ;Cyclone;函数信号发生器

一、Quartus II软件简介

1.1 Quartus II软件介绍

Quartus II 是Alera公司推出的一款功能强大,兼容性最好的EDA工具软件。该软件界面友好、使用便捷、功能强大,是一个完全集成化的可编程逻辑设计环境,具有开放性、与结构无关、多平台完全集成化丰富的设计库、模块化工具、支持多种硬件描述语言及有多种高级编程语言接口等特点。

Quartus II是Altera公司推出的CPLD/FPGA开发工具,Quartus II提供了完全集成且与电路结构无关的开发包环境,具有数字逻辑设计的全部特性,包括:可利用原理图、结构框图、VerilogHDL、AHDL和VHDL完成电路描述,并将其保存为设计实体文件;芯片平面布局连线编辑;功能强大的逻辑综合工具;完备的电路功能仿真与时序逻辑仿真工具;定时/时序分析与关键路径延时分析;可使用SignalTap II逻辑分析工具进行嵌入式的逻辑分析;支持软件源文件的添加和创建,并将它们链接起来生成编程文件;使用组合编译方式可一次完成整体设计流程;自动定位编译错误;高效的期间编程与验证工具;可读入标准的EDIF网表文件、VHDL网表文件和Verilog网表文件;能生成第三方EDA软件使用的VHDL网表文件和Verilog网表文件。

1.2 Quartus II软件设计流程

(1)打开Quartus II软件。

(2)选择路径。注意:工作目录名不能有中文。 (3)添加设计文件。

(4)选择FPGA器件。Family选择Cyclone,240,8。 (5)建立原理图或用VHDL语言描述设计电路。

(6)对原理图或用VHDL语言进行编译,无误后进行添加信号。 (7)对上述电路进行仿真。 (8)进行管脚分配。 (9)全局编译。

(10) 采用JTAG或AS模式进行下载测试。

二.DDS波形发生器理论分析

2.1 DDS原理简介

DDS基本结构 DDS与大多数的数字信号处理技术一样,它的基础仍然是奈圭斯特采样定理。奈圭斯特采样定理是任何模拟信号进行数字化处理的基础,它描述的是一个带限的模拟信号经抽样变成离散值后可不可以由这些离散值恢复原始模拟信号的问题。 奈圭斯特采样定理告诉我们,当抽样频率大于或者等于模拟信号最高频率的两倍时,可以由抽样得到的离散信号无失真地恢复出原始模拟信号。只不过在DDS技术中,这个过程被颠倒过来了。DDS不是对模拟信号进行抽样,而是一个假定抽样过程已经发生且抽样值已经量化完成,如何通过某种方法把已经量化的数值重建原始信号的问题。 DDS电路一般由参考时钟、相位累加器、波形存储器、D/A转换器(DAC)和低通滤波器(LPF)组成[7]。其结构框图如图1-1所示。

图2 DDS基本结构框图

其中,f为参考时钟频率,K为频率控制字,N为相位累加器位数,A为波形存储器位数,D为波形存储器的数据位字长和D/A转换器位数。

DDS系统中的参考时钟通常由一个高稳定度的晶体振荡器来产生,用来作为整个系统各个组成部分的同步时钟。频率控制字(Frequency Control Word,FCW)实际上是二进制编码的相位增量值,它作为相位累加器的输入累加值。相位累加器由加法器和寄存器级联构成,它将寄存器的输出反馈到加法器的输入端实现累加的功能。在每一个时钟脉冲f,相位累加器把频率字K累加一次,累加器的输出相应增加一个步长的相位增量,由此可以看出,相位累加器的输出数据实质上是以K为步长的线性递增序列(在相位累加器产生溢出以前),它反映了合成信号的相位信息。相位累加器的输出与波形存储器的地址线相连,相当于对波形存储器进行查表,这样就可以把存储在波形存储器中的信号抽样值(二进制编码值)查出。在系统时钟脉冲的作用下,相位累加器不停的累加,即不停的查表。波形存储器的输出数据送到D/A转换器,D/A转换器将数字量形式的波形幅度值转换成所要求合成频率的模拟量形式信号,从而将波形重新合成出来。若波形存储器中存放的是正弦波幅度量化数据,那么D/A转换器的输出是近似正弦波的阶梯波,还需要后级的低通平滑滤波器进一步抑制不必要的杂波就可以得到频谱比较纯净的正弦波信号。图1-2所示为DDS各个部分的输出信号。

由于受到字长的限制,相位累加器累加到一定值后,就会产生一次累加溢出,这样波形存储器的地址就会循环一次,输出波形循环一周。相位累加器的溢出频率即为合成信号的频率。可见,频率控制字K越大,相位累加器产生溢出的速度越快,输出频率也就越高。故改变频率字(即相位增量),就可以改变相位累加器的溢出时间,在参考频率不变的条件下就可以改变输出信号的频率。

图3 DDS各部分输出波形

2.2 DDS主要性能指标

信号源的一个重要指标就足能输出频率准确町调的所需信号。一般传统的信号发生器采用谐振法,即用具有频率选择性的正反馈州路来产生正弦振荡,获得所需频率信号,但难以产生大量的具有同一稳定度和准确度的不同频率。利用频率合成技术制成的信号发生器,通常被称为频率合成器。频率合成器既要产生所需要的频率,又要获得纯净的信号。频率合成器的主要指标如下:

1.输出频率范围(fmin~fmax):指的是输出的最小频率和最大频率之问的变 化范围。

2.频率稳定度:指的是输出频率在一定时间间隔内和标准频率偏差的数值, 它分长期、短期和瞬时稳定度三种。

3.频率分辨率:频率合成器的输出频谱通常是不连续的。频率分辨率指的是输出频率的最小间隔。

4.频率转换时间:频率切换时间指的是输出由一种频率转换成另一频率达到稳定工作所需的时间。

5.频谱纯度:频谱纯度以杂散分量和相位噪声柬衡量,杂散分量为谐波分量和非谐波分量两种,主要由频率合成过程中的非线性失真产生,相位噪声是衡量输出信号相位抖动大小的参数。

6.调制性能:指的是频率合成器是否具有调幅(AM)、调频(FM)、调相(PM) 等功能。

2.3 DDS频率合成器优缺点

DDS频率合成器具有以下优点:(1)频率分辨率高,输出频点多,可达2N个频点(假设DDS相位累加器的字长是N);(2)频率切换速度快,可达us量级;(3)频率切换时相位连续;(4)可以输出宽带正交信号;(5)输出相位噪声低,对参考频率源的相位噪声有改善作用;(6)可以产生任意波形;(7)全数字化实现,便于集成,体积小,重量轻。

但DDS也有比较明显的缺点:(l)输出信号的杂散比较大;(2)输出信号的带宽受到限制。DDS输出杂散比较大,这是由于信号合成过程中的相位截断误差、D/A转换器的截断误差和D/A转换器的非线性造成的。当然随着技术的发展,这些问题正在逐步得到解决。如通过增加波形ROM的长度以减小相位截断误差,通过增加波形ROM的字长和D/A转换器的精度以减小D/A量化误差等。在比较新的DDS芯片中普遍都采用了12bit的D/A转换器。当然一味靠增加波形ROM的深度和字长的方法来减小杂散对性能的提高总是有限的。已有研究在对DDS输出的频谱做了大量的分析后,总结出了误差的领域分布规律建立了误差模型,在分析DDS频谱特性的基础上又提出了一些降低杂散功率的方法。可以通过采样的方法降低带内误差功率,可以通过随机抖动法提高无杂散动态范围,在D/A转换器的低位上加扰打破DDS输出的周期性,从而把周期性的杂散分量打散使之均匀化。

三.硬件电路设计

3.1设计要求

基于DDS与FPGA技术设计一个函数器,能够以稳定的频率产生三角波、梯形波、正弦波和方波,能够调频,调幅,方波能够调节占空比。设置一个波形选择开关,通过此开关可以选择以上各种不同种类的输出函数波形。

3.2 系统方案设计

采用DDS技术来合成波形不仅简单可靠、控制方便,而且可以实现可编程和全数字化。目前市场上有很多性能优良的专用DDS芯片,这些DDS芯片不仅有比较高的工作频率,内部集成了高精度的D/A转换器,并且还具备一定的调制功能。但DDS专用芯片中的波形存储器多采用只读存储器(Read Only Memory,ROM),在芯片出产以前已经将波形数据固化到ROM中,无法按用户需求更改波形数据以产生任意波形。

采用现场可编程逻辑阵列(Field Programmable Gate Array,FPGA)设计DDS电路比专用DDS芯片更具灵活性。因为只要通过改变FPGA内部波形存储器中的波形数据,就可以实现任意波形输出,这使得用FPGA来实现DDS具有相当大的灵活性。相比之下,FPGA所能实现的功能完全取决于设计需求,可以简单也可以复杂,另外,FPGA芯片还支持在系统升级,虽然在精度和速度上略有不足,但是基本上能满足绝大数系统的要求,并且,将DDS设计嵌入到FPGA内部所构成的系统中,其系统成本并不会增加多少,而专用DDS芯片的价格一般也比FPGA高。因此,采用FPGA来设计DDS系统具有较高的性价比。

幅度控制字波形输出方波、锯齿波模块调幅乘法器频率控制字频率字寄存器相位累加器正弦波形数据存储时钟信号

图4 系统设计流程图

3.3 功能模块设计 3.3.1分频模块

分频模块是将FPGA芯片内部的50兆赫兹的时钟脉冲进行2的从1次方到16次方的分频,然后取出16个中的一个。其部分设计程序如下: begin

process(clk) begin

if clk'event and clk='1' then if(qi=65535) then

qi<=\ else qi<=qi+1; end if; end if; end process; q<=qi(5);

3.3.2相位累加器

相位累加器是整个DDS的核心,它由一个加法器和一个寄存器构成。加法器的一个输入与寄存器输出相连,另一个输入是外部输入的频率控制字。这样,在每个时钟到达时,相位寄存器采样上个时钟周期内相位寄存器的值与频率控制字之和,并作为相位累加器在这一时钟周期的输出。频率控制字决定了相应的相位增量,相位累加器则不断地对该相位增量进行线性累加,当相位累加器加满量时就会产生一次溢出,从而完成一个周期性的动作,这个动作周期即是DDS合成信号的一个频率周期。该模块可使用Altera提供的宏模块LPM_ADD_SUB和LPM_FF生成。

图5 相位累加器

3.3.3波形ROM查找表

波形ROM模块由ROM:1-port宏模块生成,其地址线的位宽为9位,数据线的位宽为8位,即一个周期的波形数据有512个,每个数据占8位,其输出可直接DAC0832。ROM中的MIF数据文件可使用Mif_Maker2010.exe软件生成。

图6 正弦波ROM查找表

图7 三角波ROM查找表

图8 方波ROM查找表

3.3.4三选一输出波形选择器

该波形选择器由两位输入拨码开关控制,用于输出波形的选择。当WS为00时,输出正弦波;当WS为01时,输出方波;当WS为10时,输出三角波;当WS为11时,不输出波形。

图9 三选一输出波形选择器

程序如下:

port (keya,keyb:in std_logic;

d_in1,d_in2,d_in3,:in std_logic_vector(7 downto 0);

d_out:out std_logic_vector( 7 downto 0)); end wav_sel;

architecture behave of wav_sel is

signal key:std_logic_vector(1 downto 0); begin

key<=keya&keyb; with key select

d_out<=d_in1 when \ d_in2 when \ d_in3 when \

\

3.3.5数模转换模块

8位dac的程序及Symbol: library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity dac0832 is port (

clk :in std_logic; WR_n :out std_logic;

datin:in std_logic_vector(7 downto 0); Analog_D:out std_logic_vector(7 downto 0) );

end dac0832;

architecture rt1 of DAC0832 is begin

WR_n <= '0' ;

process (clk ) begin

if clk'event and clk = '1' then Analog_D <= datin; end if;

end process ; end rt1;

图10 数模转换模块

图11系统整体原理图截图

四 软件仿真

4.1方波模块

部分程序如下: port(fclk:in std_logic;

reset:in std_logic;

d_out:out std_logic_vector(7 downto 0)); end fangbo;

architecture arch of fangbo is

signal da:std_logic_vector(7 downto 0); begin

process(da) begin

if da<127 then

d_out<=\ else d_out<=\ end if; end process;

process(fclk,reset,da) begin

if reset='1' then da<=\ else

if fclk'event and fclk='1' then if da=\ da<=\ else

da<=da+1;

4.2三角波模块

部分程序如下:

port (fclk:in std_logic; reset:in std_logic;

d_out : out std_logic_vector(7 downto 0)); end sanjiao;

architecture arch of sanjiao is

signal da : std_logic_vector(7 downto 0); begin

process (fclk,reset,da) variable porn :std_logic; begin

if reset='1' then da<=\ d_out<=\porn:='0'; else

if fclk='1' and fclk'event then if porn='0' then

if da<=126 then da<=da+1; else porn:='1'; end if; else

if da>0 then da<=da-1; else porn:='0'; 其波形图如下:

4.3正弦波模块

设计程序如下: case tmp is

when 00=>d_out<=255; when 01=>d_out<=254; when 02=>d_out<=252; when 03=>d_out<=249; when 04=>d_out<=245; when 05=>d_out<=239; when 06=>d_out<=233; when 07=>d_out<=225; when 08=>d_out<=217; when 09=>d_out<=207; when 10=>d_out<=197; when 11=>d_out<=186; when 12=>d_out<=174; when 13=>d_out<=162; when 14=>d_out<=150; when 15=>d_out<=137; when 16=>d_out<=124; when 17=>d_out<=112; when 18=>d_out<=99; when 19=>d_out<=87; when 20=>d_out<=75; when 21=>d_out<=64; when 22=>d_out<=53; when 23=>d_out<=43; when 24=>d_out<=34; when 25=>d_out<=26; when 26=>d_out<=19; when 27=>d_out<=13; when 28=>d_out<=8; when 29=>d_out<=4; when 30=>d_out<=1; when 31=>d_out<=0; when 32=>d_out<=0; when 33=>d_out<=1; when 34=>d_out<=4; when 35=>d_out<=8;

when 36=>d_out<=13; when 37=>d_out<=19; when 38=>d_out<=26; when 39=>d_out<=34; when 40=>d_out<=43; when 41=>d_out<=53; when 42=>d_out<=64; when 43=>d_out<=75; when 44=>d_out<=87; when 45=>d_out<=99; when 46=>d_out<=112; when 47=>d_out<=124; when 48=>d_out<=137; when 49=>d_out<=150; when 50=>d_out<=162; when 51=>d_out<=174; when 52=>d_out<=186; when 53=>d_out<=197; when 54=>d_out<=207; when 55=>d_out<=217; when 56=>d_out<=225; when 57=>d_out<=233; when 58=>d_out<=239; when 59=>d_out<=245; when 60=>d_out<=249; when 61=>d_out<=252; when 62=>d_out<=254; when 63=>d_out<=255; when others=>null; end case; end if;

d<=conv_std_logic_vector(d_out,8); end process; end sin_arc;

其波形图如下:

五.系统调试

5.1 嵌入式逻辑分析

随着逻辑设计复杂性的不断增加,仅依赖于软件方式的仿真测试来了了解设计系统

的硬件功能和存在的问题已远远不够了,而需要重复进行的硬件系统的测试也变得更为困难。为了解决这些问题,设计者可以将一种高效的硬件测试手段和传统的系统测试方法相结合。这就是嵌入式逻辑分析仪的使用。

SignalTapII是集成在QuartusII中的嵌入式逻辑分析仪,设计者可以通过SignalTapII在线观察FPGA片内的信号变化,为验证设计提供了非常强大的工具。SignalTapII与仿真是有区别的,仿真是在假设的情况下进行,而SignalTapII是实际运行中观察信号,两者有本质的区别。另外,SignalTapII本身集成在QuartusII中,不需要额外付费,而且使用非常方便。 SignalTapII的工作原理是把要观察的信号预先保存在FPGA的片内RAM中,然后再通过USB‐Blaster传输到计算机,所以可观察信号的数量与FPGA剩余的片内RAM有关,剩余的片内RAM越多,可观察的信号也就越多。 5.2 仿真波形图 1. 方波

2. 三角波

3. 正弦波

5.3 实验结果

1、方波

方波调节占空比:

2、三角波

三角波调节频率和幅度:

3、正弦波

正弦波调节频率和幅度:

六.实验总结 6.1 总结

本次试验是第一次接触QuartusⅡ软件,从一开始按照搜集的资料一点点按部就班的运行软件,到后来不断调试就不断熟练。

感觉只要软件仿真正确后,硬件仿真和实物仿真就简单多了,只是每一步骤都需要很细心。其实每次试验都有这样的感觉,就是很多软件硬件,我们都是用的国外货或者是汉化的国外货,我在想是我们没有必要研制自己的软件,还是我们的能力不行?还是软件作为一种工具,本身已经没有了可以说明的问题? 我本身是具备科研的基本素养的,在实验过程中一般不会感到很压抑,即使很多还不懂,也是还有很大的好奇心,虽然不知道所做的东西未来会不会用的到,但是既然动手花时间做了,我就想做好。 参考文献

[1] Douglas L.Perry.VHDL编程实例(第四版)[M].北京:电子工业出版社.

[2] 张亦华.数字电路EDA入门——VHDL程序实例集[M].北京:北京邮电大学出版社. [3] 赵新民.智能仪器设计基础[M].哈尔滨:哈尔滨工业大学出版社.

[4] 卢毅,赖杰.VHDL与数字电路设计[M].北京:科学出版社,2001:256-261.

[5] 褚振勇,翁木云.FPGA设计及应用[M].西安:西安电子科技大学出版社,2003:1-22. [6] 潘松,黄继业.EDA技术实用教程[M].北京:科学出版社,2003:1-14.

六.实验总结 6.1 总结

本次试验是第一次接触QuartusⅡ软件,从一开始按照搜集的资料一点点按部就班的运行软件,到后来不断调试就不断熟练。

感觉只要软件仿真正确后,硬件仿真和实物仿真就简单多了,只是每一步骤都需要很细心。其实每次试验都有这样的感觉,就是很多软件硬件,我们都是用的国外货或者是汉化的国外货,我在想是我们没有必要研制自己的软件,还是我们的能力不行?还是软件作为一种工具,本身已经没有了可以说明的问题? 我本身是具备科研的基本素养的,在实验过程中一般不会感到很压抑,即使很多还不懂,也是还有很大的好奇心,虽然不知道所做的东西未来会不会用的到,但是既然动手花时间做了,我就想做好。 参考文献

[1] Douglas L.Perry.VHDL编程实例(第四版)[M].北京:电子工业出版社.

[2] 张亦华.数字电路EDA入门——VHDL程序实例集[M].北京:北京邮电大学出版社. [3] 赵新民.智能仪器设计基础[M].哈尔滨:哈尔滨工业大学出版社.

[4] 卢毅,赖杰.VHDL与数字电路设计[M].北京:科学出版社,2001:256-261.

[5] 褚振勇,翁木云.FPGA设计及应用[M].西安:西安电子科技大学出版社,2003:1-22. [6] 潘松,黄继业.EDA技术实用教程[M].北京:科学出版社,2003:1-14.

本文来源:https://www.bwwdw.com/article/x738.html

Top