@@ -101,7 +101,9 @@ class VCR(implicit p: Parameters) extends Module {
101
101
val rdata = RegInit (0 .U (vp.regBits.W ))
102
102
103
103
// 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
+
105
107
val reg = Seq .fill(nTotal)(RegInit (0 .U (vp.regBits.W )))
106
108
val addr = Seq .tabulate(nTotal)(_ * 4 )
107
109
val reg_map = (addr zip reg) map { case (a, r) => a.U -> r }
@@ -167,7 +169,7 @@ class VCR(implicit p: Parameters) extends Module {
167
169
}
168
170
}
169
171
170
- for (i <- 0 until (vp.nVals + ( 2 * vp. nPtrs) )) {
172
+ for (i <- 0 until (vp.nVals + nPtrs)) {
171
173
when (io.host.w.fire() && addr(vo + i).U === waddr) {
172
174
reg(vo + i) := wdata
173
175
}
@@ -183,7 +185,13 @@ class VCR(implicit p: Parameters) extends Module {
183
185
io.vcr.vals(i) := reg(vo + i)
184
186
}
185
187
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
+ }
188
196
}
189
197
}
0 commit comments