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相位累加器