看到一个非常好的计数器模块
//计数器子模块,可以设置开始和结束条件
module cnt(
input clk,
input reset,
input count_start, //开始计数输入
input [3:0] count_end, //计数到多少停止计数
output end_cnt, //一次计数完成标志
output [3:0] count);
wire add_cnt;
always @(posedge clk)begin
if(reset)begin
count <= 4'd0;
end
else if(add_cnt)begin
if(end_cnt)
count <= 4'd0;
else
count <= count + 1'b1;
end
end
assign add_cnt = count_start; //计数开始条件,当满足了开始计数
assign end_cnt = add_cnt && (count == count_end); //计数结束产生一个标志
endmodule