Bundle Kelvin's memory interface - Create a KelvinMemIO Bundle, containing the memory interface for Kelvin. This simplifies connecting the memory interface to a memory in Chisel. Change-Id: Ib12a3aa3f1b2572f1dca8cc6d854b534eb0617d8
diff --git a/hdl/chisel/src/matcha/Kelvin.scala b/hdl/chisel/src/matcha/Kelvin.scala index 65c8da0..31efda2 100644 --- a/hdl/chisel/src/matcha/Kelvin.scala +++ b/hdl/chisel/src/matcha/Kelvin.scala
@@ -19,6 +19,19 @@ import common._ import _root_.circt.stage.ChiselStage +class KelvinMemIO(p: kelvin.Parameters) extends Bundle { + val cvalid = (Output(Bool())) + val cready = (Input(Bool())) + val cwrite = (Output(Bool())) + val caddr = (Output(UInt(p.axiSysAddrBits.W))) + val cid = (Output(UInt(p.axiSysIdBits.W))) + val wdata = (Output(UInt(p.axiSysDataBits.W))) + val wmask = (Output(UInt((p.axiSysDataBits / 8).W))) + val rvalid = (Input(Bool())) + val rid = (Input(UInt(p.axiSysIdBits.W))) + val rdata = (Input(UInt(p.axiSysDataBits.W))) +} + object Kelvin { def apply(p: kelvin.Parameters): Kelvin = { return Module(new Kelvin(p)) @@ -30,16 +43,7 @@ val clk_i = IO(Input(Clock())) val rst_ni = IO(Input(AsyncReset())) - val cvalid = IO(Output(Bool())) - val cready = IO(Input(Bool())) - val cwrite = IO(Output(Bool())) - val caddr = IO(Output(UInt(p.axiSysAddrBits.W))) - val cid = IO(Output(UInt(p.axiSysIdBits.W))) - val wdata = IO(Output(UInt(p.axiSysDataBits.W))) - val wmask = IO(Output(UInt((p.axiSysDataBits / 8).W))) - val rvalid = IO(Input(Bool())) - val rid = IO(Input(UInt(p.axiSysIdBits.W))) - val rdata = IO(Input(UInt(p.axiSysDataBits.W))) + val mem = IO(new KelvinMemIO(p)) val clk_freeze = IO(Input(Bool())) val ml_reset = IO(Input(Bool())) @@ -118,16 +122,16 @@ // ------------------------------------------------------------------------- // SRAM bridge. - cvalid := bus.io.out.cvalid - bus.io.out.cready := cready - cwrite := bus.io.out.cwrite - caddr := bus.io.out.caddr - cid := bus.io.out.cid - wdata := bus.io.out.wdata - wmask := bus.io.out.wmask - bus.io.out.rvalid := rvalid - bus.io.out.rid := rid - bus.io.out.rdata := rdata + mem.cvalid := bus.io.out.cvalid + bus.io.out.cready := mem.cready + mem.cwrite := bus.io.out.cwrite + mem.caddr := bus.io.out.caddr + mem.cid := bus.io.out.cid + mem.wdata := bus.io.out.wdata + mem.wmask := bus.io.out.wmask + bus.io.out.rvalid := mem.rvalid + bus.io.out.rid := mem.rid + bus.io.out.rdata := mem.rdata // ------------------------------------------------------------------------- // Command interface.
diff --git a/tests/verilator_sim/matcha/kelvin_tb.cc b/tests/verilator_sim/matcha/kelvin_tb.cc index fe1a765..5211117 100644 --- a/tests/verilator_sim/matcha/kelvin_tb.cc +++ b/tests/verilator_sim/matcha/kelvin_tb.cc
@@ -78,16 +78,16 @@ core.slog_addr(slog_addr); core.slog_data(slog_data); - core.cvalid(cvalid); - core.cready(cready); - core.cwrite(cwrite); - core.caddr(caddr); - core.cid(cid); - core.wdata(wdata); - core.wmask(wmask); - core.rvalid(rvalid); - core.rid(rid); - core.rdata(rdata); + core.mem_cvalid(cvalid); + core.mem_cready(cready); + core.mem_cwrite(cwrite); + core.mem_caddr(caddr); + core.mem_cid(cid); + core.mem_wdata(wdata); + core.mem_wmask(wmask); + core.mem_rvalid(rvalid); + core.mem_rid(rid); + core.mem_rdata(rdata); mif.clock(tb.clock); mif.reset(tb.reset);