blob: fba2a8915d829a2d6f042cc8c78af8bcd64abbd4 [file] [log] [blame]
module CSR_TimerRegister #(
parameter ADDRESS_LOWER = 12'h000,
parameter ADDRESS_UPPER = 12'h000
)(
input wire clk,
input wire rst,
// CSR interface
input wire csrReadEnable,
input wire[11:0] csrAddress,
output reg[31:0] csrReadData,
output wire csrRequestOutput,
// System interface
input wire count,
output wire[63:0] value
);
wire csrEnabledLower = csrAddress == ADDRESS_LOWER;
wire csrEnabledUpper = csrAddress == ADDRESS_UPPER;
reg[63:0] currentValue = 64'b0;
always @(posedge clk) begin
if (rst) begin
currentValue <= 64'b0;
end else begin
if (count) currentValue <= currentValue + 1;
end
end
always @(*) begin
if (csrReadEnable) begin
if (csrEnabledLower) csrReadData <= currentValue[31:0];
else if (csrEnabledUpper) csrReadData <= currentValue[63:32];
else csrReadData <= 32'b0;
end else begin
csrReadData <= 32'b0;
end
end
assign csrRequestOutput = (csrEnabledLower || csrEnabledUpper) && csrReadEnable;
assign value = currentValue;
endmodule