Add debug_req and matcha parameters Change-Id: I8fd35c702530093d396ce289e8d058ee6ea6fa01
diff --git a/hdl/chisel/src/chai/ChAI.scala b/hdl/chisel/src/chai/ChAI.scala index 97ce896..cfd1ba6 100644 --- a/hdl/chisel/src/chai/ChAI.scala +++ b/hdl/chisel/src/chai/ChAI.scala
@@ -70,6 +70,7 @@ u_kelvin.ml_reset := 0.U u_kelvin.pc_start := 0.U u_kelvin.volt_sel := 0.U + u_kelvin.debug_req := 0.U io.finish := u_kelvin.finish io.fault := u_kelvin.fault
diff --git a/hdl/chisel/src/kelvin/Core.scala b/hdl/chisel/src/kelvin/Core.scala index ee59964..100078c 100644 --- a/hdl/chisel/src/kelvin/Core.scala +++ b/hdl/chisel/src/kelvin/Core.scala
@@ -30,6 +30,7 @@ val csr = new CsrInOutIO(p) val halted = Output(Bool()) val fault = Output(Bool()) + val debug_req = Input(Bool()) val ibus = new IBusIO(p) val dbus = new DBusIO(p)
diff --git a/hdl/chisel/src/kelvin/Parameters.scala b/hdl/chisel/src/kelvin/Parameters.scala index 7c4b983..5b4b14e 100644 --- a/hdl/chisel/src/kelvin/Parameters.scala +++ b/hdl/chisel/src/kelvin/Parameters.scala
@@ -31,7 +31,7 @@ } -case class Parameters(m: Seq[MemoryRegion] = Seq()) { +case class Parameters(m: Seq[MemoryRegion] = Seq(), hartId: UInt = 0.U(32.W)) { case object Core { val tiny = 0 val little = 1
diff --git a/hdl/chisel/src/kelvin/scalar/Csr.scala b/hdl/chisel/src/kelvin/scalar/Csr.scala index 9536f11..b7c2315 100644 --- a/hdl/chisel/src/kelvin/scalar/Csr.scala +++ b/hdl/chisel/src/kelvin/scalar/Csr.scala
@@ -139,7 +139,7 @@ val mscratch = RegInit(0.U(32.W)) val mepc = RegInit(0.U(32.W)) - val mhartid = RegInit(0.U(32.W)) + val mhartid = RegInit(p.hartId) val mcycle = RegInit(0.U(64.W)) val minstret = RegInit(0.U(64.W))
diff --git a/hdl/chisel/src/matcha/BUILD b/hdl/chisel/src/matcha/BUILD index eb4ab1b..ebbc792 100644 --- a/hdl/chisel/src/matcha/BUILD +++ b/hdl/chisel/src/matcha/BUILD
@@ -22,6 +22,7 @@ "Axi2Sram.scala", "Crossbar.scala", "Kelvin.scala", + "MatchaParameters.scala", ], deps = [ "//hdl/chisel/src/common:common",
diff --git a/hdl/chisel/src/matcha/Kelvin.scala b/hdl/chisel/src/matcha/Kelvin.scala index b8ed6cf..5fd07aa 100644 --- a/hdl/chisel/src/matcha/Kelvin.scala +++ b/hdl/chisel/src/matcha/Kelvin.scala
@@ -49,6 +49,7 @@ val ml_reset = IO(Input(Bool())) val pc_start = IO(Input(UInt(32.W))) val volt_sel = IO(Input(Bool())) + val debug_req = IO(Input(Bool())) val finish = IO(Output(Bool())) val host_req = IO(Output(Bool())) @@ -104,6 +105,10 @@ slog := core.io.slog // ------------------------------------------------------------------------- + // Debug Request. + core.io.debug_req := debug_req + + // ------------------------------------------------------------------------- // L1Cache. l1d.io.dbus <> core.io.dbus l1d.io.flush <> core.io.dflush @@ -144,6 +149,6 @@ } object EmitKelvin extends App { - val p = new kelvin.Parameters(Seq()) + val p = new kelvin.MatchaParameters ChiselStage.emitSystemVerilogFile(new Kelvin(p), args) }
diff --git a/hdl/chisel/src/matcha/MatchaParameters.scala b/hdl/chisel/src/matcha/MatchaParameters.scala new file mode 100644 index 0000000..7b5e6cf --- /dev/null +++ b/hdl/chisel/src/matcha/MatchaParameters.scala
@@ -0,0 +1,29 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package kelvin + +import chisel3._ +import chisel3.util._ + +class MatchaParameters(m: Seq[MemoryRegion] = Seq(), + hartId: UInt = 2.U(32.W)) extends Parameters(m) { + + // Debug + // tl_main_pkg::ADDR_SPACE_DBG + dm::HaltAddress + val dbgBase = 0x4000 + val haltAddress = 0x800 + val dmHaltAddress = dbgBase + haltAddress + +}
diff --git a/tests/verilator_sim/kelvin/core_tb.cc b/tests/verilator_sim/kelvin/core_tb.cc index 9836dc6..969e361 100644 --- a/tests/verilator_sim/kelvin/core_tb.cc +++ b/tests/verilator_sim/kelvin/core_tb.cc
@@ -45,6 +45,7 @@ sc_signal<bool> io_halted; sc_signal<bool> io_fault; + sc_signal<bool> io_debug_req; sc_signal<bool> io_ibus_valid; sc_signal<bool> io_ibus_ready; sc_signal<bool> io_dbus_valid; @@ -150,6 +151,7 @@ core.reset(tb.reset); core.io_halted(io_halted); core.io_fault(io_fault); + core.io_debug_req(io_debug_req); core.io_ibus_valid(io_ibus_valid); core.io_ibus_ready(io_ibus_ready); core.io_dbus_valid(io_dbus_valid);
diff --git a/tests/verilator_sim/matcha/kelvin_tb.cc b/tests/verilator_sim/matcha/kelvin_tb.cc index 5211117..5304184 100644 --- a/tests/verilator_sim/matcha/kelvin_tb.cc +++ b/tests/verilator_sim/matcha/kelvin_tb.cc
@@ -42,6 +42,7 @@ sc_signal<bool> clk_freeze; sc_signal<bool> ml_reset; sc_signal<bool> volt_sel; + sc_signal<bool> debug_req; sc_signal<bool> slog_valid; sc_signal<sc_bv<5> > slog_addr; sc_signal<sc_bv<32> > slog_data; @@ -61,6 +62,7 @@ clk_freeze = 0; pc_start = 0x00000000; volt_sel = 0; + debug_req = 0; tb.io_halted(finish); tb.io_fault(fault); @@ -74,6 +76,7 @@ core.finish(finish); core.fault(fault); core.host_req(host_req); + core.host_req(debug_req); core.slog_valid(slog_valid); core.slog_addr(slog_addr); core.slog_data(slog_data);