58 lines
1.1 KiB
Text
58 lines
1.1 KiB
Text
`timescale 1ns / 1ps
|
|
|
|
/**
|
|
* counter: a generic clearable up-counter
|
|
*/
|
|
|
|
module counter
|
|
#(parameter WIDTH=64, NAME="world")
|
|
(
|
|
input clk,
|
|
input ce,
|
|
input arst_n,
|
|
output reg [WIDTH-1:0] q
|
|
);
|
|
|
|
string name = "counter";
|
|
localparam val0 = 12'ha1f;
|
|
localparam val1 = 12'h1fa;
|
|
localparam val2 = 12'hfa1;
|
|
|
|
// 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
|
|
|
|
function int add_one(int x);
|
|
return x + 1;
|
|
endfunction : add_one
|
|
|
|
`ifdef SIMULATION
|
|
initial $display("Hello %s", NAME);
|
|
`endif
|
|
endmodule : counter
|
|
|
|
class my_data extends uvm_data;
|
|
int x, y;
|
|
|
|
function add_one();
|
|
x++;
|
|
y++;
|
|
endfunction : add_one
|
|
endclass : my_data
|