26 lines
606 B
Systemverilog
26 lines
606 B
Systemverilog
`default_nettype none
|
|
|
|
module Counter
|
|
#(parameter WIDTH = 8)(
|
|
input var logic clock,
|
|
input var logic reset,
|
|
input var logic decrement,
|
|
input var logic setvalue,
|
|
input var logic[WIDTH-1:0] valuein,
|
|
output var logic[WIDTH-1:0] valueout
|
|
);
|
|
|
|
var logic[WIDTH-1:0] countervalue;
|
|
|
|
always @(posedge clock or posedge reset) begin
|
|
if (reset) begin
|
|
countervalue = WIDTH'(0);
|
|
end else if (setvalue) begin
|
|
countervalue = valuein;
|
|
end else begin
|
|
countervalue = countervalue + (decrement ? WIDTH'(-1) : WIDTH'(1));
|
|
end
|
|
end
|
|
|
|
assign valueout = countervalue;
|
|
endmodule |