Fragmenter: fix a bug when underlying device supports larger bursts (#589)
This commit is contained in:
parent
eb953c40f0
commit
db55a1d755
@ -129,7 +129,7 @@ class TLFragmenter(val minSize: Int, val maxSize: Int, val alwaysMin: Boolean =
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
val counterBits = log2Up(maxSize/beatBytes)
|
val counterBits = log2Up(maxSize/beatBytes)
|
||||||
val maxDownSize = if (alwaysMin) minSize else manager.maxTransfer
|
val maxDownSize = if (alwaysMin) minSize else min(manager.maxTransfer, maxSize)
|
||||||
|
|
||||||
// First, handle the return path
|
// First, handle the return path
|
||||||
val acknum = RegInit(UInt(0, width = counterBits))
|
val acknum = RegInit(UInt(0, width = counterBits))
|
||||||
@ -226,7 +226,7 @@ class TLFragmenter(val minSize: Int, val maxSize: Int, val alwaysMin: Boolean =
|
|||||||
|
|
||||||
repeater.io.repeat := !aHasData && aFragnum =/= UInt(0)
|
repeater.io.repeat := !aHasData && aFragnum =/= UInt(0)
|
||||||
out.a <> in_a
|
out.a <> in_a
|
||||||
out.a.bits.address := in_a.bits.address | (~aFragnum << log2Ceil(minSize) & aOrigOH1)
|
out.a.bits.address := in_a.bits.address | ~(old_gennum1 << log2Ceil(beatBytes) | ~aOrigOH1 | aFragOH1 | UInt(minSize-1))
|
||||||
out.a.bits.source := Cat(in_a.bits.source, aFragnum)
|
out.a.bits.source := Cat(in_a.bits.source, aFragnum)
|
||||||
out.a.bits.size := aFrag
|
out.a.bits.size := aFrag
|
||||||
|
|
||||||
@ -267,7 +267,17 @@ class TLRAMFragmenter(ramBeatBytes: Int, maxSize: Int)(implicit p: Parameters) e
|
|||||||
val ram = LazyModule(new TLRAM(AddressSet(0x0, 0x3ff), beatBytes = ramBeatBytes))
|
val ram = LazyModule(new TLRAM(AddressSet(0x0, 0x3ff), beatBytes = ramBeatBytes))
|
||||||
|
|
||||||
model.node := fuzz.node
|
model.node := fuzz.node
|
||||||
ram.node := TLDelayer(0.1)(TLFragmenter(ramBeatBytes, maxSize)(TLDelayer(0.1)(model.node)))
|
ram.node :=
|
||||||
|
TLDelayer(0.1)(
|
||||||
|
TLBuffer(BufferParams.flow)(
|
||||||
|
TLDelayer(0.1)(
|
||||||
|
TLFragmenter(ramBeatBytes, maxSize)(
|
||||||
|
TLDelayer(0.1)(
|
||||||
|
TLBuffer(BufferParams.flow)(
|
||||||
|
TLFragmenter(ramBeatBytes, maxSize/2)(
|
||||||
|
TLDelayer(0.1)(
|
||||||
|
TLBuffer(BufferParams.flow)(
|
||||||
|
model.node)))))))))
|
||||||
|
|
||||||
lazy val module = new LazyModuleImp(this) with HasUnitTestIO {
|
lazy val module = new LazyModuleImp(this) with HasUnitTestIO {
|
||||||
io.finished := fuzz.module.io.finished
|
io.finished := fuzz.module.io.finished
|
||||||
|
Loading…
Reference in New Issue
Block a user