Gate more testbench volatile CSRs on supported extensions

This commit is contained in:
Jordan Carlin 2025-03-19 14:51:17 -07:00
parent 6e8759cc96
commit 629cbf6cea
No known key found for this signature in database

View file

@ -841,6 +841,8 @@ end
end end
// Volatile CSRs // Volatile CSRs
// Counter CSRs
if (P.ZICNTR_SUPPORTED) begin
void'(rvviRefCsrSetVolatile(0, 32'hC00)); // CYCLE void'(rvviRefCsrSetVolatile(0, 32'hC00)); // CYCLE
void'(rvviRefCsrSetVolatile(0, 32'hB00)); // MCYCLE void'(rvviRefCsrSetVolatile(0, 32'hB00)); // MCYCLE
void'(rvviRefCsrSetVolatile(0, 32'hC02)); // INSTRET void'(rvviRefCsrSetVolatile(0, 32'hC02)); // INSTRET
@ -853,12 +855,16 @@ end
void'(rvviRefCsrSetVolatile(0, 32'hB82)); // MINSTRETH void'(rvviRefCsrSetVolatile(0, 32'hB82)); // MINSTRETH
void'(rvviRefCsrSetVolatile(0, 32'hC81)); // TIMEH void'(rvviRefCsrSetVolatile(0, 32'hC81)); // TIMEH
end end
// HPM counters
if (P.ZIHPM_SUPPORTED) begin
// User HPMCOUNTER3 - HPMCOUNTER31 // User HPMCOUNTER3 - HPMCOUNTER31
if (P.U_SUPPORTED) begin
for (iter='hC03; iter<='hC1F; iter++) begin for (iter='hC03; iter<='hC1F; iter++) begin
void'(rvviRefCsrSetVolatile(0, iter)); // HPMCOUNTERx void'(rvviRefCsrSetVolatile(0, iter)); // HPMCOUNTERx
if (P.XLEN == 32) if (P.XLEN == 32)
void'(rvviRefCsrSetVolatile(0, iter+128)); // HPMCOUNTERxH void'(rvviRefCsrSetVolatile(0, iter+128)); // HPMCOUNTERxH
end end
end
// Machine MHPMCOUNTER3 - MHPMCOUNTER31 // Machine MHPMCOUNTER3 - MHPMCOUNTER31
for (iter='hB03; iter<='hB1F; iter++) begin for (iter='hB03; iter<='hB1F; iter++) begin
@ -866,11 +872,15 @@ end
if (P.XLEN == 32) if (P.XLEN == 32)
void'(rvviRefCsrSetVolatile(0, iter+128)); // MHPMCOUNTERxH void'(rvviRefCsrSetVolatile(0, iter+128)); // MHPMCOUNTERxH
end end
end
end
// cannot predict this register due to latency between // cannot predict this register due to latency between
// pending and taken // pending and taken
void'(rvviRefCsrSetVolatile(0, 32'h344)); // MIP void'(rvviRefCsrSetVolatile(0, 32'h344)); // MIP
if (P.S_SUPPORTED) begin
void'(rvviRefCsrSetVolatile(0, 32'h144)); // SIP void'(rvviRefCsrSetVolatile(0, 32'h144)); // SIP
end
// Privileges for PMA are set in the imperas.ic // Privileges for PMA are set in the imperas.ic
// volatile (IO) regions are defined here // volatile (IO) regions are defined here
@ -893,18 +903,17 @@ end
if (P.SPI_SUPPORTED) begin if (P.SPI_SUPPORTED) begin
void'(rvviRefMemorySetVolatile(P.SPI_BASE, (P.SPI_BASE + P.SPI_RANGE))); void'(rvviRefMemorySetVolatile(P.SPI_BASE, (P.SPI_BASE + P.SPI_RANGE)));
end end
void'(rvviRefCsrSetVolatile(0, 32'h104)); // SIE - Temporary!!!!
end end
if (P.ZICSR_SUPPORTED) begin if (P.ZICSR_SUPPORTED) begin
always @(dut.core.priv.priv.csr.csri.MIP_REGW[7]) void'(rvvi.net_push("MTimerInterrupt", dut.core.priv.priv.csr.csri.MIP_REGW[7])); always @(dut.core.priv.priv.csr.csri.MIP_REGW[7]) void'(rvvi.net_push("MTimerInterrupt", dut.core.priv.priv.csr.csri.MIP_REGW[7]));
always @(dut.core.priv.priv.csr.csri.MIP_REGW[11]) void'(rvvi.net_push("MExternalInterrupt", dut.core.priv.priv.csr.csri.MIP_REGW[11])); always @(dut.core.priv.priv.csr.csri.MIP_REGW[11]) void'(rvvi.net_push("MExternalInterrupt", dut.core.priv.priv.csr.csri.MIP_REGW[11]));
always @(dut.core.priv.priv.csr.csri.MIP_REGW[9]) void'(rvvi.net_push("SExternalInterrupt", dut.core.priv.priv.csr.csri.MIP_REGW[9]));
always @(dut.core.priv.priv.csr.csri.MIP_REGW[3]) void'(rvvi.net_push("MSWInterrupt", dut.core.priv.priv.csr.csri.MIP_REGW[3])); always @(dut.core.priv.priv.csr.csri.MIP_REGW[3]) void'(rvvi.net_push("MSWInterrupt", dut.core.priv.priv.csr.csri.MIP_REGW[3]));
always @(dut.core.priv.priv.csr.csri.MIP_REGW[1]) void'(rvvi.net_push("SSWInterrupt", dut.core.priv.priv.csr.csri.MIP_REGW[1])); if (P.S_SUPPORTED) begin
always @(dut.core.priv.priv.csr.csri.MIP_REGW[5]) void'(rvvi.net_push("STimerInterrupt", dut.core.priv.priv.csr.csri.MIP_REGW[5])); always @(dut.core.priv.priv.csr.csri.MIP_REGW[5]) void'(rvvi.net_push("STimerInterrupt", dut.core.priv.priv.csr.csri.MIP_REGW[5]));
always @(dut.core.priv.priv.csr.csri.MIP_REGW[9]) void'(rvvi.net_push("SExternalInterrupt", dut.core.priv.priv.csr.csri.MIP_REGW[9]));
always @(dut.core.priv.priv.csr.csri.MIP_REGW[1]) void'(rvvi.net_push("SSWInterrupt", dut.core.priv.priv.csr.csri.MIP_REGW[1]));
end
end end
final begin final begin