59 lines
1.1 KiB
Text
59 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
|