Refactored packet headers/payloads
This commit is contained in:
parent
e1225c5114
commit
a2fa3fd04d
@ -48,32 +48,32 @@ class HellaCacheArbiter(n: Int)(implicit conf: RocketConfiguration) extends Comp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class UncachedRequestorIO extends Bundle {
|
class UncachedRequestorIO(implicit conf: LogicalNetworkConfiguration) extends Bundle {
|
||||||
val xact_init = (new FIFOIO) { new TransactionInit }
|
val xact_init = (new ClientSourcedIO){(new LogicalNetworkIO){new TransactionInit }}
|
||||||
val xact_abort = (new FIFOIO) { new TransactionAbort }.flip
|
val xact_abort = (new MasterSourcedIO) {(new LogicalNetworkIO){new TransactionAbort }}
|
||||||
val xact_rep = (new FIFOIO) { new TransactionReply }.flip
|
val xact_rep = (new MasterSourcedIO) {(new LogicalNetworkIO){new TransactionReply }}
|
||||||
val xact_finish = (new FIFOIO) { new TransactionFinish }
|
val xact_finish = (new ClientSourcedIO){(new LogicalNetworkIO){new TransactionFinish }}
|
||||||
}
|
}
|
||||||
|
|
||||||
class MemArbiter(n: Int) extends Component {
|
class MemArbiter(n: Int)(implicit conf: LogicalNetworkConfiguration) extends Component {
|
||||||
val io = new Bundle {
|
val io = new Bundle {
|
||||||
val mem = new UncachedRequestorIO
|
val mem = new UncachedRequestorIO
|
||||||
val requestor = Vec(n) { new UncachedRequestorIO }.flip
|
val requestor = Vec(n) { new UncachedRequestorIO }.flip
|
||||||
}
|
}
|
||||||
|
|
||||||
var xi_bits = new TransactionInit
|
var xi_bits = new TransactionInit
|
||||||
xi_bits := io.requestor(n-1).xact_init.bits
|
xi_bits := io.requestor(n-1).xact_init.bits.payload
|
||||||
xi_bits.tile_xact_id := Cat(io.requestor(n-1).xact_init.bits.tile_xact_id, UFix(n-1, log2Up(n)))
|
xi_bits.tile_xact_id := Cat(io.requestor(n-1).xact_init.bits.payload.tile_xact_id, UFix(n-1, log2Up(n)))
|
||||||
for (i <- n-2 to 0 by -1)
|
for (i <- n-2 to 0 by -1)
|
||||||
{
|
{
|
||||||
var my_xi_bits = new TransactionInit
|
var my_xi_bits = new TransactionInit
|
||||||
my_xi_bits := io.requestor(i).xact_init.bits
|
my_xi_bits := io.requestor(i).xact_init.bits.payload
|
||||||
my_xi_bits.tile_xact_id := Cat(io.requestor(i).xact_init.bits.tile_xact_id, UFix(i, log2Up(n)))
|
my_xi_bits.tile_xact_id := Cat(io.requestor(i).xact_init.bits.payload.tile_xact_id, UFix(i, log2Up(n)))
|
||||||
|
|
||||||
xi_bits = Mux(io.requestor(i).xact_init.valid, my_xi_bits, xi_bits)
|
xi_bits = Mux(io.requestor(i).xact_init.valid, my_xi_bits, xi_bits)
|
||||||
}
|
}
|
||||||
|
|
||||||
io.mem.xact_init.bits := xi_bits
|
io.mem.xact_init.bits.payload := xi_bits
|
||||||
io.mem.xact_init.valid := io.requestor.map(_.xact_init.valid).reduce(_||_)
|
io.mem.xact_init.valid := io.requestor.map(_.xact_init.valid).reduce(_||_)
|
||||||
io.requestor(0).xact_init.ready := io.mem.xact_init.ready
|
io.requestor(0).xact_init.ready := io.mem.xact_init.ready
|
||||||
for (i <- 1 until n)
|
for (i <- 1 until n)
|
||||||
@ -92,22 +92,22 @@ class MemArbiter(n: Int) extends Component {
|
|||||||
io.mem.xact_rep.ready := Bool(false)
|
io.mem.xact_rep.ready := Bool(false)
|
||||||
for (i <- 0 until n)
|
for (i <- 0 until n)
|
||||||
{
|
{
|
||||||
val tag = io.mem.xact_rep.bits.tile_xact_id
|
val tag = io.mem.xact_rep.bits.payload.tile_xact_id
|
||||||
io.requestor(i).xact_rep.valid := Bool(false)
|
io.requestor(i).xact_rep.valid := Bool(false)
|
||||||
when (tag(log2Up(n)-1,0) === UFix(i)) {
|
when (tag(log2Up(n)-1,0) === UFix(i)) {
|
||||||
io.requestor(i).xact_rep.valid := io.mem.xact_rep.valid
|
io.requestor(i).xact_rep.valid := io.mem.xact_rep.valid
|
||||||
io.mem.xact_rep.ready := io.requestor(i).xact_rep.ready
|
io.mem.xact_rep.ready := io.requestor(i).xact_rep.ready
|
||||||
}
|
}
|
||||||
io.requestor(i).xact_rep.bits := io.mem.xact_rep.bits
|
io.requestor(i).xact_rep.bits := io.mem.xact_rep.bits
|
||||||
io.requestor(i).xact_rep.bits.tile_xact_id := tag >> UFix(log2Up(n))
|
io.requestor(i).xact_rep.bits.payload.tile_xact_id := tag >> UFix(log2Up(n))
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i <- 0 until n)
|
for (i <- 0 until n)
|
||||||
{
|
{
|
||||||
val tag = io.mem.xact_abort.bits.tile_xact_id
|
val tag = io.mem.xact_abort.bits.payload.tile_xact_id
|
||||||
io.requestor(i).xact_abort.valid := io.mem.xact_abort.valid && tag(log2Up(n)-1,0) === UFix(i)
|
io.requestor(i).xact_abort.valid := io.mem.xact_abort.valid && tag(log2Up(n)-1,0) === UFix(i)
|
||||||
io.requestor(i).xact_abort.bits := io.mem.xact_abort.bits
|
io.requestor(i).xact_abort.bits := io.mem.xact_abort.bits
|
||||||
io.requestor(i).xact_abort.bits.tile_xact_id := tag >> UFix(log2Up(n))
|
io.requestor(i).xact_abort.bits.payload.tile_xact_id := tag >> UFix(log2Up(n))
|
||||||
}
|
}
|
||||||
|
|
||||||
io.mem.xact_abort.ready := Bool(true)
|
io.mem.xact_abort.ready := Bool(true)
|
||||||
|
@ -38,6 +38,7 @@ class HTIFIO(ntiles: Int) extends Bundle
|
|||||||
|
|
||||||
class rocketHTIF(w: Int)(implicit conf: CoherenceHubConfiguration) extends Component with ClientCoherenceAgent
|
class rocketHTIF(w: Int)(implicit conf: CoherenceHubConfiguration) extends Component with ClientCoherenceAgent
|
||||||
{
|
{
|
||||||
|
implicit val lnConf = conf.ln
|
||||||
val io = new Bundle {
|
val io = new Bundle {
|
||||||
val host = new HostIO(w)
|
val host = new HostIO(w)
|
||||||
val cpu = Vec(conf.ln.nTiles) { new HTIFIO(conf.ln.nTiles).flip }
|
val cpu = Vec(conf.ln.nTiles) { new HTIFIO(conf.ln.nTiles).flip }
|
||||||
@ -107,8 +108,8 @@ class rocketHTIF(w: Int)(implicit conf: CoherenceHubConfiguration) extends Compo
|
|||||||
val mem_nacked = Reg(resetVal = Bool(false))
|
val mem_nacked = Reg(resetVal = Bool(false))
|
||||||
when (io.mem.xact_rep.valid) {
|
when (io.mem.xact_rep.valid) {
|
||||||
mem_acked := Bool(true)
|
mem_acked := Bool(true)
|
||||||
mem_gxid := io.mem.xact_rep.bits.global_xact_id
|
mem_gxid := io.mem.xact_rep.bits.payload.global_xact_id
|
||||||
mem_needs_ack := io.mem.xact_rep.bits.require_ack
|
mem_needs_ack := io.mem.xact_rep.bits.payload.require_ack
|
||||||
}
|
}
|
||||||
io.mem.xact_rep.ready := Bool(true)
|
io.mem.xact_rep.ready := Bool(true)
|
||||||
when (io.mem.xact_abort.valid) { mem_nacked := Bool(true) }
|
when (io.mem.xact_abort.valid) { mem_nacked := Bool(true) }
|
||||||
@ -175,7 +176,7 @@ class rocketHTIF(w: Int)(implicit conf: CoherenceHubConfiguration) extends Compo
|
|||||||
for (i <- 0 until MEM_DATA_BITS/short_request_bits) {
|
for (i <- 0 until MEM_DATA_BITS/short_request_bits) {
|
||||||
val idx = Cat(mem_cnt, UFix(i, log2Up(MEM_DATA_BITS/short_request_bits)))
|
val idx = Cat(mem_cnt, UFix(i, log2Up(MEM_DATA_BITS/short_request_bits)))
|
||||||
when (state === state_mem_rdata && io.mem.xact_rep.valid) {
|
when (state === state_mem_rdata && io.mem.xact_rep.valid) {
|
||||||
packet_ram(idx) := io.mem.xact_rep.bits.data((i+1)*short_request_bits-1, i*short_request_bits)
|
packet_ram(idx) := io.mem.xact_rep.bits.payload.data((i+1)*short_request_bits-1, i*short_request_bits)
|
||||||
}
|
}
|
||||||
mem_req_data = Cat(packet_ram(idx), mem_req_data)
|
mem_req_data = Cat(packet_ram(idx), mem_req_data)
|
||||||
}
|
}
|
||||||
@ -183,25 +184,25 @@ class rocketHTIF(w: Int)(implicit conf: CoherenceHubConfiguration) extends Compo
|
|||||||
val init_addr = addr.toUFix >> UFix(OFFSET_BITS-3)
|
val init_addr = addr.toUFix >> UFix(OFFSET_BITS-3)
|
||||||
val co = conf.co.asInstanceOf[CoherencePolicyWithUncached]
|
val co = conf.co.asInstanceOf[CoherencePolicyWithUncached]
|
||||||
x_init.io.enq.bits := Mux(cmd === cmd_writemem, co.getUncachedWriteTransactionInit(init_addr, UFix(0)), co.getUncachedReadTransactionInit(init_addr, UFix(0)))
|
x_init.io.enq.bits := Mux(cmd === cmd_writemem, co.getUncachedWriteTransactionInit(init_addr, UFix(0)), co.getUncachedReadTransactionInit(init_addr, UFix(0)))
|
||||||
io.mem.xact_init <> x_init.io.deq
|
io.mem.xact_init <> FIFOedLogicalNetworkIOWrapper(x_init.io.deq)
|
||||||
io.mem.xact_init_data.valid:= state === state_mem_wdata
|
io.mem.xact_init_data.valid:= state === state_mem_wdata
|
||||||
io.mem.xact_init_data.bits.data := mem_req_data
|
io.mem.xact_init_data.bits.payload.data := mem_req_data
|
||||||
io.mem.xact_finish.valid := (state === state_mem_finish) && mem_needs_ack
|
io.mem.xact_finish.valid := (state === state_mem_finish) && mem_needs_ack
|
||||||
io.mem.xact_finish.bits.global_xact_id := mem_gxid
|
io.mem.xact_finish.bits.payload.global_xact_id := mem_gxid
|
||||||
io.mem.probe_req.ready := Bool(false)
|
io.mem.probe_req.ready := Bool(false)
|
||||||
io.mem.probe_rep.valid := Bool(false)
|
io.mem.probe_rep.valid := Bool(false)
|
||||||
io.mem.probe_rep_data.valid := Bool(false)
|
io.mem.probe_rep_data.valid := Bool(false)
|
||||||
|
|
||||||
io.mem.xact_init.header.src := UFix(1)
|
io.mem.xact_init.bits.header.src := UFix(conf.ln.nTiles)
|
||||||
io.mem.xact_init.header.dst := UFix(0)
|
io.mem.xact_init.bits.header.dst := UFix(0)
|
||||||
io.mem.xact_init_data.header.src := UFix(1)
|
io.mem.xact_init_data.bits.header.src := UFix(conf.ln.nTiles)
|
||||||
io.mem.xact_init_data.header.dst := UFix(0)
|
io.mem.xact_init_data.bits.header.dst := UFix(0)
|
||||||
io.mem.probe_rep.header.src := UFix(1)
|
io.mem.probe_rep.bits.header.src := UFix(conf.ln.nTiles)
|
||||||
io.mem.probe_rep.header.dst := UFix(0)
|
io.mem.probe_rep.bits.header.dst := UFix(0)
|
||||||
io.mem.probe_rep_data.header.src := UFix(1)
|
io.mem.probe_rep_data.bits.header.src := UFix(conf.ln.nTiles)
|
||||||
io.mem.probe_rep_data.header.dst := UFix(0)
|
io.mem.probe_rep_data.bits.header.dst := UFix(0)
|
||||||
io.mem.xact_finish.header.src := UFix(1)
|
io.mem.xact_finish.bits.header.src := UFix(conf.ln.nTiles)
|
||||||
io.mem.xact_finish.header.dst := UFix(0)
|
io.mem.xact_finish.bits.header.dst := UFix(0)
|
||||||
|
|
||||||
val pcrReadData = Vec(conf.ln.nTiles) { Reg() { Bits(width = io.cpu(0).pcr_rep.bits.getWidth) } }
|
val pcrReadData = Vec(conf.ln.nTiles) { Reg() { Bits(width = io.cpu(0).pcr_rep.bits.getWidth) } }
|
||||||
for (i <- 0 until conf.ln.nTiles) {
|
for (i <- 0 until conf.ln.nTiles) {
|
||||||
|
@ -50,7 +50,7 @@ class CPUFrontendIO(implicit conf: ICacheConfig) extends Bundle {
|
|||||||
val invalidate = Bool(OUTPUT)
|
val invalidate = Bool(OUTPUT)
|
||||||
}
|
}
|
||||||
|
|
||||||
class Frontend(implicit c: ICacheConfig) extends Component
|
class Frontend(implicit c: ICacheConfig, lnconf: LogicalNetworkConfiguration) extends Component
|
||||||
{
|
{
|
||||||
val io = new Bundle {
|
val io = new Bundle {
|
||||||
val cpu = new CPUFrontendIO()(c).flip
|
val cpu = new CPUFrontendIO()(c).flip
|
||||||
@ -121,7 +121,7 @@ class Frontend(implicit c: ICacheConfig) extends Component
|
|||||||
io.cpu.resp.bits.xcpt_if := s2_xcpt_if
|
io.cpu.resp.bits.xcpt_if := s2_xcpt_if
|
||||||
}
|
}
|
||||||
|
|
||||||
class ICache(implicit c: ICacheConfig) extends Component
|
class ICache(implicit c: ICacheConfig, lnconf: LogicalNetworkConfiguration) extends Component
|
||||||
{
|
{
|
||||||
val io = new Bundle {
|
val io = new Bundle {
|
||||||
val req = new PipeIO()(new Bundle {
|
val req = new PipeIO()(new Bundle {
|
||||||
@ -224,7 +224,7 @@ class ICache(implicit c: ICacheConfig) extends Component
|
|||||||
val data_array = Mem(c.sets*REFILL_CYCLES, seqRead = true){ Bits(width = c.code.width(c.databits)) }
|
val data_array = Mem(c.sets*REFILL_CYCLES, seqRead = true){ Bits(width = c.code.width(c.databits)) }
|
||||||
val s1_dout = Reg(){ Bits() }
|
val s1_dout = Reg(){ Bits() }
|
||||||
when (io.mem.xact_rep.valid && repl_way === UFix(i)) {
|
when (io.mem.xact_rep.valid && repl_way === UFix(i)) {
|
||||||
val d = io.mem.xact_rep.bits.data
|
val d = io.mem.xact_rep.bits.payload.data
|
||||||
data_array(Cat(s2_idx,rf_cnt)) := c.code.encode(d)
|
data_array(Cat(s2_idx,rf_cnt)) := c.code.encode(d)
|
||||||
}
|
}
|
||||||
/*.else*/when (s0_valid) { // uncomment ".else" to infer 6T SRAM
|
/*.else*/when (s0_valid) { // uncomment ".else" to infer 6T SRAM
|
||||||
@ -238,14 +238,14 @@ class ICache(implicit c: ICacheConfig) extends Component
|
|||||||
io.resp.bits.datablock := Mux1H(s2_tag_hit, s2_dout)
|
io.resp.bits.datablock := Mux1H(s2_tag_hit, s2_dout)
|
||||||
|
|
||||||
val finish_q = (new Queue(1)) { new TransactionFinish }
|
val finish_q = (new Queue(1)) { new TransactionFinish }
|
||||||
finish_q.io.enq.valid := refill_done && io.mem.xact_rep.bits.require_ack
|
finish_q.io.enq.valid := refill_done && io.mem.xact_rep.bits.payload.require_ack
|
||||||
finish_q.io.enq.bits.global_xact_id := io.mem.xact_rep.bits.global_xact_id
|
finish_q.io.enq.bits.global_xact_id := io.mem.xact_rep.bits.payload.global_xact_id
|
||||||
|
|
||||||
// output signals
|
// output signals
|
||||||
io.resp.valid := s2_hit
|
io.resp.valid := s2_hit
|
||||||
io.mem.xact_init.valid := (state === s_request) && finish_q.io.enq.ready
|
io.mem.xact_init.valid := (state === s_request) && finish_q.io.enq.ready
|
||||||
io.mem.xact_init.bits := c.co.getUncachedReadTransactionInit(s2_addr >> UFix(c.offbits), UFix(0))
|
io.mem.xact_init.bits.payload := c.co.getUncachedReadTransactionInit(s2_addr >> UFix(c.offbits), UFix(0))
|
||||||
io.mem.xact_finish <> finish_q.io.deq
|
io.mem.xact_finish <> FIFOedLogicalNetworkIOWrapper(finish_q.io.deq)
|
||||||
io.mem.xact_rep.ready := Bool(true)
|
io.mem.xact_rep.ready := Bool(true)
|
||||||
|
|
||||||
// control state machine
|
// control state machine
|
||||||
|
@ -915,9 +915,9 @@ class HellaCache(implicit conf: DCacheConfig, lnconf: LogicalNetworkConfiguratio
|
|||||||
mshr.io.req.bits.data := s2_req.data
|
mshr.io.req.bits.data := s2_req.data
|
||||||
|
|
||||||
mshr.io.mem_rep.valid := io.mem.xact_rep.fire()
|
mshr.io.mem_rep.valid := io.mem.xact_rep.fire()
|
||||||
mshr.io.mem_rep.bits := io.mem.xact_rep.bits
|
mshr.io.mem_rep.bits := io.mem.xact_rep.bits.payload
|
||||||
mshr.io.mem_abort.valid := io.mem.xact_abort.valid
|
mshr.io.mem_abort.valid := io.mem.xact_abort.valid
|
||||||
mshr.io.mem_abort.bits := io.mem.xact_abort.bits
|
mshr.io.mem_abort.bits := io.mem.xact_abort.bits.payload
|
||||||
io.mem.xact_abort.ready := Bool(true)
|
io.mem.xact_abort.ready := Bool(true)
|
||||||
when (mshr.io.req.fire()) { replacer.miss }
|
when (mshr.io.req.fire()) { replacer.miss }
|
||||||
|
|
||||||
@ -931,8 +931,8 @@ class HellaCache(implicit conf: DCacheConfig, lnconf: LogicalNetworkConfiguratio
|
|||||||
metaWriteArb.io.in(0) <> mshr.io.meta_write
|
metaWriteArb.io.in(0) <> mshr.io.meta_write
|
||||||
|
|
||||||
// probes
|
// probes
|
||||||
prober.io.req <> io.mem.probe_req
|
prober.io.req <> FIFOedLogicalNetworkIOUnwrapper(io.mem.probe_req)
|
||||||
prober.io.rep <> io.mem.probe_rep
|
FIFOedLogicalNetworkIOWrapper(prober.io.rep) <> io.mem.probe_rep
|
||||||
prober.io.mshr_req <> mshr.io.probe
|
prober.io.mshr_req <> mshr.io.probe
|
||||||
prober.io.wb_req <> wb.io.probe
|
prober.io.wb_req <> wb.io.probe
|
||||||
prober.io.way_en := s2_tag_match_way
|
prober.io.way_en := s2_tag_match_way
|
||||||
@ -941,19 +941,19 @@ class HellaCache(implicit conf: DCacheConfig, lnconf: LogicalNetworkConfiguratio
|
|||||||
prober.io.meta_write <> metaWriteArb.io.in(1)
|
prober.io.meta_write <> metaWriteArb.io.in(1)
|
||||||
|
|
||||||
// refills
|
// refills
|
||||||
val refill = conf.co.messageUpdatesDataArray(io.mem.xact_rep.bits)
|
val refill = conf.co.messageUpdatesDataArray(io.mem.xact_rep.bits.payload)
|
||||||
writeArb.io.in(1).valid := io.mem.xact_rep.valid && refill
|
writeArb.io.in(1).valid := io.mem.xact_rep.valid && refill
|
||||||
io.mem.xact_rep.ready := writeArb.io.in(1).ready || !refill
|
io.mem.xact_rep.ready := writeArb.io.in(1).ready || !refill
|
||||||
writeArb.io.in(1).bits := mshr.io.mem_resp
|
writeArb.io.in(1).bits := mshr.io.mem_resp
|
||||||
writeArb.io.in(1).bits.wmask := Fix(-1)
|
writeArb.io.in(1).bits.wmask := Fix(-1)
|
||||||
writeArb.io.in(1).bits.data := io.mem.xact_rep.bits.data
|
writeArb.io.in(1).bits.data := io.mem.xact_rep.bits.payload.data
|
||||||
|
|
||||||
// writebacks
|
// writebacks
|
||||||
wb.io.req <> mshr.io.wb_req
|
wb.io.req <> mshr.io.wb_req
|
||||||
wb.io.meta_read <> metaReadArb.io.in(3)
|
wb.io.meta_read <> metaReadArb.io.in(3)
|
||||||
wb.io.data_req <> readArb.io.in(2)
|
wb.io.data_req <> readArb.io.in(2)
|
||||||
wb.io.data_resp := s2_data_corrected
|
wb.io.data_resp := s2_data_corrected
|
||||||
wb.io.probe_rep_data <> io.mem.probe_rep_data
|
FIFOedLogicalNetworkIOWrapper(wb.io.probe_rep_data) <> io.mem.probe_rep_data
|
||||||
|
|
||||||
// store->load bypassing
|
// store->load bypassing
|
||||||
val s4_valid = Reg(s3_valid, resetVal = Bool(false))
|
val s4_valid = Reg(s3_valid, resetVal = Bool(false))
|
||||||
@ -1021,8 +1021,8 @@ class HellaCache(implicit conf: DCacheConfig, lnconf: LogicalNetworkConfiguratio
|
|||||||
xact_init_arb.io.in(1).valid := mshr.io.mem_req.valid && prober.io.req.ready
|
xact_init_arb.io.in(1).valid := mshr.io.mem_req.valid && prober.io.req.ready
|
||||||
mshr.io.mem_req.ready := xact_init_arb.io.in(1).ready && prober.io.req.ready
|
mshr.io.mem_req.ready := xact_init_arb.io.in(1).ready && prober.io.req.ready
|
||||||
xact_init_arb.io.in(1).bits := mshr.io.mem_req.bits
|
xact_init_arb.io.in(1).bits := mshr.io.mem_req.bits
|
||||||
io.mem.xact_init <> xact_init_arb.io.out
|
io.mem.xact_init <> FIFOedLogicalNetworkIOWrapper(xact_init_arb.io.out)
|
||||||
|
|
||||||
io.mem.xact_init_data <> wb.io.mem_req_data
|
io.mem.xact_init_data <> FIFOedLogicalNetworkIOWrapper(wb.io.mem_req_data)
|
||||||
io.mem.xact_finish <> mshr.io.mem_finish
|
io.mem.xact_finish <> FIFOedLogicalNetworkIOWrapper(mshr.io.mem_finish)
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@ class Tile(resetSignal: Bool = null)(confIn: RocketConfiguration) extends Compon
|
|||||||
}
|
}
|
||||||
|
|
||||||
val core = new Core
|
val core = new Core
|
||||||
val icache = new Frontend()(confIn.icache)
|
val icache = new Frontend()(confIn.icache, lnConf)
|
||||||
val dcache = new HellaCache
|
val dcache = new HellaCache
|
||||||
|
|
||||||
val arbiter = new MemArbiter(memPorts)
|
val arbiter = new MemArbiter(memPorts)
|
||||||
@ -51,7 +51,7 @@ class Tile(resetSignal: Bool = null)(confIn: RocketConfiguration) extends Compon
|
|||||||
io.tilelink.probe_rep_data <> dcache.io.mem.probe_rep_data
|
io.tilelink.probe_rep_data <> dcache.io.mem.probe_rep_data
|
||||||
|
|
||||||
if (conf.vec) {
|
if (conf.vec) {
|
||||||
val vicache = new Frontend()(ICacheConfig(128, 1, conf.co)) // 128 sets x 1 ways (8KB)
|
val vicache = new Frontend()(ICacheConfig(128, 1, conf.co), lnConf) // 128 sets x 1 ways (8KB)
|
||||||
arbiter.io.requestor(2) <> vicache.io.mem
|
arbiter.io.requestor(2) <> vicache.io.mem
|
||||||
core.io.vimem <> vicache.io.cpu
|
core.io.vimem <> vicache.io.cpu
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user