Replicate D$ ECC encoder to remove arbiter -> ECC critical path
This commit is contained in:
parent
d5faae05a1
commit
58db99deb2
|
@ -33,7 +33,6 @@ class DCacheDataReq(implicit p: Parameters) extends L1HellaCacheBundle()(p) {
|
|||
val addr = Bits(width = untagBits)
|
||||
val write = Bool()
|
||||
val wdata = UInt(width = encBits * rowBytes / eccBytes)
|
||||
val poison = Bool()
|
||||
val wordMask = UInt(width = rowBytes / wordBytes)
|
||||
val eccMask = UInt(width = wordBytes / eccBytes)
|
||||
val way_en = Bits(width = nWays)
|
||||
|
@ -117,7 +116,6 @@ class DCacheModule(outer: DCache) extends HellaCacheModule(outer) {
|
|||
val dataArb = Module(new Arbiter(new DCacheDataReq, 4) with InlineInstance)
|
||||
dataArb.io.in.tail.foreach(_.bits.wdata := dataArb.io.in.head.bits.wdata) // tie off write ports by default
|
||||
data.io.req <> dataArb.io.out
|
||||
data.io.req.bits.wdata := encodeData(dataArb.io.out.bits.wdata(rowBits-1, 0), dataArb.io.out.bits.poison)
|
||||
dataArb.io.out.ready := true
|
||||
metaArb.io.out.ready := clock_en_reg
|
||||
|
||||
|
@ -431,8 +429,7 @@ class DCacheModule(outer: DCache) extends HellaCacheModule(outer) {
|
|||
dataArb.io.in(0).bits.write := pstore_drain
|
||||
dataArb.io.in(0).bits.addr := Mux(pstore2_valid, pstore2_addr, pstore1_addr)
|
||||
dataArb.io.in(0).bits.way_en := Mux(pstore2_valid, pstore2_way, pstore1_way)
|
||||
dataArb.io.in(0).bits.wdata := Fill(rowWords, Mux(pstore2_valid, pstore2_storegen_data, pstore1_data))
|
||||
dataArb.io.in(0).bits.poison := false
|
||||
dataArb.io.in(0).bits.wdata := encodeData(Fill(rowWords, Mux(pstore2_valid, pstore2_storegen_data, pstore1_data)), false.B)
|
||||
dataArb.io.in(0).bits.wordMask := UIntToOH(Mux(pstore2_valid, pstore2_addr, pstore1_addr).extract(rowOffBits-1,offsetlsb))
|
||||
dataArb.io.in(0).bits.eccMask := eccMask(Mux(pstore2_valid, pstore2_storegen_mask, pstore1_mask))
|
||||
|
||||
|
@ -576,8 +573,7 @@ class DCacheModule(outer: DCache) extends HellaCacheModule(outer) {
|
|||
dataArb.io.in(1).bits.write := true
|
||||
dataArb.io.in(1).bits.addr := (s2_vaddr >> idxLSB) << idxLSB | d_address_inc
|
||||
dataArb.io.in(1).bits.way_en := s2_victim_way
|
||||
dataArb.io.in(1).bits.wdata := tl_out.d.bits.data
|
||||
dataArb.io.in(1).bits.poison := tl_out.d.bits.corrupt
|
||||
dataArb.io.in(1).bits.wdata := encodeData(tl_out.d.bits.data, tl_out.d.bits.corrupt)
|
||||
dataArb.io.in(1).bits.wordMask := ~UInt(0, rowBytes / wordBytes)
|
||||
dataArb.io.in(1).bits.eccMask := ~UInt(0, wordBytes / eccBytes)
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue