38 lines
670 B
Text
38 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
|