logo资料库

基于FPGA的DDS设计.doc

第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
资料共6页,全文预览结束
基于 FPGA 的 DDS 设计 【摘要】本文主要讨论了Verilog语言的基于DDS的波形发生器的设计。从设计要 求入手,本文给出了DDS的详细设计过程,包括各个模块的设计思想,电路图, Verilog语言程序代码。其大致思想为通过频率控制字和相位控制字去控制正弦 函数的ROM存储表的地址并对应着得到其幅度值,最终达到输出需要波形的目的。 【关键词】FPGA DDS Verilog 波形发生器 Quartus II 1.设计要求 (1)设计并实现一个可产生正弦波、方波波形发生器; (2)波形发生器的输出频率是在 10M—100M 之间,步进频率是 500HZ; 2.设计原理及分析 2.1DDS 基本原理 DDS 的基本原理是利用采样定量,通过查表法产生波形。DDS 的结构有很多 种,其基本的电路原理可用图 2-1 来表示。 图 2-1 DDS 基本电路原理图 其中,相位累加器由 N 位加法器与 N 位累加寄存器级联构成如图 2-2: 图 2-2 相频累加器 每来一个时钟脉冲 cf ,加法器将控制字 k 与累加寄存器输出的累加相位数据 相加,把相加后的结果送到累加寄存器的数据输入端,以使加法器在下一个时钟 1
脉冲的作用下继续与频率控制字相加。这样相位累加器在时钟作用下,不断对频 率控制字进行线性相位加累加。 由此可以看出,相位累加器在每一个时钟输入时,把频率控制字累加一次, 相位累加器输出的数据就是合成信号的相位,相位累加器的输出频率就是 DDS 输出的信号频率。 接着,把相位累加器输出的数据作为波形存储器(ROM)的相位取样地址。 这样就可把存储在波形存储器内的波形抽样值(二进制编码)经查找表查出(可 以看成是一种映射),完成相位到相应幅值转换。 2.2 频率选择 基于 DDS 的波形发生器,其输出波形的频率由两方面决定。一方面是由频率 控制字,即波形输出的步长决定;另一方面是由波形点输出的固有频率决定。 DDS 输出信号的频率与基准时钟频率的关系由下式给定: 其中 cf 为基准时钟频率,2N 为波形存储器的字数,N 为相位累加器的位数, k 为频率控制字。一般的 k 小于 N 。假设基准时钟频率为 200MHz,累加器为 12 位, k=500,则 f out 的输出刚好可也满足为 11.2MHZ-96MHZ。 2.3 波形选择 本设计要实现三角波和正弦波这两种波形的输出。所以,在整个模块设定了 一个输入控制断。通过查询这个输入控制端的电平的高低来确定输出正弦波还是 输出三角波。其实质还是利用了 rom 表完成了对相同相位的不同幅度的输出。 3.各模块代码及电路原理图 3.1.频率控制字 /* 该文件主要用来实现频率控制字作用下的频率输出的功能,其中 sel 是用来 选择频率输出的,f_out 是用来输出频率的*/ module f_ctr(sel,f_out); input [2:0]sel; output [24:0]f_out; reg [24:0]f_out; always @(*) begin 2
case(sel) 3'b001:f_out<= 25'b0100110001001011010000000; 3'b010:f_out<= 25'b111001001110000111000000; 3'b011:f_out<= 25'b1001100010010110100000000; 3'b100:f_out<= 25'b1011111010111100001000000; 3'b101:f_out<= 25'b1110010011100001110000000; endcase end endmodule 图 3-1 频率控制输出 3.2 相频累加器/相位控制字 /*实现累加器的功能,其中有个反馈输入,用中间寄存器来实现缓存*/ module full_adder(a,clk,y,rstn); parameter m = 25; parameter n = 12; input [m-1:0]a; input clk,rstn; output [n-1:0]y; reg [n-1:0]y; reg [n-1:0]b; always@(posedge clk or negedge rstn) begin if(!rstn) begin y<=12'b0; b<=12'b0; end else begin y<=a[24:13]+b; b<=b; end end endmodule 3
图 3-2 输出地址波形 3.3 相/幅转换(rom 查询)和波形选择 WIDTH=12; DEPTH=4096; ADDRESS_RADIX=UNS; DATA_RADIX=UNS; CONTENT BEGIN [0..2047] : [2048..4095] END; 4095; : 0; depth=4096; widths=12; N=0:1: 4096; s=3*sin(pi*N/2048); fidc=fopen('D:/quarteus 3.3.2 原理图模块 II/FPGhomework/sin.mif','wt'); fprintf(fidc,'depth=%d;\n',dept h); fprintf(fidc,'width=%d;\n',widt hs); fprintf(fidc,'address_radix=dec ;\n'); fprintf(fidc,'data_radix = dec;\n'); fprintf(fidc,'Content Begin\n'); for(x=1:depth) fprintf(fidc,'%d:%d;\n',x-1, round(2047*sin(pi*(x-1)/ 2048)+2048)); end fprintf(fidc,'end;'); fclose(fidc); 正弦波 rom 生成代码 方波 mif 生成代码 4
3.4 顶层例化电路原理图 图 3-3 波形选择原理图 引脚功能说明: 1) 输入引脚 图 3-4 顶层原理图  clk:时序同步时钟。该时钟主要用于相位累加器和 rom 表查询的同 时序。它决定了相位累加的速度,也决定了幅度点输出的速度。  f_ctr:频率选择控制字。控制频率的输出。  rstn:电路工作复位端,低电平有效。  boxing_ctr:波形选择控制位。为高电平时输出正弦波,为低电平时 输出三角波。 2) 输出引脚  boxing_out:波形输出端。该端口为 12 位输出端口。幅度值从-2048 到+2047. 4 各模块仿真 4.1 频率控制字 图 4-1 频率控制字的频率输出 5
4.2 相频累加器/相位控制字 图 4-1 查询地址的波形输出 4.4 最终仿真图 4.4.1 正弦波的波形 4.4.2 方波的波形 图 4-1 正弦波的波形输出 5 结论 图 4-2 方波的波形 与传统的频率合成方法相比,DDS 合成信号具有频率切换时间短、频率分辨 率高、相位变化连续等诸多优点。使用单片机灵活的控制能力与 FPGA 器件的高 性能、高集成度相结合,可以克服传统 DDS 设计中的不足,从而设计开发出性能 优良的 DDS 系统。 6
分享到:
收藏