Skip to content

Commit a27b17e

Browse files
committed
lsu: metadata back to (mirrored) SRAMs
1 parent 95c34d1 commit a27b17e

1 file changed

Lines changed: 17 additions & 1 deletion

File tree

src/main/scala/radiance/muon/LSU.scala

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ case class LoadStoreUnitParams(
2020
val storeDataEntries: Int = 8, // limited to 8 unissued store requests
2121
val addressEntries: Int = 16, // limited to 16 unissued memory requests
2222

23+
// implementation details
24+
val metadataAsFlops: Boolean = false, // metadata can be implemented as flops or as SRAM
25+
2326
// purely performance optimizations; turn off if bad things are happening
2427
val smemDoesntReorder: Boolean = true, // see comment above LSQMemUpdate
2528
val fastHeadUpdate: Boolean = true, // allow logical head to update on same cycle as memUpdate / memResponse
@@ -1000,7 +1003,7 @@ class LoadStoreUnit(implicit p: Parameters) extends CoreModule()(p) {
10001003

10011004
val totalQueueEntries = muonParams.numWarps * (muonParams.lsu.numGlobalLdqEntries + muonParams.lsu.numGlobalStqEntries + muonParams.lsu.numSharedLdqEntries + muonParams.lsu.numSharedStqEntries)
10021005

1003-
val (metadataMemR0, metadataMemR1, metadataMemW) = {
1006+
val (metadataMemR0, metadataMemR1, metadataMemW) = if (muonParams.lsu.metadataAsFlops) {
10041007
val addrWidth = log2Up(totalQueueEntries)
10051008
val metadataMem = RegInit(VecInit.fill(totalQueueEntries)(0.U.asTypeOf(new Metadata)))
10061009
val metadataMemR0 = Wire(new MemoryReadPort(new Metadata, addrWidth))
@@ -1015,6 +1018,19 @@ class LoadStoreUnit(implicit p: Parameters) extends CoreModule()(p) {
10151018
metadataMem(metadataMemW.address) := metadataMemW.data
10161019
}
10171020

1021+
(metadataMemR0, metadataMemR1, metadataMemW)
1022+
} else {
1023+
val metadataMem = MultiReadOneWriteSRAM(
1024+
totalQueueEntries,
1025+
new Metadata,
1026+
numReadPorts = 2,
1027+
masked = false
1028+
)
1029+
1030+
val metadataMemR0 = metadataMem.readPorts(0)
1031+
val metadataMemR1 = metadataMem.readPorts(1)
1032+
val metadataMemW = metadataMem.writePorts(0)
1033+
10181034
(metadataMemR0, metadataMemR1, metadataMemW)
10191035
}
10201036

0 commit comments

Comments
 (0)