@@ -18,6 +18,8 @@ import testchipip.soc.SubsystemInjectorKey
1818import radiance .cluster ._
1919import radiance .memory ._
2020import radiance .muon ._
21+ import radiance .muon .backend .fp .FPPipeParams
22+ import radiance .muon .backend .int .IntPipeParams
2123import radiance .virgo .{NumVortexCores , VirgoClusterParams , VortexCoreParams , VortexL1Key }
2224import radiance .muon .LoadStoreUnitParams
2325import radiance .unittest .CyclotronLinked
@@ -71,6 +73,7 @@ class WithMuonCores(
7173 cyclotron : Boolean ,
7274 difftest : Boolean ,
7375 disabled : Boolean ,
76+ numLanes : Option [Int ],
7477 numIssueQueueEntries : Int ,
7578 l0i : Option [DCacheParams ],
7679 l0d : Option [DCacheParams ],
@@ -81,18 +84,32 @@ class WithMuonCores(
8184 assert(up(RadianceSimArgs ),
8285 " WithMuonCores: difftest cannot be enabled in non-sim mode!" )
8386 }
87+ val simt = up(SIMTCoreKey ).get
88+ val resolvedNumLanes = numLanes.getOrElse(simt.numLanes)
89+ val intPipe = numLanes.map { lanes =>
90+ IntPipeParams (numALULanes = lanes, numMulDivLanes = lanes)
91+ }
92+ val fpPipe = numLanes.map { lanes =>
93+ FPPipeParams (
94+ numFP32Lanes = (lanes / 2 ).max(1 ),
95+ numFP32DivLanes = (lanes / 8 ).max(1 ),
96+ numFP16ExpLanes = (lanes / 4 ).max(1 )
97+ )
98+ }
8499 MuonCoreParams (
85- numWarps = up( SIMTCoreKey ).get .numWarps,
86- numLanes = up( SIMTCoreKey ).get.numLanes ,
100+ numWarps = simt .numWarps,
101+ numLanes = resolvedNumLanes ,
87102 numCores = n,
88103 numClusters = 2 , // TODO: magic number
89104 noILP = noILP,
90105 numIssueQueueEntries = numIssueQueueEntries,
106+ intPipe = intPipe.getOrElse(MuonCoreParams ().intPipe),
107+ fpPipe = fpPipe.getOrElse(MuonCoreParams ().fpPipe),
91108 // for muon, numSMEMInFlights controlled by lsu parameters, rather than
92109 // from SIMTCoreParams. TODO: use SIMTCoreParams instead?
93110 // logSMEMInFlights = log2Ceil(up(SIMTCoreKey).get.numSMEMInFlights),
94111 lsu = LoadStoreUnitParams (
95- numLsuLanes = up( SIMTCoreKey ).get. numLsuLanes
112+ numLsuLanes = numLanes.getOrElse(simt. numLsuLanes)
96113 ),
97114 trace = trace || difftest,
98115 difftest = difftest,
@@ -142,6 +159,7 @@ class WithMuonCores(
142159 standalone : Boolean = false , noILP : Boolean = false ,
143160 trace : Boolean = false , cyclotron : Boolean = false ,
144161 difftest : Boolean = false , disabled : Boolean = false ,
162+ numLanes : Option [Int ] = None ,
145163 numIssueQueueEntries : Int = 8 ,
146164 l0i : Option [DCacheParams ] = None , l0d : Option [DCacheParams ] = None )
147165 = this (n, location, RocketCrossingParams (
@@ -151,7 +169,7 @@ class WithMuonCores(
151169 case InSubsystem => CBUS
152170 case InCluster (clusterId) => CCBUS (clusterId)
153171 },
154- ), standalone, noILP, trace, cyclotron, difftest, disabled, numIssueQueueEntries, l0i, l0d)
172+ ), standalone, noILP, trace, cyclotron, difftest, disabled, numLanes, numIssueQueueEntries, l0i, l0d)
155173}
156174
157175class WithCyclotronCores (
0 commit comments