@@ -101,7 +101,9 @@ class VCR(implicit p: Parameters) extends Module {
101101 val rdata = RegInit (0 .U (vp.regBits.W ))
102102
103103 // registers
104- val nTotal = vp.nCtrl + vp.nECnt + vp.nVals + (2 * vp.nPtrs)
104+ val nPtrs = if (mp.addrBits == 32 ) vp.nPtrs else 2 * vp.nPtrs
105+ val nTotal = vp.nCtrl + vp.nECnt + vp.nVals + nPtrs
106+
105107 val reg = Seq .fill(nTotal)(RegInit (0 .U (vp.regBits.W )))
106108 val addr = Seq .tabulate(nTotal)(_ * 4 )
107109 val reg_map = (addr zip reg) map { case (a, r) => a.U -> r }
@@ -167,7 +169,7 @@ class VCR(implicit p: Parameters) extends Module {
167169 }
168170 }
169171
170- for (i <- 0 until (vp.nVals + ( 2 * vp. nPtrs) )) {
172+ for (i <- 0 until (vp.nVals + nPtrs)) {
171173 when (io.host.w.fire() && addr(vo + i).U === waddr) {
172174 reg(vo + i) := wdata
173175 }
@@ -183,7 +185,13 @@ class VCR(implicit p: Parameters) extends Module {
183185 io.vcr.vals(i) := reg(vo + i)
184186 }
185187
186- for (i <- 0 until vp.nPtrs) {
187- io.vcr.ptrs(i) := Cat (reg(po + 2 * i + 1 ), reg(po + 2 * i))
188+ if (mp.addrBits == 32 ) { // 32-bit pointers
189+ for (i <- 0 until nPtrs) {
190+ io.vcr.ptrs(i) := reg(po + i)
191+ }
192+ } else { // 64-bits pointers
193+ for (i <- 0 until (nPtrs/ 2 )) {
194+ io.vcr.ptrs(i) := Cat (reg(po + 2 * i + 1 ), reg(po + 2 * i))
195+ }
188196 }
189197}
0 commit comments