From b88e583472a426e733bff8734d590cb0550c1c43 Mon Sep 17 00:00:00 2001 From: Jerry Zhao Date: Sat, 4 Feb 2023 11:48:59 -0800 Subject: [PATCH] Fix pmp cosim --- .../chipyard/src/main/resources/csrc/cospike.cc | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/generators/chipyard/src/main/resources/csrc/cospike.cc b/generators/chipyard/src/main/resources/csrc/cospike.cc index 7c8f249e..4e81b708 100644 --- a/generators/chipyard/src/main/resources/csrc/cospike.cc +++ b/generators/chipyard/src/main/resources/csrc/cospike.cc @@ -212,12 +212,16 @@ extern "C" void cospike_cosim(long long int cycle, // 4 => csr if ((rd != 0 && type == 0) || type == 1) { // Override reads from some CSRs - if ((insn & 0xfff0007f) == 0xf1300073 || // mimpid - (insn & 0xfff0007f) == 0xf1200073 || // marchid - (insn & 0xfff0007f) == 0xf1100073 || // mvendorid - (insn & 0xfff0007f) == 0xb0000073 || // mcycle - (insn & 0xfff0007f) == 0xb0200073 // minstret - ) { + uint64_t csr_addr = insn >> 20; + bool csr_read = (insn & 0x7f) == 0x73; + if (csr_read && ( + (csr_addr == 0xf13) || // mimpid + (csr_addr == 0xf12) || // marchid + (csr_addr == 0xf11) || // mvendorid + (csr_addr == 0xb00) || // mcycle + (csr_addr == 0xb02) || // minstret + (csr_addr >= 0x3b0 && csr_addr <= 0x3ef) // pmpaddr + )) { printf("CSR override\n"); s->XPR.write(rd, wdata); } else if (!mem_read.empty() &&