From 1967186a96bca1553788bc6d8db1928e1ab1e2d5 Mon Sep 17 00:00:00 2001 From: Howard Mao Date: Tue, 19 Apr 2016 09:38:04 -0700 Subject: [PATCH] add id field to NastiWriteDataChannel --- junctions/src/main/scala/atos.scala | 30 ++++++++++++++++------------ junctions/src/main/scala/nasti.scala | 8 +++++--- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/junctions/src/main/scala/atos.scala b/junctions/src/main/scala/atos.scala index d092b14e..ee78c853 100644 --- a/junctions/src/main/scala/atos.scala +++ b/junctions/src/main/scala/atos.scala @@ -8,7 +8,8 @@ trait HasAtosParameters extends HasNastiParameters { // round up to a multiple of 32 def roundup(n: Int) = 32 * ((n - 1) / 32 + 1) - val atosUnionBits = max(nastiXDataBits + nastiWStrobeBits + 1, + val atosUnionBits = max( + nastiXIdBits + nastiXDataBits + nastiWStrobeBits + 1, nastiXIdBits + nastiXBurstBits + nastiXSizeBits + nastiXLenBits + nastiXAddrBits) val atosIdBits = nastiXIdBits @@ -16,11 +17,13 @@ trait HasAtosParameters extends HasNastiParameters { val atosRespBits = nastiXRespBits val atosDataBits = nastiXDataBits - val atosLenOffset = nastiXAddrBits + val atosAddrOffset = atosIdBits + val atosLenOffset = atosIdBits + nastiXAddrBits val atosSizeOffset = atosLenOffset + nastiXLenBits val atosBurstOffset = atosSizeOffset + nastiXSizeBits - val atosIdOffset = atosBurstOffset + nastiXBurstBits - val atosStrobeOffset = nastiXDataBits + + val atosDataOffset = atosIdBits + val atosStrobeOffset = nastiXDataBits + atosIdBits val atosLastOffset = atosStrobeOffset + nastiWStrobeBits val atosRequestBits = roundup(atosTypBits + atosUnionBits) @@ -49,13 +52,13 @@ object AtosRequest { } def apply(ar: NastiReadAddressChannel)(implicit p: Parameters): AtosRequest = - apply(arType, Cat(ar.id, ar.burst, ar.size, ar.len, ar.addr)) + apply(arType, Cat(ar.burst, ar.size, ar.len, ar.addr, ar.id)) def apply(aw: NastiWriteAddressChannel)(implicit p: Parameters): AtosRequest = - apply(awType, Cat(aw.id, aw.burst, aw.size, aw.len, aw.addr)) + apply(awType, Cat(aw.burst, aw.size, aw.len, aw.addr, aw.id)) def apply(w: NastiWriteDataChannel)(implicit p: Parameters): AtosRequest = - apply(wType, Cat(w.last, w.strb, w.data)) + apply(wType, Cat(w.last, w.strb, w.data, w.id)) } class AtosRequest(implicit p: Parameters) @@ -63,11 +66,8 @@ class AtosRequest(implicit p: Parameters) val typ = UInt(width = atosTypBits) val union = UInt(width = atosUnionBits) - def id(dummy: Int = 0) = - union(atosIdOffset + nastiXIdBits - 1, atosIdOffset) - def burst(dummy: Int = 0) = - union(atosIdOffset - 1, atosBurstOffset) + union(atosUnionBits - 1, atosBurstOffset) def size(dummy: Int = 0) = union(atosBurstOffset - 1, atosSizeOffset) @@ -76,10 +76,13 @@ class AtosRequest(implicit p: Parameters) union(atosSizeOffset - 1, atosLenOffset) def addr(dummy: Int = 0) = - union(atosLenOffset - 1, 0) + union(atosLenOffset - 1, atosAddrOffset) + + def id(dummy: Int = 0) = + union(atosIdBits - 1, 0) def data(dummy: Int = 0) = - union(nastiXDataBits - 1, 0) + union(atosStrobeOffset - 1, atosDataOffset) def strb(dummy: Int = 0) = union(atosLastOffset - 1, atosStrobeOffset) @@ -241,6 +244,7 @@ class AtosRequestDecoder(implicit p: Parameters) extends AtosModule()(p) { io.w.valid := io.req.valid && is_w io.w.bits := NastiWriteDataChannel( + id = io.req.bits.id(), data = io.req.bits.data(), strb = io.req.bits.strb(), last = io.req.bits.last()) diff --git a/junctions/src/main/scala/nasti.scala b/junctions/src/main/scala/nasti.scala index a3ed9875..cc2a3a98 100644 --- a/junctions/src/main/scala/nasti.scala +++ b/junctions/src/main/scala/nasti.scala @@ -93,6 +93,7 @@ class NastiWriteAddressChannel(implicit p: Parameters) extends NastiAddressChann class NastiWriteDataChannel(implicit p: Parameters) extends NastiMasterToSlaveChannel()(p) with HasNastiData { + val id = UInt(width = nastiWIdBits) val strb = UInt(width = nastiWStrobeBits) val user = UInt(width = nastiWUserBits) } @@ -167,7 +168,8 @@ object NastiReadAddressChannel { } object NastiWriteDataChannel { - def apply(data: UInt, last: Bool = Bool(true))(implicit p: Parameters): NastiWriteDataChannel = { + def apply(data: UInt, last: Bool = Bool(true), id: UInt = UInt(0)) + (implicit p: Parameters): NastiWriteDataChannel = { val w = Wire(new NastiWriteDataChannel) w.strb := Fill(w.nastiWStrobeBits, UInt(1, 1)) w.data := data @@ -175,9 +177,9 @@ object NastiWriteDataChannel { w.user := UInt(0) w } - def apply(data: UInt, strb: UInt, last: Bool) + def apply(data: UInt, strb: UInt, last: Bool, id: UInt) (implicit p: Parameters): NastiWriteDataChannel = { - val w = apply(data, last) + val w = apply(data, last, id) w.strb := strb w }