采用Verilog HDL设计4bits计数器,采用同步计数的方式,设计文件如下所示:
//4位计数器的仿真程序
//Author:学习FPGA的电气小兴兴
//Time:2023-11-09
module count4
(
input wire clk ,
input wire reset ,
output reg [3:0] out
);
always @(posedge clk) begin
if (reset) //同步复位
out<=4'd0;
else
out<=out+4'd1; //计数
end
endmodule
采用Quartus综合后的电路如下图所示。
编写Testbench,验证设计文件逻辑功能的正确性,如下所示。
//4位计数器仿真程序
//Author:学习FPGA的电气小兴兴
//Time:2023-11-09
`timescale 1ns/1ns
//`include "count4.v"
module coun4_tb;
parameter DELAY=10;
reg clk,reset; //测试输入信号定义为 reg 型
wire[3:0] out; //测试输出信号定义为 wire
always #(DELAY/2) clk = ~clk; //产生时钟波形
initial begin //激励信号定义
clk =0; reset=0;
#DELAY reset=1;
#DELAY reset=0;
#(DELAY*20) $stop;
end
//定义结果显示格式
initial $monitor($time,,,"clk=%d reset=%d out=%d", clk, reset,out);
//例化
count4 mycount(.clk(clk),.reset(reset),.out(out)); //调用测试对象
endmodule
采用Questa进行波形仿真,仿真波形如下图所示,初始为不定状态,复位后开始计数,并且计数到最大值15的时候归零,重新开始计数。
Questa打印结果如下图,逻辑功能完全正确,验证成功。