Skip to content

Commit c4370fe

Browse files
vegaluisjosewweic
authored andcommitted
fix pynq 32-bit address pointers (apache#3558)
1 parent 41b25f0 commit c4370fe

File tree

1 file changed

+12
-4
lines changed
  • vta/hardware/chisel/src/main/scala/shell

1 file changed

+12
-4
lines changed

vta/hardware/chisel/src/main/scala/shell/VCR.scala

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)