实验描述:
输入:
Clock:如果计数器enable信号为1,那么在时钟上升沿,count加1
Enable:如果enable为1,那么在时钟上升沿,count加1;如果enable为0,count保持不变
Reset:重置信号,如果reset为0,count重置为0
输出:
Count[3:0]:4位计数信号,范围:4‘b0000 – 4’b1111
实现代码:
/********************
* By VastCosmic
* 2021/12/27
********************/
module count4(count,reset,clk,enable);
output[3:0] count;
input reset,clk;
input enable;
reg[3:0] count;
always @(posedge clk)
begin
if (reset)
count<=0;
else
begin
if(enable)
count<=count+1'b1;
end
end
endmodule
TestBench:
/******************
* By VastCosmic
* 2021/12/27
******************/
`timescale 1ns/1ns
module test;
reg reset = 0;
reg enable = 1;
initial
begin
#2 reset = 1; //reset
#5 reset = 0; //start count
#40 enable = 0; //stop count
#41 enable = 1; //count
#50 reset = 1; //reset
#50 reset = 0; //start count
#6000 $stop;
end
reg clk;
initial
clk = 0;
always #(clk)
clk = ~clk;
wire[3:0] out;
count4 ctr(out,reset,clk,enable);
endmodule
使用Vivado进行仿真,仿真结果如下:
1.首先进行reset,随后开始正常计数
2.当enable=0时,暂停计数,out保持不变
3.enable=1,继续计数。
4.当reset信号再次发出时,将计数out重置为0。
5.下图为正常计数状态: