参考资料
【明德扬_verilog零基础入门语法HDL仿真快速掌握-手把手教你写FPGA/ASIC代码设计流程中的应用】
module module_name(
clk,
rst_n,
//其他信号,举例dout
dout
};
//参数定义
parameter DATA_W = 8;
//输入信号定义
input clk;
input rst_n;
//输出信号定义
output[DATA_W-1:0] dout;
//输出信号reg定义
reg[DATA_W-1:0] dout;
//中间信号定义
reg signal_1;
wire siginal_2;
//组合逻辑写法
always@(*)begin
//组合逻辑事务
end
//时序逻辑写法
always@(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
//复位操作
end
else begin
//触发器操作
end
end
endmodule
`timescale 1ns / 1ps
module TestBench_name();
//时钟和复位
reg clk ;
reg rst_n ;
//uut 的输入信号
reg[3:0] din_0 ;
reg din_1 ;
//uut 的输出信号
wire dout_0 ;
wire[4:0] dout_1 ;
//时钟周期,单位为ns,可在此修改时钟周期
parameter CYCLE = 20;
//复位时间,此时表示复位3个时钟周期的时间
parameter RST_TIME = 3;
//待测试的模块例化
module_name uut(
.clk (clk) ,
.rst_n (rst_n) ,
.din_0 (din_0) ,
.din_1 (din_1) ,
.dout_0 (dout_0) ,
.dout_1 (dout_1)
// ,更多...
);
//生成本地时钟:50M
initial begin
clk = 0;
forever
#(CYCLE/2)
clk = ~clk;
end
//产生复位信号
initial begin
rst_n = 1;
#2;
rst_n = 0;
#(CYCLE*RST_TIME);
rst_n = 1;
end
//输入信号din0赋值方式
initial begin
#1;
//赋初值
din_0 = 0;
#(10*CYCLE);
//开始赋值
end
//输入信号din1赋值方式
initial begin
#1;
//赋初值
din_1 = 0;
#(10*CYCLE);
//开始赋值
end
endmodule
😊