From ebf81babc15ada8fb75a364a61ff96da47c2e449 Mon Sep 17 00:00:00 2001 From: Vamber Yang Date: Tue, 16 May 2023 05:57:35 -0700 Subject: [PATCH] Modified WithCoalescer to dynamically configure databusWidth and MaxCoalSize according to underlying SoC setting, This makes running perf numbers easier --- src/main/scala/tilelink/Coalescing.scala | 2 +- .../coalescing/CoalescerXbarUnitTest.scala | 98 +++++++++++++++++++ .../scala/coalescing/project/build.properties | 1 + 3 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 src/test/scala/coalescing/CoalescerXbarUnitTest.scala create mode 100644 src/test/scala/coalescing/project/build.properties diff --git a/src/main/scala/tilelink/Coalescing.scala b/src/main/scala/tilelink/Coalescing.scala index fc1002f..0f72448 100644 --- a/src/main/scala/tilelink/Coalescing.scala +++ b/src/main/scala/tilelink/Coalescing.scala @@ -88,7 +88,7 @@ object defaultConfig extends CoalescerConfig( queueDepth = 1, waitTimeout = 8, addressWidth = 24, - dataBusWidth = 4, // 2^3=8 bytes, 64 bit bus + dataBusWidth = 4, // 2^4=16 bytes, 128 bit bus // watermark = 2, wordSizeInBytes = 4, // when attaching to SoC, 16 source IDs are not enough due to longer latency diff --git a/src/test/scala/coalescing/CoalescerXbarUnitTest.scala b/src/test/scala/coalescing/CoalescerXbarUnitTest.scala new file mode 100644 index 0000000..7d1abc9 --- /dev/null +++ b/src/test/scala/coalescing/CoalescerXbarUnitTest.scala @@ -0,0 +1,98 @@ +package freechips.rocketchip.tilelink.coalescing + +import chisel3._ +import chiseltest._ +import chiseltest.simulator.VerilatorFlags +import org.scalatest.flatspec.AnyFlatSpec +import freechips.rocketchip.tilelink._ +import freechips.rocketchip.util.MultiPortQueue +import freechips.rocketchip.diplomacy._ +import freechips.rocketchip.subsystem.WithoutTLMonitors +import org.chipsalliance.cde.config.Parameters +import chisel3.util.{DecoupledIO, Valid} +import chisel3.util.experimental.BoringUtils + + +object coalArbTestConfig extends CoalescerConfig( + enable = true, + numLanes = 4, + queueDepth = 1, + waitTimeout = 8, + addressWidth = 24, + dataBusWidth = 5, + // watermark = 2, + wordSizeInBytes = 4, + wordWidth = 2, + numOldSrcIds = 4, + numNewSrcIds = 4, + respQueueDepth = 4, + coalLogSizes = Seq(4, 5), + sizeEnum = DefaultInFlightTableSizeEnum, + numCoalReqs = 1, + numArbiterOutputPorts = 1, + bankStrideInBytes = 64 +) + +class DummyCoalescerXbarUnitTB(implicit p: Parameters) extends LazyModule { + val device = new SimpleDevice("dummy", Seq("dummy")) + val beatBytes = 1 << coalArbTestConfig.dataBusWidth // 256 bit bus + + val l2Nodes = Seq.tabulate(coalArbTestConfig.numArbiterOutputPorts) { _ => + TLManagerNode( + Seq( + TLSlavePortParameters.v1( + Seq( + TLManagerParameters( + address = Seq(AddressSet(0x8000000, 0xffffff)), // should be matching cpuNode + resources = device.reg, + regionType = RegionType.UNCACHED, + executable = true, + supportsArithmetic = TransferSizes(1, beatBytes), + supportsLogical = TransferSizes(1, beatBytes), + supportsGet = TransferSizes(1, beatBytes), + supportsPutFull = TransferSizes(1, beatBytes), + supportsPutPartial = TransferSizes(1, beatBytes), + supportsHint = TransferSizes(1, beatBytes), + fifoId = Some(0) + ) + ), + beatBytes + ) + ) + ) + } + + val dut = LazyModule(new CoalescerXbar(coalArbTestConfig)) + + l2Nodes.foreach(_ := dut.node) + + lazy val module = new DummyCoalescerXbarUnitTBImpl(this) + +} + class DummyCoalescerXbarUnitTBImpl(outer: DummyCoalescerXbarUnitTB) extends LazyModuleImp(outer) { + + val coalescerXbar = outer.dut + + val l2IOs = Seq.tabulate(coalArbTestConfig.numArbiterOutputPorts){ i=> + outer.l2Nodes(i).makeIOs() + } + + } + + +class CoalescerXbarUnitTest extends AnyFlatSpec with ChiselScalatestTester { + behavior of "testing various aspects of coalescer arbiter" + + implicit val p: Parameters = Parameters.empty + + it should "coalescer has not valid TL output" in { + test(LazyModule(new DummyCoalescerXbarUnitTB()(new WithoutTLMonitors())).module) + .withAnnotations(Seq(VerilatorBackendAnnotation, VerilatorFlags(Seq("--coverage-line")), WriteFstAnnotation)) + { c => + + c.l2IOs.foreach(_.head.a.valid.expect(false.B)) + + } +} + +} diff --git a/src/test/scala/coalescing/project/build.properties b/src/test/scala/coalescing/project/build.properties new file mode 100644 index 0000000..46e43a9 --- /dev/null +++ b/src/test/scala/coalescing/project/build.properties @@ -0,0 +1 @@ +sbt.version=1.8.2