1、课程设计任务书20122013学年第1学期一、课程设计题目:基于FPGA的DDS信号发生器设计二、课程设计内容(含技术指标) 利用DDS技术产生稳定的正弦波、方波和三角波,输出频率为1Hz200KHz,且频率可调,步进为1Hz、100Hz、1KHz和10KHz,峰值为05V; 显示电路用来显示输出信号的参数; 44键盘用来设定频率、步进、清零、确认等功能;用Verilog HDL进行建模和模拟仿真,再利用FPGA进行实现。三、进度安排序号名 称时 间1掌握相关FPGA最小系统的知识一 天2掌握用于设计DDS信号发生器的Verilog HDL编程知识一 天3掌握矩阵键盘、DA芯片、功率放大电路和
2、滤波电路的设计一天4根据DDS信号发生器的工作原理设计电路图一 天5学会借用电子线路CAD正确绘制电路图;一 天6掌握电子器件的安装工艺及焊接技术半 天7掌握DDS信号发生器的软件下载与调试一 天8了解电子电路板的制作过程半 天9学习电路原理图及印制电路板图的读图方法一 天10掌握DDS信号发生器的测试一 天11书写电子技术课程设计报告一 天 四、基本要求1.基本功能:利用DDS技术产生稳定的正弦波、方波和三角波,用数码管显示频率。2.扩展功能:能产生ASK、FSK和PSK等调制信号,输出用12864液晶显示信号的波形、频率和幅度。3写出设计报告:不少于5000字,统一复印封面并用4纸写出报告
3、。封面、课程设计任务书摘要,关键词(中英文)方案选择,方案论证系统功能及原理。(系统组成框图、电路原理图)各模块的功能,原理,器件选择结果分析设计小结附录-参考文献 2012年9 月1日 摘 要 波形发生器己成为现代测试领域应用最为广泛的通用仪器之一,代表了波形发生器的发展方向。随着科技的发展,对波形发生器各方面的要求越来越高。近年来,直接数字频率合成器(DDS)由于其具有频率分辨率高、频率变换速度快、相位可连续变化等特点,在数字通信系统中已被广泛采用而成为现代频率合成技术中的佼佼者。本次设计的是多功能信号发生器,它能够产生方波,三角波,锯齿波和正弦波四种基本波形。结合DDS技术,通过对FPG
4、A的编程实现产生多种波,本电路是通过键盘扫描判断,进入相应的功能程序,然后实现频率调节,波形转换,幅度控制的。本次设计中我负责的是波形输出模块,通过调节要输出方波,三角波,锯齿波和正弦波四种基本波形。关键字:波形发生器,直接数字频率合成器, 现场可编程门阵列 ABSTRACT Waveform generator has become one of the most popular instruments in a modern testing field, representing the development direction of waveform generator.With th
5、e development of science and technology, the waveform generator for various aspects of increasingly high demand.In recent years, direct digital frequency synthesizer ( DDS ) since it has high frequency resolution, frequency conversion speed, phase can be changed continuously wait for a characteristi
6、c, in a digital communication system has been widely used and become the leader in the modern synthesis technology. This design is a multifunctional signal generator, which can produce square wave, triangle wave, sawtooth wave and sine wave four basic waveforms. Combined with the technology of DDS,
7、through the FPGA programming to generate multiple waves, this circuit is through the keyboard scan, the entry corresponding to the function of the procedure, and then realizing frequency modulation, a waveform conversion, amplitude control. Keywords:Waveform generator,DDS,FPGA1.方案选择与方案论证数据输入:方案一:4x4
8、矩阵键盘优点:由8个IO口检测16个按键,可以大大节省IO口资源。缺点:控制时序较复杂,增加编程和调试的难度。方案二:独立按键优点:控制时序较简单,较易于编程与调试。缺点:比较浪费IO口资源。方案三:拨码开关优点:控制时序简单,易于编程和调试。缺点:比较浪费IO口资源。 通过比较各种因素,我选择方案一,波形输出:方案一:存储波形数据的ROM/RAM + DAC0832优点:1. 可以显示复杂波形2. 可以有效控制输出波形的频率,幅度及相位3. 节省FPGA内部的逻辑资源4. 可以简单的切换波形5. 使波形输出方式单一化,降低了编程难度缺点:要消耗一定的ROM/RAM资源方案二:存储波形数据的R
9、OM/RAM + 分频器输出矩形波 + DAC0832优点:1.可以显示复杂波形2.可以有效控制输出波形的频率,幅度及相位3.节省FPGA内部的逻辑资源4.可以较简单的切换波形缺点:矩形波的频率,幅度和相位的调节需要另设相位累加电路,消耗一定的逻辑资源方案三:case语句 + 分频器输出矩形波 + DAC0832优点:在数据传输的反应速度上,在所需速度很快时占优势缺点:1. 大量浪费FPGA内部的逻辑资源2. 波形数据较大时,会给代码的调试和维护带来不便。方案四:存储波形数据的ROM/RAM + 分频器输出矩形波 + 计数器输出锯齿波和三角波 + DAC0832优点:1.可以显示复杂波形2.可
10、以有效控制输出波形的频率,幅度及相位缺点:每种波形都需要另设相位累加电路来控制其频率,相位和幅度,消耗较多的逻辑资源方案五:case语句 + 分频器输出矩形波 + 计数器输出锯齿波和三角波 + DAC0832。优点:在数据传输的反应速度上,在所需速度很快时占优势。缺点:1.大量浪费FPGA内部的逻辑资源。2.波形数据较大时,会给代码的调试和维护带来不便。为了减小设计周期,减小编程难度,便于后期的调试工作,而且能方便的对幅度和频率进行调节,我选择方案一。综上几种方案,我们组采用了数据输入的方案一,4x4矩阵键盘,由8个IO口检测16个按键,可以大大节省IO口资源。波形输出的方案二,存储波形数据的
11、ROM/RAM + 分频器输出矩形波 + DAC0832 可以显示复杂波形,有效控制输出波形的频率,幅度及相位,容易达到我们需要的效果,可以较简单的切换波形,而且节省了FPGA内部的逻辑资源。2.系统功能与原理2.1 DDS的基本原理DDS技术是一种把一系列数字量形式的信号通过DAC转换成模拟量形式的信号的合成技术,它是将输出波形的一个完整的周期、幅度值都顺序地存放在波形存储器中,通过控制相位增量产生频率、相位可控制的波形。DDS电路一般包括基准时钟、相位增量寄存器、相位累加器、波形存储器、D/A转换器和低通滤波器(LPF)等模块,如图1.1所示。相位增量寄存器寄存频率控制数据,相位累加器完成
12、相位累加的功能,波形存储器存储波形数据的单周期幅值数据,D/A转换器将数字量形式的波形幅值数据转化为所要求合成频率的模拟量形式信号,低通滤波器滤除谐波分量。整个系统在统一的时钟下工作,从而保证所合成信号的精确。每来一个时钟脉冲,相位增量寄存器频率控制数据与累加寄存器的累加相位数据相加,把相加后的结果送至累加寄存器的数据输出端。这样,相位累加器在参考时钟的作用下,进行线性相位累加,当相位累加器累加满量时就会产生一次溢出,完成一个周期性的动作,这个周期就是DDS合成信号的一个频率周期,累加器的溢出频率就是DDS输出的信号频率。相位累加器输出的数据的高位地址作为波形存储器的地址,从而进行相位到幅值的
13、转换,即可在给定的时间上确定输出的波形幅值。 图1 DDS原理图 波形存储器产生的所需波形的幅值的数字数据通过D/A转换器转换成模拟信号,经过低通滤波器滤除不需要的分量以便输出频谱纯净的所需信号。信号发生器的输出频率fo可表示为: ( 1.1) 式中为系统时钟,为系统分辨率,N为相位累加器位数,M为相位累加器的增量。参数确定及误差分析.2.2 参数确定首先确定系统的分辨率,最高频率,及最高频率下的最少采样点数根据需要产生的最高频率以及该频率下的最少采样点数,由公式 (1.2)确定系统时钟的下限值。同时又要满足分辨率计算公式 (1.3)综合考虑决定的值。选定了的值后,则由公式(1.3)可得,据此
14、可确定相位累加器位数N。然后由最高输出频率 (1.4)推出M,得出相位增量寄存器为S位。确定波形存储器的地址位数W,本系统中决定寄存个数据值,因此RAM地址为Z位。一般选用FPGA/CPLD器件作为DDS的实现器件,对于D/A转换器的选择,首先要考虑到D/A转换器的转换速率。要实现所需的频率,D/A的转换速度要大于,然后根据D/A转换器字长所带来的误差,决定D/A的位数。由此选择D/A转换器的型号。3.硬件电路设计3.1 分频器、信号发生器产生、控制和显示的总体结构图如图所示示波器时钟频率频率控制单元D/A四种波形选择单 元 图2 总体结构图外部输入一个50MHZ的时钟频率,经过频率控制单元控
15、制其频率在要求的范围内,由4选1数据选择器实现对输出波形的选择,再通过D/A转换模块,将数字信号转换成模拟信号在示波器上显示出来。3.2 总体原理图基于VHDL语言设计一个简易多功能信号发生器,通过选入输入信号,可以输出正弦波、三角波、方波和锯齿波四种波形信号。信号发生器的控制模块可以用数据选择器实现,四种信号的信号选择可以用4选1数据选择器实现。同时本设计使用原理图的方法,对正弦波、三角波、方波和锯齿波和4选1数据选择器元件进行调用。简易多功能信号发生器的原理图如下: 图3 总体原理图3.3 DDS的FPGA实现相位累加器与相位寄存器的设计相位累加器与相位寄存器主要完成累加,实现输出波形频率
16、可调功能。利用Quartus II可编程逻辑器件系统开发工具进行设计。首先,打开Quartus II软件,新建一个工程管理文件,然后在此工程管理文件中新建一个Verilog HDL源程序文件,并用硬件描述语言Verilog HDL编写程序实现其功能。在设计过程中,可在一个模块中描述。4.D/A转换电路 图4 D/A转换电路数据转换器输出的数据是数字形式的电压值,为实现数字电压值与模拟电压值之间的转换,系统还专门设计D/A转换电路,其D/A转换电路原理图如图3所示。4.软件设计 4.1 VHDL程序设计 系统软件的主要任务是:将送入的频率,相位差控制字,控制输出波形种类进处理得到三种不同的波形,
17、频率和相位差。首先是对DDS子程序进行设计,利用类属语句对输入频率字,相位字,累加器,正弦ROM表的地址位宽和数据进行说明,软件的主要任务是在累加器中按输入的频率字进行循环累加,将截断的数据与输入的相位字进行累加。4.2总程序流程设计图 图5 总程序流程图4.3子程序流程图图6 子程序流程图5.结果分析:5.1 波形仿真 图7 正弦波仿真图 图8 方波仿真图 图9 三角波仿真图5.2.输出波形: 正弦波 三角波 矩形波6.设计小结:本次设计以直接数字频率合成技术(DDS)为基础的波形信号发生器工作原理和设计过程,并在FPGA实验平台上设计实现了满足各功能指标的信号发生器。系统硬件除需外加滤波整
18、形电路外,其余部分均可在FPGA开发实验系统KH310上集成开发,系统软件可在Quartus下编写代码,实现数据信息处理和控制操作等功能。整体开发环境成熟,应用工具齐全,随着FPGA性价比的不断提高,基于FPGA平台开发信号发生器将逐步走向标准化、规模化和产品化。 在这次课程设计中,我的工作主要是相位累加器的底层模块的代码编写和调试和ROM定制,负责波形输出模块,能够完成顺利的完成对波形类型的输出,如:三角波、方波、正弦波。虽然在设计过程中遇到很多困难 ,不过在老师和同学的帮助得到了解决,通过这次设计也使我的动手能力得到加强,学会发现问题并通过查阅资料,与同学讨论请教老师,来解决问题。总之,我
19、在这次设计实践中受益匪浅,积累了经验。参考文献:【1】 姜雪松、张海风,可编程逻辑器件和EDA设计技术,北京:机械工业出版社,2004【2】潘松,黄继业主编,EDA技术实用教程【J】,科学出版社2002:321346.【3】彭文标,黄悦华.基于DDS技术的信号源设计与实现J.微计算机信息,2007(20):271-272.附录1: 信号发生器原理图附录2:信号发生器PCB图附录3:波形输出module ROM_READ(CLK50M,F,MOD,V,ROM_DATA); input CLK50M; /clock source 50Mhz - 20ns input 15:0F; /11,000,
20、000Hz input 1:0MOD; /tri,sin,01 input 7:0V; /voltage 050 output reg 7:0ROM_DATA; wire DIV_CLK; wire 15:0DIVP; wire 0:7tri_data; wire 0:7sin_data; wire 0:7toc_data; wire 0:7mtx_data; reg 6:0address; assign DIVP = 50000000 / (256*F); DivClk rom_clk(CLK50M,DIVP,DIV_CLK); TAG tri_rom(address,CLK50M,tri_
21、data); SIN sin_rom(address,CLK50M,sin_data); TOC toc_rom(address,CLK50M,toc_data); MTX mtx_rom(address,CLK50M,mtx_data); always(posedge DIV_CLK)begin if(address = 7b1111110) address = address + 1; else address = 7h00; end always(posedge DIV_CLK)begin/根据选取方案不同,删除对应语句 case(MOD) 2b00:ROM_DATA = (tri_data * V)/50;/三角波 2b01:ROM_DATA = (sin_data * V)/50;/正弦波 2b10:ROM_DATA = (toc_data * V)/50;/锯齿波 2b11:ROM_DATA = (mtx_data * V)/50;/矩形波 endcase endendmodule