1
0

make sure correct addr_beat is sent for Get response by narrower/converter

This commit is contained in:
Howard Mao 2015-11-12 15:40:38 -08:00
parent f397d61033
commit b3865c370a

View File

@ -1426,6 +1426,7 @@ class ClientTileLinkIOUnwrapper(implicit p: Parameters) extends TLModule()(p) {
} }
class NastiIOTileLinkIOConverterInfo(implicit p: Parameters) extends TLBundle()(p) { class NastiIOTileLinkIOConverterInfo(implicit p: Parameters) extends TLBundle()(p) {
val addr_beat = UInt(width = tlBeatAddrBits)
val byteOff = UInt(width = tlByteAddrBits) val byteOff = UInt(width = tlByteAddrBits)
val subblock = Bool() val subblock = Bool()
} }
@ -1488,6 +1489,7 @@ class NastiIOTileLinkIOConverter(implicit p: Parameters) extends TLModule()(p)
roq.io.enq.valid := get_helper.fire(roq.io.enq.ready) roq.io.enq.valid := get_helper.fire(roq.io.enq.ready)
roq.io.enq.bits.tag := io.nasti.ar.bits.id roq.io.enq.bits.tag := io.nasti.ar.bits.id
roq.io.enq.bits.data.addr_beat := io.tl.acquire.bits.addr_beat
roq.io.enq.bits.data.byteOff := io.tl.acquire.bits.addr_byte() roq.io.enq.bits.data.byteOff := io.tl.acquire.bits.addr_byte()
roq.io.enq.bits.data.subblock := is_subblock roq.io.enq.bits.data.subblock := is_subblock
roq.io.deq.valid := io.nasti.r.fire() && (nasti_wrap_out || roq.io.deq.data.subblock) roq.io.deq.valid := io.nasti.r.fire() && (nasti_wrap_out || roq.io.deq.data.subblock)
@ -1546,7 +1548,7 @@ class NastiIOTileLinkIOConverter(implicit p: Parameters) extends TLModule()(p)
Grant.getDataBeatType, Grant.getDataBlockType), Grant.getDataBeatType, Grant.getDataBlockType),
client_xact_id = io.nasti.r.bits.id, client_xact_id = io.nasti.r.bits.id,
manager_xact_id = UInt(0), manager_xact_id = UInt(0),
addr_beat = tl_cnt_in, addr_beat = Mux(roq.io.deq.data.subblock, roq.io.deq.data.addr_beat, tl_cnt_in),
data = r_aligned_data) data = r_aligned_data)
gnt_arb.io.in(1).valid := io.nasti.b.valid gnt_arb.io.in(1).valid := io.nasti.b.valid
@ -1749,7 +1751,7 @@ class TileLinkIONarrower(innerTLId: String, outerTLId: String)
g_type = Grant.getDataBeatType, g_type = Grant.getDataBeatType,
client_xact_id = ognt.client_xact_id, client_xact_id = ognt.client_xact_id,
manager_xact_id = ognt.manager_xact_id, manager_xact_id = ognt.manager_xact_id,
addr_beat = ognt.addr_beat, addr_beat = ognt.addr_beat >> UInt(log2Up(factor)),
data = ognt.data << get_grant_shift)(innerConfig) data = ognt.data << get_grant_shift)(innerConfig)
io.in.grant.valid := sending_get || (io.out.grant.valid && !ognt_block) io.in.grant.valid := sending_get || (io.out.grant.valid && !ognt_block)