原理
dds信号发生器:以rom为核心,外围控制输出地址,达到输出不同频率和相位或者幅度的结构。(这里不考虑ad转换和滤波)
这里以正弦信号为例,用专用软件或者matlab生成一组正弦信号值的文件,这里使用quartus自带的ip核,将文件读入rom。
剩下的就是控制输出地址来达到改变频率、相位和幅度的目的。
实现
这里分为3个模块
一个模块实现按键消抖
一个模块实现dds具体功能
一个模块为rom例化
按键消抖模块
使用2个按键,模块消抖后输出高电平有效
module key_debounce #(parameter KEY_W = 2,TIME_20MS = 1000_000)(
input clk ,
input rst_n ,
input [KEY_W-1:0] key_in ,
output reg [KEY_W-1:0] key_out //检测到按下,输出一个周期的高脉冲,其他时刻为0
);
//信号定义
reg [19:0] cnt ;
wire add_cnt ;
wire end_cnt ;
reg add_flag;
reg [KEY_W-1:0] key_r0 ;//同步按键输入
reg [KEY_W-1:0] key_r1 ;//打拍
wire [KEY_W-1:0] nedge ;//检测下降沿
//计数器 检测到下降沿的时候,开启计数器延时20ms
always @(posedge clk or negedge rst_n)begin
if(!rst_n)begin
cnt <= 0;
end
else if(add_cnt)begin
if(end_cnt)