1、- - 1 - - 课 程 设 计 报 告 题 目 : 学 院 : 班 级 : 学生(学号) : 学生(姓名) : 学生(学号) : 学 生(姓名) : - 2 - 摘 要 DDS采用全数字技术,并从 相位角度 出发进行 频率合成 , DDS的设计大多是应用 HDL 对其进行逻辑描述,整个设计可以实现参数改变和设计移植。 利用时钟信号作为地址计数器的计数时钟,地址计数器的输出作为波形存储器的扫描地址,波形存储器输出相应地址的数字幅度序列,再经过 数模 转换成模拟阶梯波形,最后通过低通滤波器平滑滤波得到最后的输出 波形 本文所设计的内容就是基于 Altera 公司的现场可编程门阵列( FPGA)
2、实现数字信号发生器的设计, FPGA 具有密度高,功耗低,体积小,可靠性高等特点,设计时可以不必过多考虑具体硬件连接;本设计中应用 Verilog 硬件描述语言进行描述,使该数字信号发生器可以产生正弦波、方波、三角波、锯齿波四个独立的波形,并能对所产生的四种波形的频率和进行调节。设计输出频率 范围是 1kHz10kHz,步进是 1KHZ,测量的结果在数码管上显示 。 关键词: FPGA DDS 相位累加 ROM表 Verilog - 3 - 目 录 i. 课程设计目的 4 ii. 设计任务与要求 4 iii. 方案设计与论证 5 iv. 单元电路设计与参数计算 9 v. 遇到问题的解决方 法
3、17 vi. 结论与心得 18 vii. 参考文献 18 - 4 - 题目:波形发生器 一、 课程设计目的 1)巩固和加深所学数字电子技术课程的基本知识,提高综合运用所学知识的能力; 2)提高独立解决工程实际问题的能力 3)培养学习能力, 掌握 FPGA 设计的方法和技巧。掌握 verilog 语言。 4)调试电路,发现问题。解决问题。 二、 设计任务与要求 1、 显示学号 2. 根据按键输出波形 具体要求: 1、 采用数码管显示 2、 循环显示 2个人的学号后四位 3、 根据开关输入不同,分别输出正弦波、方波、三角波 (频率 =1KHz) 4、 根据按键改变频率 (频率变化范围 :1KHz-
4、10KHz,每次频率变化 1KHz) 5、 输出频率在数码管上显示 三、 方案设计与论证 一、 学号循环变化的实现: 方案一 :采用计数器计数,分别控制四个数码管移位循环显示 优点:方案简单,容易实现。 - 5 - 方案二 :直接给数码管赋值显示学号,设计时钟频率,控制跳变。 我们选择方案一。 开发板硬件结构如上图所示。 二、 波形变化及频率变换的实现: 方案一 : (一) 总体方案实现及系统框图 该设计以 FPGA开发平台为核心,将各波形的幅值相位量化数据存储在 ROM内,按照设定频率,以相应频率控制字 k为步进,对相位进行累加,以累加相位值作为地址码读取存放在存储器内的波形数据,经 D A
5、转换和幅度控制、滤波即可得到所需波形。波形发生器采取全数字化结构,用硬 件描述语言 Verilog 设计实现其频率可调可显示。经开发平台的 D A 转化和外加滤波整形处理波形数据,理论上能够实现任意频率的各种波形。 - 6 - DDS 电路一般由参考时钟、相位累加器、波形存储器、 D/A 转换器( DAC)和低通滤波器( LPF)组成 7。其结构框图如图 2.5 所示。 波形存储器 DAC参考时钟LPFN位寄存器N位加法器相位累加器频率控制字 K N N A D ofN图 2.5 DDS 基本结构框图 其中, cf 为 参考时钟频率, K 为频率控制字, N 为相位累加器位数, A 为波形存储
6、器位数, D 为波形存储器的数据位字长和 D/A 转换器位数。 (二) 直接数字频率合成 技术原理 DDS 系统中的参考时钟通常由一个高稳定度的晶体振荡器来产生,用来作为整个系统各个组成部分的同步时钟。频率控制字( Frequency Control Word, FCW)实际上是二进制编码的相位增量值,它作为相位累加器的输入累加值。相位累加器 由加法器和寄存器级联构成,它将寄存器的输出反馈到加法器的输入端实现累加的功能。在每一个时钟脉冲 cf ,相位累加器把频率字 K 累加一次,累加器的输出相应增加一个步长的相位增量,由此可以看出,相位累加器的输出数据实质上是以 K 为步长的线性递增序列(在相
7、位累加器产生溢出以前),它反映了合成信号的相位信息。相位累加器的输出与波形存储器的地址线相连,相当于对波形存储器进行 查表,这样就可以把存储在波形存储器中的信号抽样值(二进制编码值)查出。在系统时钟脉冲的作用下,相位累加器不停的累加,即不停的查表。波形存储器的输出数据送到 D/A 转换器, D/A 转换器将数字量形式的波形幅度值转换成所要求合成频率的模拟量形式信号,从而将波形重新合成出来。若波形存储器- 7 - 中存放的是正弦波幅度量化数据,那么 D/A 转换器的输出是近似正弦波的阶梯波,还需要后级的低通平滑滤波器进一步抑制不必要的杂波就可以得到频谱比较纯净的正弦波信号。图 2.6 所示为 D
8、DS 各个部分的输出信号。 由于受到字长的限制,相位累加器累加 到一定值后,就会产生一次累加溢出,这样波形存储器的地址就会循环一次,输出波形循环一周。相位累加器的溢出频率即为合成信号的频率。可见,频率控制字 K 越大,相位累加器产生溢出的速度越快,输出频率也就越高。故改变频率字(即相位增量),就可以改变相位累加器的溢出时间,在参考频率不变的条件下就可以改变输出信号的频率。 相位累加器输出波形存储器输出 DAC 输出 LPF 输出图 2.6 DDS 各部分输出波形 DDS 系统的优点有很多,它的很多特性是其他频率合成技术所没有的,其中最主要的特性有以下三点: ( 1) DDS 技术可以用 于产生
9、任意波形 基于前面对 DDS 系统的基本结构分析,很容易理解,只要改变存储在波形存储器中的波形数据,就可以改变输出波形。所以对于任何周期性波形,只要满足采样定理,都可以利用 DDS 技术来实现。 ( 2) DDS 系统具有很高的频率分辨率 DDS 系统输出频率的分辨率和频点数随相位累加器的位数成指数增长,由式 (2-21) 可知,在系统时钟频率不变的情况下,只要增大相位累加器的位数 N ,就可以得到几乎是任意小的频率分辨率,可以满足精 细频率控制的要求。 DDS 如此精细的频率分辨率,使其输出频率已十分逼近连续变化。 ( 3) 输出频率切换速度快且相位保持连续 与锁相频率合成相比,由于 DDS
10、 系统是一个开环系统,所以当一个新的频率控制字送到时,它会迅速合成这个新的频率,实际的频率切换时间可以达 ns 级。同时,频率切换时, DDS 系统的输出波形的相位是连续的。 DDS 系统的频率字改变时,输出波形的变化过程可以用图 2.12 描述。 - 8 - 相位累加器输出值变化示意曲线输出波形变化曲线P图 2.12 频率控制字改变时累加器的输出值和输出波形的变化(仿真) 在波 形输出到 P 点时,频率字发生了改变(变小),相位累加器的累加值即相位步进变小,其输出值斜率也变小,系统的输出波形的频率也在同时刻变小。 DDS系统在频率字发生改变后的一个时钟周期,其输出频率就可以就转换到了新的频率
11、上,也即在频率字的值改变以后,累加器在经过一个时钟周期后就按照新的频率字进行累加,开始合成新的频率。所以我们可以认为 DDS 的频率切换是在一个系统时钟周期内完成的,系统时钟频率越高,切换速度越快。 另外,从前面对 DDS 技术原理的分析可知,要改变输出频率 ,实际上改变的是频率字,也就是相位增量。当频率字的值从 1K 改变为 2K 之后,相位累加器是在已有的累积相位上, 再 对 2K 进行累加,相位函数曲线是连续的。从图 2.12 也可以看出,只是在频率字改变的瞬间相位函数曲线的斜率发生了突变,相位值并没有发生跳跃,因此 DDS 能够在频率切换的过程中保持相位连续,输出波形能够平滑地从一个频
12、率过渡到另外一个频率。 (三)系统组成模块 1、顶层模块 顶层模块是系统程序的主模块,它负责将 rom 查找表、相位累加等模块组装在一起,通过调用的关系使它们组合成为一个有机的整体。在顶层模块中,定义了参考时钟的输入,复位端口,波形输出、频率控制字等。 - 9 - 2、相位累加器模块 相位累加器是决定系统 性能的关键部分,主要是利用频率控制字和相位控制字来累加出寻址地址。相位累加器在基准频率信号 clk的控制下以频率控制字 data 为步长进行累加运算,产生需要的频率控制数据,在时钟的控制下把累加的结果作为波形存储器 ROM的地址,实现对波形存储器 ROM的寻址。 3、查找表 本模块实现的是一
13、个 rom存贮器,用于存储采样的波形数据,并提供地址查找的功能。具体实现的过程: 1)首先使用数学工具计算得到波形采样点,生成 mif 文件 2)导入数据采样点,给每一个采样点分配地址,并提供外部寻址的接口,此过程可以通过 Quartas来辅助完成。 方案二:采用 VHDL 语言直接编程实现 我们选择 方案一实现设计要求。 四、 单元电路设计与参数计算 一: 16为 DA转换电路设计 - 10 - 根据 DA 转换的原理,设计 R-2R电阻网络,实现数字量到模拟量的转换。电路图如上所示。 二: DDS 输出频率关系式计算 N=32 fc=50MHz 输出频率 1kHz 1000=M*50000
14、000/232 M=85899.35 输出频率 2kHz 2000=M*50000000/232 M=171798.7 输出频率 3kHz 3000=M*50000000/232 M=257698.0 输出频率 4kHz 4000=M*50000000/232 M=343597.4 输出频率 5kHz 5000=M*50000000/232 M=429496.7 输出频率 6kHz 6000=M*50000000/232 M=515396.1 输出频率 7kHz 7000=M*50000000/232 M=601295.4 输出频率 8kHz 8000=M*50000000/232 M=687194.8 输出频率 9kHz 9000=M*50000000/232 M=773094.1 输出频率 10kHz