37 lines
670 B
Text
37 lines
670 B
Text
`timescale 1ns / 1ps
|
|
|
|
/**
|
|
* counter: a generic clearable up-counter
|
|
*/
|
|
|
|
module counter
|
|
#(parameter WIDTH=64)
|
|
(
|
|
input clk,
|
|
input ce,
|
|
input arst_n,
|
|
output reg [WIDTH-1:0] q
|
|
);
|
|
|
|
// some child
|
|
clock_buffer #(WIDTH) buffer_inst (
|
|
.clk(clk),
|
|
.ce(ce),
|
|
.reset(arst_n)
|
|
);
|
|
|
|
// Simple gated up-counter with async clear
|
|
|
|
always @(posedge clk or negedge arst_n) begin
|
|
if (arst_n == 1'b0) begin
|
|
q <= {WIDTH {1'b0}};
|
|
end
|
|
else begin
|
|
q <= q;
|
|
if (ce == 1'b1) begin
|
|
q <= q + 1;
|
|
end
|
|
end
|
|
end
|
|
|
|
endmodule
|