Verilog实现DDS 正弦波发生器

发布时间:2024-12-18  
	


DDS简介:

DDS 同 DSP(数字信号处理)一样,是一项关键的数字化技术。DDS 是直接数字式频率合成器(Direct Digital Synthesizer)的英文缩写。与传统的频率合成器相比,DDS 具有低成本、低功耗、高分辨率和快速转换时间等优点,广泛使用在电信与电子仪器领域,是实现设备全数字化的一个关键技术。

DDS 芯片的功能主要包括频率控制寄存器、高速相位累加器和正弦计算器三个部分。频率控制寄存器可以串行或并行的方式装载并寄存用户输入的频率控制码;而相位累加器根据频率控制码在每个时钟周期内进行相位累加,得到一个相位值;正弦计算器则对该相位值计算数字化正弦波幅度(芯片一般通过查表得到)。

DDS 芯片输出的一般是数字化的正弦波,因此还需经过高速 D/A 转换器和低通滤波器才能得到一个可用的模拟频率信号。关于想了解更多的 DDS 的相关知识, 大家可以到百度直接搜索。

下面主要来给大家介绍FPGA 程序的设计, DDS IP 的配置和调试。

编写 dds_wave 的 verilog 程序


`timescale 1ns / 1ps

//////////////////////////////////////////////////////////////////////////////////

// Company: 

// Engineer: 

// 

// Create Date:    10:01:33 07/17/2018 

// Design Name: 

// Module Name:    dds_wave 

// Project Name: 

// Target Devices: 

// Tool versions: 

// Description: 

//

// Dependencies: 

//

// Revision: 

// Revision 0.01 - File Created

// Additional Comments: 

//

//////////////////////////////////////////////////////////////////////////////////

module dds_wave(clk, key1,data,da_clk

    );

input clk, key1;

output [7:0] data;

output da_clk;

 

reg [15:0] key1_cout;

reg [7:0] data_o;

reg dds_we;

reg [28:0] dds_data;

reg [3:0] dds_freq = 0;

reg dds_we_req;

 

wire [7:0] sine;

 

assign sine_reg = sine[6:0];

assign da_clk = clk;

assign data = data_o;

 

//有符号数转化为无符号输出到DA

always @(posedge clk)

begin if(sine[7] == 1'b1)

  data_o <= sine - 128; else data_o <= sine + 128; end //控制DDS输出不同 always @(negedge clk) begin dds_we <= dds_we_req; case(dds_freq) 4'd0:

  dds_data <= 29'd107;  //10Hz:(dds_data*2^29/50*1000000)

 4'd1:

  dds_data <= 29'd1074; //100Hz:(dds_data*2^29/50*1000000)

 4'd2:

  dds_data <= 29'd10737; //1kHz:(dds_data*2^29/50*1000000)

 4'd3:

  dds_data <= 29'd53687; //5kHz:(dds_data*2^29/50*1000000)

 4'd4:

  dds_data <= 29'd107374; //10kHz:(dds_data*2^29/50*1000000)

 4'd5:

  dds_data <= 29'd536871; //50kHz:(dds_data*2^29/50*1000000)

 4'd6:

  dds_data <= 29'd1073742; //100Hz:(dds_data*2^29/50*1000000)

 4'd7:

  dds_data <= 29'd5368709; //500Hz:(dds_data*2^29/50*1000000)

 4'd8:

  dds_data <= 29'd10737418; //1mHz:(dds_data*2^29/50*1000000)  

 4'd9:

  dds_data <= 29'd21474836; //2mHz:(dds_data*2^29/50*1000000)

 4'd10:

  dds_data <= 29'd32212255; //3mHz:(dds_data*2^29/50*1000000)

 4'd11:

  dds_data <= 29'd42949672; //4mHz:(dds_data*2^29/50*1000000)

 4'd12:

  dds_data <= 29'd53687091; //5mHz:(dds_data*2^29/50*1000000)

 4'd13:

  dds_data <= 29'd64424509; //6mHz:(dds_data*2^29/50*1000000)

 4'd14:

  dds_data <= 29'd75161928; //7mHz:(dds_data*2^29/50*1000000)

 4'd15:

  dds_data <= 29'd85899346; //8mHz:(dds_data*2^29/50*1000000)

 default:

  dds_data <= 29'd107; // 1kHz:(dds_data*2^29/50*1000000)

 endcase

end

 

//按钮处理程序,改变DDS的输出频率

always @(posedge clk)

begin if(key1 == 1'b0)

  key1_cout <= 0; else if((key1 == 1'b1) & (key1_cout <= 16'hc350))

  key1_cout <= key1_cout + 1'b1; if(key1_cout == 16'hc349)

 begin

  dds_freq <=dds_freq + 1'b1;

  dds_we_req <= 1'b1;

 end

 else begin

  dds_freq <=dds_freq; dds_we_req <= 1'b0;

 end

end 

 

//DDS IP产生sin/cos波形

sin_cos sin_cos_inst(

 .clk(clk),

 .we(dds_we),

 .data(dds_data),

 .cosine(cosine),

 .sine(sine),

 .phase_out()

);

 

endmodule

程序通过检测开发板上按键 KEY1 ,如果按键 KEY1 每按下一次,寄存器 dds_freq 的值就会加 1, 程序就会对 DDS IP 写入一个 data 数据来改变相位的增加量,从而改变输出波形的频率。程序中设置了 16 种相位的增加量,所以可以让 DDS 产生 16 个不同频率的正弦波。在本实验的 DDS IP 的配置中,相位增加的数据宽度为 29 位,所以最小的频率输出为50Mhz/2^29, 约 0.093Hz。如果想让 DDS 输出 1Khz 的波形,就需要写入相位增加值10737 。相位增加值和频率的计算公式如下:

相位增加值=( fhz * 2^29 )/( 50 * 1000000)

仿真图如下:

*免责声明:本文由作者原创。文章内容系作者个人观点,转载仅为了传达一种不同的观点,不代表对该观点赞同或支持,如果有任何异议,欢迎联系。

‧  END
关注微信公众号『ZYNQ』,回复“加群”加入fpga/zynq技术交流群。后台回复“m”,查看更多精彩内容。


文章来源于:21IC    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>