FPGA基础之数字信号发生器(DDS)

一、DDS原理

最近在复习至芯培训课程的DDS部分,DDS的核心主要包括频率发生器、相位累加器和波形存储器三部分。波形存储器的作用是存储不同相位对应地址的波形值,相位累加器根据不同的相位产生对应的地址,用于选择不同的波形值,频率发生器根据输入频率产生频率控制字,其大小决定了相位累加器地址累加的速度,不同的累加速度决定了输出不同的频率大小。

二、本工程的相关说明

实现的功能如下:输入有四个按键,分别对应波形选择、幅度调节、频率加和频率减;输出有蜂鸣器、6个动态数码管和输出波形d_wave。当四个按键有任意一个按下时,蜂鸣器响,数码管显示波形、幅度和频率对应的值,d_dds模块输出对应波形。

1、顶层设计

顶层dds模块包括以下几个部分:按键处理模块(key_ctrl)、脉冲处理模块(flag_ctrl)、信号发生器核心部分(d_dds)、蜂鸣器模块(beep)和6个动态数码管显示模块。顶层RTL视图如下。
在这里插入图片描述dds顶层代码如下:

module dds(

	input		wire					clk,
	input		wire					rst_n,
	
	input		wire					key_sel,
	input		wire					key_amp,
	input		wire					key_fadd,
	input		wire					key_fsub,

	output	wire					beep,
	output	wire	[9:0]			d_wave,
	output	wire	[2:0]			sel,
	output	wire	[7:0]			seg
);

	wire					flag_s;
	wire					flag_a;
	wire					flag_fa;
	wire					flag_fs;
	
	wire		[1:0]		wave_sel;
	wire		[1:0]		wave_a;
	wire		[19:0]	wave_freq;
 
	key_ctrl key_ctrl_inst(

		.clk					(clk		),
		.rst_n				(rst_n	),
		                   
		.key_sel				(key_sel	),
		.key_amp				(key_amp	),
		.key_fadd			(key_fadd),
		.key_fsub			(key_fsub),
                         
		.flag_s				(flag_s	),
		.flag_a				(flag_a	),
		.flag_fa				(flag_fa	),
		.flag_fs				(flag_fs	)
	);

	flag_ctrl flag_ctrl_inst(

		.clk					(clk			),
		.rst_n				(rst_n		),
		                   
		.flag_s				(flag_s		),
		.flag_a				(flag_a		),
		.flag_fa				(flag_fa		),
		.flag_fs				(flag_fs		),
		                   
		.wave_sel			(wave_sel	),
		.wave_a				(wave_a		),
		.wave_freq			(wave_freq	)
	);

	d_dds d_dds_inst(

		.clk					(clk			),
		.rst_n				(rst_n		),
		                   
		.wave_sel			(wave_sel	),
		.wave_a				(wave_a		),
		.wave_freq			(wave_freq	),
		                   
		.d_wave				(d_wave		)
	);	
	
	beep beep_inst(

		.clk					(clk			),
		.rst_n				(rst_n		),
		                   
		.flag_s				(flag_s		),
		.flag_a				(flag_a		),
		.flag_fa				(flag_fa		),
		.flag_fs				(flag_fs		),
                         
		.beep					(beep			)
	);	
	
	show_data show_data_inst(

		.clk					(clk			),
		.rst_n				(rst_n		),
		                   
		.wave_sel			(wave_sel	),
		.wave_a				(wave_a		),
		.wave_freq			(wave_freq	),
		                   
		.sel					(sel			),
		.seg					(seg			)
	);	
	
endmodule 

2、各模块相关说明

(1)按键处理模块(key_ctrl)

按键处理包括两个步骤,消抖和边缘检测,需要注意的点是需要对每一个按键进行这两步操作,生成对应的四个脉冲信号:波形选择、幅度调节、频率加和减。顶层代码如下:

module key_ctrl(

	input		wire					clk,
	input		wire					rst_n,
	
	input		wire					key_sel,
	input		wire					key_amp,
	input		wire					key_fadd,
	input		wire					key_fsub,

	output	wire					flag_s,
	output	wire					flag_a,
	output	wire					flag_fa,
	output	wire					flag_fs
);

	wire					key_wave1;
	wire					key_wave2;
	wire					key_wave3;
	wire					key_wave4
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值