[VTA] [Chisel] make dram offset configurable for uops different than 4-bytes (#3654)
authorLuis Vega <vegaluisjose@users.noreply.github.com>
Mon, 29 Jul 2019 18:11:53 +0000 (11:11 -0700)
committerJared Roesch <roeschinc@gmail.com>
Mon, 29 Jul 2019 18:11:53 +0000 (11:11 -0700)
vta/hardware/chisel/src/main/scala/core/Core.scala
vta/hardware/chisel/src/main/scala/core/LoadUop.scala

index 6c29a88548a722da82a40911874ffb08d7eb4cfb..e63a1123b67188c550f73e5979757332d8e3de5a 100644 (file)
@@ -40,6 +40,9 @@ case class CoreParams (
   outMemDepth: Int = 512,
   instQueueEntries: Int = 32
 )
+{
+  require (uopBits % 8 == 0, s"\n\n[VTA] [CoreParams] uopBits must be byte aligned\n\n")
+}
 
 case object CoreKey extends Field[CoreParams]
 
index 5a9c66f06e49ccffd9560f23e897dd41c18f5fe5..ab8275b6731c2bfe552829ae0dfb627325b28015 100644 (file)
@@ -69,6 +69,7 @@ class LoadUop(debug: Boolean = false)(implicit p: Parameters) extends Module {
   })
   val numUop = 2 // store two uops per sram word
   val uopBits = p(CoreKey).uopBits
+  val uopBytes = uopBits / 8
   val uopDepth = p(CoreKey).uopMemDepth / numUop
 
   val dec = io.inst.asTypeOf(new MemDecode)
@@ -129,7 +130,7 @@ class LoadUop(debug: Boolean = false)(implicit p: Parameters) extends Module {
     when (offsetIsEven) {
       raddr := io.baddr + dec.dram_offset
     } .otherwise {
-      raddr := io.baddr + dec.dram_offset - 4.U
+      raddr := io.baddr + dec.dram_offset - uopBytes.U
     }
   } .elsewhen (state === sReadData && xcnt === xlen && xrem =/= 0.U) {
     raddr := raddr + xmax_bytes