本次仿真主要对三个主要的模块进行仿真,分别是key_control模块,DDS波形产生模块以及顶层模块。
首先来看第一个部分key_contrtol模块的仿真。
`timescale 1ns/1ns
module tb_key_cntrol ();
//参数的设定
parameter CNT_1MS = 20'd19 ,
CNT_11MS = 21'd69 ,
CNT_41MS = 22'd149 ,
CNT_51MS = 22'd199 ,
CNT_60MS = 22'd249 ;
//wire型变量的定义
wire [3:0] wave_select ;
//reg型变量的定义
reg sys_clk;
reg sys_rst_n;
reg [21:0] tb_cnt;
reg key_in;
reg [1:0] cnt_key;
reg [3:0] key;
defparam key_control_inst.CNT_MAX = 24;
//用initial对reg型变量进行赋值
initial
begin
sys_rst_n = 1'b0;
sys_clk = 1'b0;
key = 4'b0000;
#200;
sys_rst_n = 1'b1;
end
always #10 sys_clk = ~sys_clk;
//tb_cnt:按键过程计数器,通过该计数器的计数时间来模拟按键的抖动过程
always@(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n == 1'b0)
tb_cnt <= 22'b0;
else if(tb_cnt == CNT_60MS)
tb_cnt <= 22'b0;
else
tb_cnt <= tb_cnt + 1'b1;
//key_in:产生输入随机数,模拟按键的输入情况
a