代码规范:Verilog 代码规范_verilog代码编写规范-CSDN博客
开发流程:FPGA基础知识----第二章 FPGA 开发流程_fpga 一个项目的整个流程-CSDN博客
源码下载:GitHub - Redamancy785/FPGA-Learning-Record: 项目博客:https://blog.csdn.net/weixin_51460407
一、功能定义
二、设计输入
1、主模块
这段代码是一个Verilog模块,名为
dds_ad9767
,它实现了一个双通道的直接数字频率合成器(DDS)系统。DDS是一种用于生成模拟波形(如正弦波、方波等)的电子技术,广泛应用于信号发生器、通信系统等领域。这个模块特别为与AD9767这类数字信号处理器(DSP)芯片协同工作而设计。
/*
Tips:
1、可分别于A、B通道同时输出两路波形
2、每次按下 f_switch_button_a_i , 通道A输出频率在预设的四种情况切换;通道B同理。
3、每次按下 p_switch_button_a_i , 通道A输出相位在预设的两种情况切换;通道B同理。
*/
module dds_ad9767(
reset_n_i,
clk_i,
mode_switch_button_a_i,
f_switch_button_a_i,
p_switch_button_a_i,
mode_switch_button_b_i,
f_switch_button_b_i,
p_switch_button_b_i,
data_a_o,
data_b_o
);
input reset_n_i,clk_i;
input [1:0]mode_switch_button_a_i,mode_switch_button_b_i;
input f_switch_button_a_i,p_switch_button_a_i,f_switch_button_b_i,p_switch_button_b_i;
output [13:0] data_a_o;
output [13:0] data_b_o;
// A通道dds例化
reg [31:0] u_f_word_a;
reg [11:0] u_p_word_a;
dds U_dds_a(
.reset_n_i(reset_n_i),
.clk_i(clk_i),
.f_word_i(u_f_word_a),
.p_word_i(u_p_word_a),
.mode_i(mode_switch_button_a_i),
.data_o(data_a_o)
);
// A通道频率切换
wire f_switch_button_a_press_key_flag;
key_filter U_f_switch_button_a_i(
.clk_i(clk_i),
.reset_n_i(reset_n_i),
.key_i(f_switch_button_a_i),
.press_key_flag_o(f_switch_button_a_press_key_flag)
);
reg [1:0] f_switch_cnt_a;
always@(posedge clk_i or negedge reset_n_i)
if(!reset_n_i)
f_switch_cnt_a <= 0;
else if(f_switch_button_a_press_key_flag == 1)
f_switch_cnt_a <= f_switch_cnt_a + 1;
always@(*)
case(f_switch_cnt_a)
0 : u_f_word_a <= 65536;
1 : u_f_word_a <= 65536*2;
2 : u_f_word_a <= 65536*3;
3 : u_f_word_a <= 65536*4;
endca