Move several bus defs to a separate location
-Decouples bus definitions that rely only on parameter information from
the entire core library and core instantiations
-chai_sim target is able to build
Change-Id: I4adc88c8ab0507591ea817deae4baa9cbc5b63ba
diff --git a/hdl/chisel/src/kelvin/Axi.scala b/hdl/chisel/src/bus/Axi.scala
similarity index 99%
rename from hdl/chisel/src/kelvin/Axi.scala
rename to hdl/chisel/src/bus/Axi.scala
index 95016f9..2d9b39a 100644
--- a/hdl/chisel/src/kelvin/Axi.scala
+++ b/hdl/chisel/src/bus/Axi.scala
@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package kelvin
+package bus
import chisel3._
import chisel3.util._
diff --git a/hdl/chisel/src/bus/BUILD b/hdl/chisel/src/bus/BUILD
new file mode 100644
index 0000000..cbc3eff
--- /dev/null
+++ b/hdl/chisel/src/bus/BUILD
@@ -0,0 +1,33 @@
+# 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.
+
+load(
+ "@kelvin_hw//rules:chisel.bzl",
+ "chisel_library",
+)
+
+package(default_visibility = ["//visibility:public"])
+
+chisel_library(
+ name = "bus",
+ srcs = [
+ "Axi.scala",
+ "KelvinMemIO.scala",
+ "KelvinToTlul.scala",
+ "TileLinkUL.scala",
+ ],
+ deps = [
+ "//hdl/chisel/src/kelvin:kelvin_params",
+ ],
+)
diff --git a/hdl/chisel/src/bus/KelvinMemIO.scala b/hdl/chisel/src/bus/KelvinMemIO.scala
new file mode 100644
index 0000000..71c7de7
--- /dev/null
+++ b/hdl/chisel/src/bus/KelvinMemIO.scala
@@ -0,0 +1,31 @@
+// 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 bus
+
+import chisel3._
+import chisel3.util._
+
+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)))
+}
diff --git a/hdl/chisel/src/chai/KelvinToTlul.scala b/hdl/chisel/src/bus/KelvinToTlul.scala
similarity index 73%
rename from hdl/chisel/src/chai/KelvinToTlul.scala
rename to hdl/chisel/src/bus/KelvinToTlul.scala
index c8573c2..5ca32a1 100644
--- a/hdl/chisel/src/chai/KelvinToTlul.scala
+++ b/hdl/chisel/src/bus/KelvinToTlul.scala
@@ -12,29 +12,31 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package chai
+package bus
import chisel3._
import chisel3.util._
+import bus._
+
object KelvinToTlul {
object State extends ChiselEnum {
val sIdle, sWaitForReady, sWaitForResponse = Value
}
- def apply(tlul_p: kelvin.TLULParameters, kelvin_p: kelvin.Parameters): KelvinToTlul = {
+ def apply(tlul_p: TLULParameters, kelvin_p: kelvin.Parameters): KelvinToTlul = {
return Module(new KelvinToTlul(tlul_p, kelvin_p))
}
}
-class KelvinToTlul(tlul_p: kelvin.TLULParameters, kelvin_p: kelvin.Parameters) extends Module {
+class KelvinToTlul(tlul_p: TLULParameters, kelvin_p: kelvin.Parameters) extends Module {
import KelvinToTlul.State
import KelvinToTlul.State._
val io = IO(new Bundle {
- val tl_i = Input(new _root_.kelvin.TileLinkULIO_D2H(tlul_p))
- val tl_o = Output(new _root_.kelvin.TileLinkULIO_H2D(tlul_p))
- val kelvin = Flipped(new matcha.KelvinMemIO(kelvin_p))
+ val tl_i = Input(new TileLinkULIO_D2H(tlul_p))
+ val tl_o = Output(new TileLinkULIO_H2D(tlul_p))
+ val kelvin = Flipped(new KelvinMemIO(kelvin_p))
})
val state = RegInit(sIdle)
@@ -43,7 +45,7 @@
.map(x => Mux(io.kelvin.wmask(x), 0xff.U(wmask_width.W) << (x * 8).U, 0.U(wmask_width.W)))
.reduce(_ | _)
- io.tl_o := 0.U.asTypeOf(new kelvin.TileLinkULIO_H2D(tlul_p))
+ io.tl_o := 0.U.asTypeOf(new TileLinkULIO_H2D(tlul_p))
io.tl_o.a_user.instr_type := 9.U
io.tl_o.a_source := 0.U
io.tl_o.d_ready := true.B
@@ -68,7 +70,7 @@
io.tl_o.a_valid := true.B
io.tl_o.a_address := io.kelvin.caddr
val cwrite = io.kelvin.cwrite
- io.tl_o.a_opcode := Mux(cwrite, kelvin.TLULOpcodesA.PutFullData.asUInt, kelvin.TLULOpcodesA.Get.asUInt)
+ io.tl_o.a_opcode := Mux(cwrite, TLULOpcodesA.PutFullData.asUInt, TLULOpcodesA.Get.asUInt)
io.tl_o.a_data := Mux(cwrite, io.kelvin.wdata & wmask_bits, 0.U)
state := Mux(io.tl_i.a_ready, sWaitForResponse, sWaitForReady)
}
@@ -81,26 +83,26 @@
is(sWaitForResponse) {
io.tl_o.a_valid := false.B
when(io.tl_i.d_valid) {
- val (value, valid) = kelvin.TLULOpcodesD.safe(io.tl_i.d_opcode)
- val valid2 = valid && (value =/= kelvin.TLULOpcodesD.End)
+ val (value, valid) = TLULOpcodesD.safe(io.tl_i.d_opcode)
+ val valid2 = valid && (value =/= TLULOpcodesD.End)
assert(valid2, "Received invalid TLUL-D opcode\n")
val rdata = chisel3.util.MuxLookup(value, 0.U(32.W))(
Array(
- kelvin.TLULOpcodesD.AccessAck -> 0.U,
- kelvin.TLULOpcodesD.AccessAckData -> io.tl_i.d_data
+ TLULOpcodesD.AccessAck -> 0.U,
+ TLULOpcodesD.AccessAckData -> io.tl_i.d_data
)
)
val rvalid = chisel3.util.MuxLookup(value, false.B)(
Array(
- kelvin.TLULOpcodesD.AccessAck -> false.B,
- kelvin.TLULOpcodesD.AccessAckData -> true.B
+ TLULOpcodesD.AccessAck -> false.B,
+ TLULOpcodesD.AccessAckData -> true.B
)
)
val rid = chisel3.util.MuxLookup(value, 0.U)(
Array(
- kelvin.TLULOpcodesD.AccessAck -> 0.U,
- kelvin.TLULOpcodesD.AccessAckData -> io.kelvin.cid
+ TLULOpcodesD.AccessAck -> 0.U,
+ TLULOpcodesD.AccessAckData -> io.kelvin.cid
)
)
io.kelvin.rvalid := rvalid
diff --git a/hdl/chisel/src/kelvin/TileLinkUL.scala b/hdl/chisel/src/bus/TileLinkUL.scala
similarity index 98%
rename from hdl/chisel/src/kelvin/TileLinkUL.scala
rename to hdl/chisel/src/bus/TileLinkUL.scala
index 155fa3d..0be7596 100644
--- a/hdl/chisel/src/kelvin/TileLinkUL.scala
+++ b/hdl/chisel/src/bus/TileLinkUL.scala
@@ -12,10 +12,12 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package kelvin
+package bus
import chisel3._
import chisel3.util._
+
+import kelvin.MemoryRegion
import _root_.circt.stage.ChiselStage
case class TLULParameters() {
diff --git a/hdl/chisel/src/chai/BUILD b/hdl/chisel/src/chai/BUILD
index b4e1c48..1a1ffb5 100644
--- a/hdl/chisel/src/chai/BUILD
+++ b/hdl/chisel/src/chai/BUILD
@@ -20,13 +20,13 @@
name = "chai",
srcs = [
"ChAI.scala",
- "KelvinToTlul.scala",
"TlulAdapterSram.scala",
"Uart.scala",
],
deps = [
- "//hdl/chisel/src/matcha:matcha",
+ "//hdl/chisel/src/bus:bus",
"//hdl/chisel/src/kelvin:kelvin",
+ "//hdl/chisel/src/matcha:matcha",
],
)
diff --git a/hdl/chisel/src/chai/ChAI.scala b/hdl/chisel/src/chai/ChAI.scala
index cfd1ba6..abd9ee5 100644
--- a/hdl/chisel/src/chai/ChAI.scala
+++ b/hdl/chisel/src/chai/ChAI.scala
@@ -16,6 +16,8 @@
import chisel3._
import chisel3.util._
+
+import bus._
import _root_.circt.stage.ChiselStage
case class Parameters() {
@@ -76,8 +78,8 @@
io.fault := u_kelvin.fault
withClockAndReset(io.clk_i, rst_i) {
- val tlul_p = new kelvin.TLULParameters()
- val kelvin_to_tlul = chai.KelvinToTlul(tlul_p, kelvin_p)
+ val tlul_p = new TLULParameters()
+ val kelvin_to_tlul = KelvinToTlul(tlul_p, kelvin_p)
kelvin_to_tlul.io.kelvin <> u_kelvin.mem
val tlul_sram =
@@ -104,7 +106,7 @@
io.uart_tx := uart.io.cio_tx_o
val crossbar =
- Module(new kelvin.TileLinkUL(tlul_p, kelvin_p.m, /* hosts= */ 1))
+ Module(new TileLinkUL(tlul_p, kelvin_p.m, /* hosts= */ 1))
crossbar.io.hosts_a(0) <> kelvin_to_tlul.io.tl_o
crossbar.io.hosts_d(0) <> kelvin_to_tlul.io.tl_i
crossbar.io.devices_a(0) <> tlul_adapter_sram.io.tl_i
diff --git a/hdl/chisel/src/chai/TlulAdapterSram.scala b/hdl/chisel/src/chai/TlulAdapterSram.scala
index 345db11..3836210 100644
--- a/hdl/chisel/src/chai/TlulAdapterSram.scala
+++ b/hdl/chisel/src/chai/TlulAdapterSram.scala
@@ -17,6 +17,8 @@
import chisel3._
import chisel3.util._
+import bus._
+
package object sram_params {
val SramAw = 17
val SramDw = 256
@@ -27,14 +29,14 @@
}
class TlulAdapterSram extends BlackBox {
- val tlul_p = new kelvin.TLULParameters()
+ val tlul_p = new TLULParameters()
val io = IO(new Bundle {
val clk_i = Input(Clock())
val rst_ni = Input(AsyncReset())
// TL-UL
- val tl_i = Input(new kelvin.TileLinkULIO_H2D(tlul_p))
- val tl_o = Output(new kelvin.TileLinkULIO_D2H(tlul_p))
+ val tl_i = Input(new TileLinkULIO_H2D(tlul_p))
+ val tl_o = Output(new TileLinkULIO_D2H(tlul_p))
// control
val en_ifetch_i = Input(UInt(4.W)) // mubi4_t
diff --git a/hdl/chisel/src/chai/Uart.scala b/hdl/chisel/src/chai/Uart.scala
index 4fa3090..8003503 100644
--- a/hdl/chisel/src/chai/Uart.scala
+++ b/hdl/chisel/src/chai/Uart.scala
@@ -17,13 +17,15 @@
import chisel3._
import chisel3.util._
-class Uart(tlul_p: kelvin.TLULParameters) extends BlackBox {
+import bus._
+
+class Uart(tlul_p: TLULParameters) extends BlackBox {
val io = IO(new Bundle {
val clk_i = Input(Clock())
val rst_ni = Input(AsyncReset())
- val tl_i = Input(new kelvin.TileLinkULIO_H2D(tlul_p))
- val tl_o = Output(new kelvin.TileLinkULIO_D2H(tlul_p))
+ val tl_i = Input(new TileLinkULIO_H2D(tlul_p))
+ val tl_o = Output(new TileLinkULIO_D2H(tlul_p))
// These have some alert_{rx|tx}_t types.
val alert_rx_i = Input(UInt(4.W))
diff --git a/hdl/chisel/src/kelvin/BUILD b/hdl/chisel/src/kelvin/BUILD
index a1c550e..fd14ade 100644
--- a/hdl/chisel/src/kelvin/BUILD
+++ b/hdl/chisel/src/kelvin/BUILD
@@ -61,7 +61,6 @@
chisel_library(
name = "kelvin",
srcs = [
- "Axi.scala",
"ClockGate.scala",
"Core.scala",
"DBus2Axi.scala",
@@ -70,7 +69,6 @@
"L1ICache.scala",
"Library.scala",
"Parameters.scala",
- "TileLinkUL.scala",
"scalar/Alu.scala",
"scalar/Bru.scala",
"scalar/Csr.scala",
@@ -104,10 +102,20 @@
"vector/VSt.scala",
],
deps = [
+ "//hdl/chisel/src/bus",
"//hdl/chisel/src/common",
],
)
+chisel_library(
+ name = "kelvin_params",
+ srcs = [
+ "Parameters.scala",
+ ],
+ deps = [
+ ],
+)
+
chisel_cc_library(
name = "core_cc_library",
chisel_lib = ":kelvin",
diff --git a/hdl/chisel/src/kelvin/Core.scala b/hdl/chisel/src/kelvin/Core.scala
index 72b1c03..298ee01 100644
--- a/hdl/chisel/src/kelvin/Core.scala
+++ b/hdl/chisel/src/kelvin/Core.scala
@@ -16,6 +16,8 @@
import chisel3._
import chisel3.util._
+
+import bus.AxiMasterIO
import common._
import _root_.circt.stage.ChiselStage
diff --git a/hdl/chisel/src/kelvin/DBus2Axi.scala b/hdl/chisel/src/kelvin/DBus2Axi.scala
index 55ae7db..ebe056a 100644
--- a/hdl/chisel/src/kelvin/DBus2Axi.scala
+++ b/hdl/chisel/src/kelvin/DBus2Axi.scala
@@ -16,6 +16,8 @@
import chisel3._
import chisel3.util._
+
+import bus.AxiMasterIO
import common._
import _root_.circt.stage.ChiselStage
diff --git a/hdl/chisel/src/kelvin/L1DCache.scala b/hdl/chisel/src/kelvin/L1DCache.scala
index 94d88ae..67b9d48 100644
--- a/hdl/chisel/src/kelvin/L1DCache.scala
+++ b/hdl/chisel/src/kelvin/L1DCache.scala
@@ -17,6 +17,8 @@
import chisel3._
import chisel3.util._
import chisel3.experimental.ChiselEnum
+
+import bus.AxiMasterIO
import common._
import _root_.circt.stage.ChiselStage
diff --git a/hdl/chisel/src/kelvin/L1ICache.scala b/hdl/chisel/src/kelvin/L1ICache.scala
index 90cb912..7f2dedc 100644
--- a/hdl/chisel/src/kelvin/L1ICache.scala
+++ b/hdl/chisel/src/kelvin/L1ICache.scala
@@ -16,6 +16,8 @@
import chisel3._
import chisel3.util._
+
+import bus.AxiMasterReadIO
import common._
import _root_.circt.stage.ChiselStage
diff --git a/hdl/chisel/src/kelvin/vector/VCore.scala b/hdl/chisel/src/kelvin/vector/VCore.scala
index d9cc36e..b1252e7 100644
--- a/hdl/chisel/src/kelvin/vector/VCore.scala
+++ b/hdl/chisel/src/kelvin/vector/VCore.scala
@@ -18,6 +18,8 @@
import chisel3._
import chisel3.util._
+
+import bus._
import common._
object VCore {
diff --git a/hdl/chisel/src/kelvin/vector/VLd.scala b/hdl/chisel/src/kelvin/vector/VLd.scala
index bfbda33..0954a05 100644
--- a/hdl/chisel/src/kelvin/vector/VLd.scala
+++ b/hdl/chisel/src/kelvin/vector/VLd.scala
@@ -18,6 +18,8 @@
import chisel3._
import chisel3.util._
+
+import bus.AxiMasterReadIO
import common._
import _root_.circt.stage.ChiselStage
diff --git a/hdl/chisel/src/kelvin/vector/VSt.scala b/hdl/chisel/src/kelvin/vector/VSt.scala
index 638f709..12d459b 100644
--- a/hdl/chisel/src/kelvin/vector/VSt.scala
+++ b/hdl/chisel/src/kelvin/vector/VSt.scala
@@ -18,6 +18,8 @@
import chisel3._
import chisel3.util._
+
+import bus.AxiMasterWriteIO
import common._
import _root_.circt.stage.ChiselStage
diff --git a/hdl/chisel/src/matcha/Axi2Sram.scala b/hdl/chisel/src/matcha/Axi2Sram.scala
index 38914d5..220c49a 100644
--- a/hdl/chisel/src/matcha/Axi2Sram.scala
+++ b/hdl/chisel/src/matcha/Axi2Sram.scala
@@ -16,7 +16,10 @@
import chisel3._
import chisel3.util._
+
+import bus._
import common._
+import kelvin._
import _root_.circt.stage.ChiselStage
object Axi2Sram {
@@ -29,14 +32,14 @@
class Axi2Sram(p: kelvin.Parameters) extends Module {
val io = IO(new Bundle {
// Vector TCM
- val in0 = Flipped(new kelvin.AxiMasterIO(p.axiSysAddrBits, p.axiSysDataBits, p.axiSysIdBits))
+ val in0 = Flipped(new AxiMasterIO(p.axiSysAddrBits, p.axiSysDataBits, p.axiSysIdBits))
// Scalar DBus
- val in1 = Flipped(new kelvin.AxiMasterIO(p.axiSysAddrBits, p.axiSysDataBits, p.axiSysIdBits))
+ val in1 = Flipped(new AxiMasterIO(p.axiSysAddrBits, p.axiSysDataBits, p.axiSysIdBits))
// L1DCache
- val in2 = Flipped(new kelvin.AxiMasterIO(p.axiSysAddrBits, p.axiSysDataBits, p.axiSysIdBits))
+ val in2 = Flipped(new AxiMasterIO(p.axiSysAddrBits, p.axiSysDataBits, p.axiSysIdBits))
// L1ICache
val in3 = new Bundle {
- val read = Flipped(new kelvin.AxiMasterReadIO(p.axiSysAddrBits, p.axiSysDataBits, p.axiSysIdBits))
+ val read = Flipped(new AxiMasterReadIO(p.axiSysAddrBits, p.axiSysDataBits, p.axiSysIdBits))
}
// SRAM port
val out = new CrossbarIO(p.axiSysAddrBits, p.axiSysDataBits, p.axiSysIdBits)
diff --git a/hdl/chisel/src/matcha/BUILD b/hdl/chisel/src/matcha/BUILD
index ebbc792..16caad5 100644
--- a/hdl/chisel/src/matcha/BUILD
+++ b/hdl/chisel/src/matcha/BUILD
@@ -25,6 +25,7 @@
"MatchaParameters.scala",
],
deps = [
+ "//hdl/chisel/src/bus:bus",
"//hdl/chisel/src/common:common",
"//hdl/chisel/src/kelvin:kelvin",
],
diff --git a/hdl/chisel/src/matcha/Kelvin.scala b/hdl/chisel/src/matcha/Kelvin.scala
index ad5a386..4c781d7 100644
--- a/hdl/chisel/src/matcha/Kelvin.scala
+++ b/hdl/chisel/src/matcha/Kelvin.scala
@@ -16,22 +16,11 @@
import chisel3._
import chisel3.util._
+
+import bus.KelvinMemIO
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))
@@ -105,7 +94,7 @@
slog := core.io.slog
// -------------------------------------------------------------------------
- // Debug Request.
+ // Debug Interface.
core.io.debug_req := debug_req
// -------------------------------------------------------------------------