Basic fp32 data type.

Change-Id: Iaeb301e78b95987ce5a5548ed5844be0c01340cb
diff --git a/hdl/chisel/BUILD b/hdl/chisel/BUILD
index 42deab7..d821feb 100644
--- a/hdl/chisel/BUILD
+++ b/hdl/chisel/BUILD
@@ -12,174 +12,10 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-load("@kelvin_hw//rules:chisel.bzl", "chisel_cc_library", "chisel_library")
-
-chisel_library(
-    name = "common",
-    srcs = glob(["src/common/*.scala"]),
-)
-
-chisel_library(
-    name = "kelvin",
-    srcs = glob(["src/kelvin/**/*.scala"]),
-    deps = [
-        ":common",
-    ],
-)
-
-chisel_library(
-    name = "matcha",
-    srcs = glob(["src/matcha/**/*.scala"]),
-    deps = [
-        ":common",
-        ":kelvin",
-    ],
-)
-
-chisel_cc_library(
-    name = "kelvin_cc_library",
-    chisel_lib = ":matcha",
-    emit_class = "matcha.EmitKelvin",
-    module_name = "Kelvin",
-    verilog_deps = [
-        "//hdl/verilog:clock_gate",
-        "//hdl/verilog:sram_1rw_256x256",
-        "//hdl/verilog:sram_1rw_256x288",
-    ],
-)
-
-chisel_cc_library(
-    name = "core_cc_library",
-    chisel_lib = ":kelvin",
-    emit_class = "kelvin.EmitCore",
-    module_name = "Core",
-)
-
-chisel_cc_library(
-    name = "dbus2axi_cc_library",
-    chisel_lib = ":kelvin",
-    emit_class = "kelvin.EmitDBus2Axi",
-    module_name = "DBus2Axi",
-)
-
-chisel_cc_library(
-    name = "l1dcache_cc_library",
-    chisel_lib = ":kelvin",
-    emit_class = "kelvin.EmitL1DCache",
-    module_name = "L1DCache",
-    verilog_deps = [
-        "//hdl/verilog:sram_1rw_256x288",
-    ],
-)
-
-chisel_cc_library(
-    name = "l1dcachebank_cc_library",
-    chisel_lib = ":kelvin",
-    emit_class = "kelvin.EmitL1DCacheBank",
-    module_name = "L1DCacheBank",
-    verilog_deps = [
-        "//hdl/verilog:sram_1rw_256x288",
-    ],
-)
-
-chisel_cc_library(
-    name = "l1icache_cc_library",
-    chisel_lib = ":kelvin",
-    emit_class = "kelvin.EmitL1ICache",
-    module_name = "L1ICache",
-    verilog_deps = [
-        "//hdl/verilog:sram_1rw_256x256",
-    ],
-)
-
-chisel_cc_library(
-    name = "valu_cc_library",
-    chisel_lib = ":kelvin",
-    emit_class = "kelvin.EmitVAlu",
-    module_name = "VAlu",
-)
-
-chisel_cc_library(
-    name = "valuint_cc_library",
-    chisel_lib = ":kelvin",
-    emit_class = "kelvin.EmitVAluInt",
-    module_name = "VAluInt",
-)
-
-chisel_cc_library(
-    name = "vcmdq_cc_library",
-    chisel_lib = ":kelvin",
-    emit_class = "kelvin.EmitVCmdq",
-    module_name = "VCmdq",
-)
-
-chisel_cc_library(
-    name = "vconvalu_cc_library",
-    chisel_lib = ":kelvin",
-    emit_class = "kelvin.EmitVConvAlu",
-    module_name = "VConvAlu",
-)
-
-chisel_cc_library(
-    name = "vconvctrl_cc_library",
-    chisel_lib = ":kelvin",
-    emit_class = "kelvin.EmitVConvCtrl",
-    module_name = "VConvCtrl",
-)
-
-chisel_cc_library(
-    name = "vdecode_cc_library",
-    chisel_lib = ":kelvin",
-    emit_class = "kelvin.EmitVDecode",
-    module_name = "VDecode",
-)
-
-chisel_cc_library(
-    name = "vdecodeinstruction_cc_library",
-    chisel_lib = ":kelvin",
-    emit_class = "kelvin.EmitVDecodeInstruction",
-    module_name = "VDecodeInstruction",
-)
-
-chisel_cc_library(
-    name = "vldst_cc_library",
-    chisel_lib = ":kelvin",
-    emit_class = "kelvin.EmitVLdSt",
-    module_name = "VLdSt",
-)
-
-chisel_cc_library(
-    name = "vld_cc_library",
-    chisel_lib = ":kelvin",
-    emit_class = "kelvin.EmitVLd",
-    module_name = "VLd",
-)
-
-chisel_cc_library(
-    name = "vregfile_cc_library",
-    chisel_lib = ":kelvin",
-    emit_class = "kelvin.EmitVRegfile",
-    module_name = "VRegfile",
-)
-
-chisel_cc_library(
-    name = "vregfilesegment_cc_library",
-    chisel_lib = ":kelvin",
-    emit_class = "kelvin.EmitVRegfileSegment",
-    module_name = "VRegfileSegment",
-)
-
-chisel_cc_library(
-    name = "vst_cc_library",
-    chisel_lib = ":kelvin",
-    emit_class = "kelvin.EmitVSt",
-    module_name = "VSt",
-)
-
 genrule(
     name = "matcha_kelvin_verilog",
     srcs = [
-        ":Kelvin.sv",
+        "//hdl/chisel/src/matcha:Kelvin.sv",
         "//hdl/verilog:ClockGate.v",
         "//hdl/verilog:Sram_1rw_256x256.v",
         "//hdl/verilog:Sram_1rwm_256x288.v",
@@ -196,7 +32,7 @@
     echo "\\`define STOP_COND 0
 \\`define PRINTF_COND 0
 " > $(location kelvin.sv)
-    cat $(location Kelvin.sv) >> $(location kelvin.sv)
+    cat $(location //hdl/chisel/src/matcha:Kelvin.sv) >> $(location kelvin.sv)
     cp -f $(location //hdl/verilog:ClockGate.v) $(location ClockGate.v)
     cp -f $(location //hdl/verilog:Sram_1rw_256x256.v) $(location Sram_1rw_256x256.v)
     cp -f $(location //hdl/verilog:Sram_1rwm_256x288.v) $(location Sram_1rwm_256x288.v)
diff --git a/hdl/chisel/src/BUILD b/hdl/chisel/src/BUILD
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hdl/chisel/src/BUILD
diff --git a/hdl/chisel/src/common/BUILD b/hdl/chisel/src/common/BUILD
new file mode 100644
index 0000000..2dc5305
--- /dev/null
+++ b/hdl/chisel/src/common/BUILD
@@ -0,0 +1,47 @@
+# 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_cc_library", "chisel_library", "chisel_test")
+
+chisel_library(
+    name = "common",
+    srcs = [
+        "Fifo4e.scala",
+        "Fifo4.scala",
+        "Fifo4x4.scala",
+        "Fifo.scala",
+        "IDiv.scala",
+        "Library.scala",
+        "Slice.scala",
+    ],
+    visibility = ["//visibility:public"],
+)
+
+chisel_library(
+    name = "fp",
+    srcs = [
+        "Fp.scala",
+    ],
+)
+
+chisel_test(
+    name = "fp_test",
+    srcs = [
+        "FpTest.scala",
+    ],
+    deps = [
+        ":fp",
+    ],
+)
\ No newline at end of file
diff --git a/hdl/chisel/src/common/Fp.scala b/hdl/chisel/src/common/Fp.scala
new file mode 100644
index 0000000..1cc1c07
--- /dev/null
+++ b/hdl/chisel/src/common/Fp.scala
@@ -0,0 +1,90 @@
+// 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 common
+
+import chisel3._
+import chisel3.util._
+
+class Fp32 extends Bundle {
+  val mantissa = UInt(23.W)
+  val exponent = UInt(8.W)
+  val sign     = Bool()
+
+  def asWord(): UInt = {
+    Cat(sign, exponent, mantissa)
+  }
+
+  def isZero(): Bool = {
+    (exponent === 0.U) && (mantissa === 0.U)
+  }
+
+  def isInf(): Bool = {
+    (exponent === "b11111111".U) && (mantissa === 0.U)
+  }
+
+  def isNan(): Bool = {
+    (exponent === "b11111111".U) && (mantissa =/= 0.U)
+  }
+
+  // The mantissa is generally the fractional component of significand.
+  def significand(): UInt = {
+    Cat(1.U(1.W), mantissa)
+  }
+}
+
+object Fp32 {
+  def apply(sign: Bool, exponent: UInt, mantissa: UInt): Fp32 = {
+    assert(exponent.getWidth == 8)
+    assert(mantissa.getWidth == 23)
+    val fp = Wire(new Fp32)
+    fp.mantissa := mantissa
+    fp.exponent := exponent
+    fp.sign := sign
+    fp
+  }
+
+  def fromWord(word: UInt): Fp32 = {
+    assert(word.getWidth == 32)
+    val fp = Wire(new Fp32)
+    fp.mantissa := word(22, 0)
+    fp.exponent := word(30, 23)
+    fp.sign := word(31)
+    fp
+  }
+
+  def Zero(sign: Bool): Fp32 = {
+    val fp = Wire(new Fp32)
+    fp.mantissa := 0.U
+    fp.exponent := 0.U
+    fp.sign := sign
+    fp
+  }
+
+  def Inf(sign: Bool): Fp32 = {
+    val fp = Wire(new Fp32)
+    fp.mantissa := 0.U
+    fp.exponent := "b11111111".U
+    fp.sign := sign
+    fp
+  }
+
+  def NaN(): Fp32 = {
+    val fp = Wire(new Fp32)
+    fp.mantissa := (1 << 22).U  // Cannonical NaN per RV32F spec
+    fp.exponent := "b11111111".U
+    fp.sign := 0.U
+    fp
+  }
+}
\ No newline at end of file
diff --git a/hdl/chisel/src/common/FpTest.scala b/hdl/chisel/src/common/FpTest.scala
new file mode 100644
index 0000000..70bf7b8
--- /dev/null
+++ b/hdl/chisel/src/common/FpTest.scala
@@ -0,0 +1,78 @@
+// 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 common
+
+import chisel3._
+import chisel3.util._
+import chiseltest._
+import org.scalatest.freespec.AnyFreeSpec
+import chisel3.experimental.BundleLiterals._
+
+class Fp32Tester extends Module {
+  val io = IO(new Bundle {
+    val in     = Input(UInt(32.W))
+    val is_zero = Output(Bool())
+    val is_inf  = Output(Bool())
+    val is_nan  = Output(Bool())
+  })
+
+  val fp = Fp32.fromWord(io.in)
+  io.is_zero := fp.isZero()
+  io.is_inf := fp.isInf()
+  io.is_nan := fp.isNan()
+}
+
+class FpSpec extends AnyFreeSpec with ChiselScalatestTester {
+  "Zero" in {
+    test(new Fp32Tester()) { dut =>
+      dut.io.in.poke(0.U)
+      assert(dut.io.is_zero.peekInt() == 1)
+      assert(dut.io.is_inf.peekInt() == 0)
+      assert(dut.io.is_nan.peekInt() == 0)
+    }
+  }
+
+  "Inf" in {
+    test(new Fp32Tester()) { dut =>
+      dut.io.in.poke(BigInt(
+          "0" + "11111111" + "00000000000000000000000", 2))
+      assert(dut.io.is_zero.peekInt() == 0)
+      assert(dut.io.is_inf.peekInt() == 1)
+      assert(dut.io.is_nan.peekInt() == 0)
+
+      dut.io.in.poke(BigInt(
+          "1" + "11111111" + "00000000000000000000000", 2))
+      assert(dut.io.is_zero.peekInt() == 0)
+      assert(dut.io.is_inf.peekInt() == 1)
+      assert(dut.io.is_nan.peekInt() == 0)
+    }
+  }
+
+  "Nan" in {
+    test(new Fp32Tester()) { dut =>
+      dut.io.in.poke(BigInt(
+          "0" + "11111111" + "00011000011000111000100", 2))
+      assert(dut.io.is_zero.peekInt() == 0)
+      assert(dut.io.is_inf.peekInt() == 0)
+      assert(dut.io.is_nan.peekInt() == 1)
+
+      dut.io.in.poke(BigInt(
+          "1" + "11111111" + "00011000011000111000100", 2))
+      assert(dut.io.is_zero.peekInt() == 0)
+      assert(dut.io.is_inf.peekInt() == 0)
+      assert(dut.io.is_nan.peekInt() == 1)
+    }
+  }
+}
\ No newline at end of file
diff --git a/hdl/chisel/src/kelvin/BUILD b/hdl/chisel/src/kelvin/BUILD
new file mode 100644
index 0000000..a6a2085
--- /dev/null
+++ b/hdl/chisel/src/kelvin/BUILD
@@ -0,0 +1,196 @@
+# 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_cc_library", "chisel_library")
+
+package(default_visibility = ["//visibility:public"])
+
+chisel_library(
+    name = "kelvin",
+    srcs = [
+        "Axi.scala",
+        "ClockGate.scala",
+        "Core.scala",
+        "DBus2Axi.scala",
+        "DBusMux.scala",
+        "L1DCache.scala",
+        "L1ICache.scala",
+        "Library.scala",
+        "Parameters.scala",
+        "scalar/Alu.scala",
+        "scalar/Bru.scala",
+        "scalar/Csr.scala",
+        "scalar/Debug.scala",
+        "scalar/Decode.scala",
+        "scalar/Dvu.scala",
+        "scalar/Fetch.scala",
+        "scalar/Flush.scala",
+        "scalar/Lsu.scala",
+        "scalar/Mlu.scala",
+        "scalar/Regfile.scala",
+        "scalar/SCore.scala",
+        "scalar/SLog.scala",
+        "vector/VAluInt.scala",
+        "vector/VAlu.scala",
+        "vector/VCmdq.scala",
+        "vector/VCommon.scala",
+        "vector/VConvAlu.scala",
+        "vector/VConvCtrl.scala",
+        "vector/VCore.scala",
+        "vector/VDecodeInstruction.scala",
+        "vector/VDecodeOp.scala",
+        "vector/VDecode.scala",
+        "vector/VDot.scala",
+        "vector/VEncodeOp.scala",
+        "vector/VInst.scala",
+        "vector/VLd.scala",
+        "vector/VLdSt.scala",
+        "vector/VRegfile.scala",
+        "vector/VRegfileSegment.scala",
+        "vector/VSt.scala",
+    ],
+    deps = [
+        "//hdl/chisel/src/common:common",
+    ],
+)
+
+
+
+chisel_cc_library(
+    name = "core_cc_library",
+    chisel_lib = ":kelvin",
+    emit_class = "kelvin.EmitCore",
+    module_name = "Core",
+)
+
+chisel_cc_library(
+    name = "dbus2axi_cc_library",
+    chisel_lib = ":kelvin",
+    emit_class = "kelvin.EmitDBus2Axi",
+    module_name = "DBus2Axi",
+)
+
+chisel_cc_library(
+    name = "l1dcache_cc_library",
+    chisel_lib = ":kelvin",
+    emit_class = "kelvin.EmitL1DCache",
+    module_name = "L1DCache",
+    verilog_deps = [
+        "//hdl/verilog:sram_1rw_256x288",
+    ],
+)
+
+chisel_cc_library(
+    name = "l1dcachebank_cc_library",
+    chisel_lib = ":kelvin",
+    emit_class = "kelvin.EmitL1DCacheBank",
+    module_name = "L1DCacheBank",
+    verilog_deps = [
+        "//hdl/verilog:sram_1rw_256x288",
+    ],
+)
+
+chisel_cc_library(
+    name = "l1icache_cc_library",
+    chisel_lib = ":kelvin",
+    emit_class = "kelvin.EmitL1ICache",
+    module_name = "L1ICache",
+    verilog_deps = [
+        "//hdl/verilog:sram_1rw_256x256",
+    ],
+)
+
+chisel_cc_library(
+    name = "valu_cc_library",
+    chisel_lib = ":kelvin",
+    emit_class = "kelvin.EmitVAlu",
+    module_name = "VAlu",
+)
+
+chisel_cc_library(
+    name = "valuint_cc_library",
+    chisel_lib = ":kelvin",
+    emit_class = "kelvin.EmitVAluInt",
+    module_name = "VAluInt",
+)
+
+chisel_cc_library(
+    name = "vcmdq_cc_library",
+    chisel_lib = ":kelvin",
+    emit_class = "kelvin.EmitVCmdq",
+    module_name = "VCmdq",
+)
+
+chisel_cc_library(
+    name = "vconvalu_cc_library",
+    chisel_lib = ":kelvin",
+    emit_class = "kelvin.EmitVConvAlu",
+    module_name = "VConvAlu",
+)
+
+chisel_cc_library(
+    name = "vconvctrl_cc_library",
+    chisel_lib = ":kelvin",
+    emit_class = "kelvin.EmitVConvCtrl",
+    module_name = "VConvCtrl",
+)
+
+chisel_cc_library(
+    name = "vdecode_cc_library",
+    chisel_lib = ":kelvin",
+    emit_class = "kelvin.EmitVDecode",
+    module_name = "VDecode",
+)
+
+chisel_cc_library(
+    name = "vdecodeinstruction_cc_library",
+    chisel_lib = ":kelvin",
+    emit_class = "kelvin.EmitVDecodeInstruction",
+    module_name = "VDecodeInstruction",
+)
+
+chisel_cc_library(
+    name = "vldst_cc_library",
+    chisel_lib = ":kelvin",
+    emit_class = "kelvin.EmitVLdSt",
+    module_name = "VLdSt",
+)
+
+chisel_cc_library(
+    name = "vld_cc_library",
+    chisel_lib = ":kelvin",
+    emit_class = "kelvin.EmitVLd",
+    module_name = "VLd",
+)
+
+chisel_cc_library(
+    name = "vregfile_cc_library",
+    chisel_lib = ":kelvin",
+    emit_class = "kelvin.EmitVRegfile",
+    module_name = "VRegfile",
+)
+
+chisel_cc_library(
+    name = "vregfilesegment_cc_library",
+    chisel_lib = ":kelvin",
+    emit_class = "kelvin.EmitVRegfileSegment",
+    module_name = "VRegfileSegment",
+)
+
+chisel_cc_library(
+    name = "vst_cc_library",
+    chisel_lib = ":kelvin",
+    emit_class = "kelvin.EmitVSt",
+    module_name = "VSt",
+)
\ No newline at end of file
diff --git a/hdl/chisel/src/matcha/BUILD b/hdl/chisel/src/matcha/BUILD
new file mode 100644
index 0000000..6b10e4e
--- /dev/null
+++ b/hdl/chisel/src/matcha/BUILD
@@ -0,0 +1,42 @@
+# 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_cc_library", "chisel_library")
+
+package(default_visibility = ["//visibility:public"])
+
+chisel_library(
+    name = "matcha",
+    srcs = [
+        "Axi2Sram.scala",
+        "Crossbar.scala",
+        "Kelvin.scala",
+    ],
+    deps = [
+        "//hdl/chisel/src/common:common",
+        "//hdl/chisel/src/kelvin:kelvin",
+    ],
+)
+
+chisel_cc_library(
+    name = "kelvin_cc_library",
+    chisel_lib = ":matcha",
+    emit_class = "matcha.EmitKelvin",
+    module_name = "Kelvin",
+    verilog_deps = [
+        "//hdl/verilog:clock_gate",
+        "//hdl/verilog:sram_1rw_256x256",
+        "//hdl/verilog:sram_1rw_256x288",
+    ],
+)
\ No newline at end of file
diff --git a/tests/verilator_sim/BUILD b/tests/verilator_sim/BUILD
index c47127e..681096f 100644
--- a/tests/verilator_sim/BUILD
+++ b/tests/verilator_sim/BUILD
@@ -46,7 +46,7 @@
     deps = [
         ":kelvin_if",
         ":sim_libs",
-        "//hdl/chisel:core_cc_library",
+        "//hdl/chisel/src/kelvin:core_cc_library",
         "@com_google_absl//absl/flags:flag",
         "@com_google_absl//absl/flags:parse",
         "@com_google_absl//absl/flags:usage",
@@ -62,7 +62,7 @@
     deps = [
         ":kelvin_if",
         ":sim_libs",
-        "//hdl/chisel:kelvin_cc_library",
+        "//hdl/chisel/src/matcha:kelvin_cc_library",
     ],
 )
 
@@ -74,7 +74,7 @@
     ],
     deps = [
         ":sim_libs",
-        "//hdl/chisel:dbus2axi_cc_library",
+        "//hdl/chisel/src/kelvin:dbus2axi_cc_library",
     ],
 )
 
@@ -87,7 +87,7 @@
     deps = [
         ":kelvin_if",
         ":sim_libs",
-        "//hdl/chisel:l1dcache_cc_library",
+        "//hdl/chisel/src/kelvin:l1dcache_cc_library",
     ],
 )
 
@@ -102,7 +102,7 @@
     deps = [
         ":kelvin_if",
         ":sim_libs",
-        "//hdl/chisel:l1dcachebank_cc_library",
+        "//hdl/chisel/src/kelvin:l1dcachebank_cc_library",
     ],
 )
 
@@ -114,7 +114,7 @@
     deps = [
         ":kelvin_if",
         ":sim_libs",
-        "//hdl/chisel:l1icache_cc_library",
+        "//hdl/chisel/src/kelvin:l1icache_cc_library",
     ],
 )
 
@@ -139,7 +139,7 @@
         ":kelvin_if",
         ":sim_libs",
         ":valu",
-        "//hdl/chisel:valu_cc_library",
+        "//hdl/chisel/src/kelvin:valu_cc_library",
     ],
 )
 
@@ -153,7 +153,7 @@
         ":kelvin_if",
         ":sim_libs",
         ":valu",
-        "//hdl/chisel:valuint_cc_library",
+        "//hdl/chisel/src/kelvin:valuint_cc_library",
     ],
 )
 
@@ -191,7 +191,7 @@
         ":kelvin_if",
         ":sim_libs",
         ":vencodeop",
-        "//hdl/chisel:vcmdq_cc_library",
+        "//hdl/chisel/src/kelvin:vcmdq_cc_library",
     ],
 )
 
@@ -203,7 +203,7 @@
     deps = [
         ":kelvin_if",
         ":sim_libs",
-        "//hdl/chisel:vconvalu_cc_library",
+        "//hdl/chisel/src/kelvin:vconvalu_cc_library",
     ],
 )
 
@@ -217,7 +217,7 @@
         ":kelvin_if",
         ":sim_libs",
         ":vencodeop",
-        "//hdl/chisel:vconvctrl_cc_library",
+        "//hdl/chisel/src/kelvin:vconvctrl_cc_library",
     ],
 )
 
@@ -231,7 +231,7 @@
         ":kelvin_if",
         ":sim_libs",
         ":vdecode",
-        "//hdl/chisel:vdecodeinstruction_cc_library",
+        "//hdl/chisel/src/kelvin:vdecodeinstruction_cc_library",
     ],
 )
 
@@ -244,7 +244,7 @@
         ":kelvin_if",
         ":sim_libs",
         ":vdecode",
-        "//hdl/chisel:vdecode_cc_library",
+        "//hdl/chisel/src/kelvin:vdecode_cc_library",
     ],
 )
 
@@ -257,7 +257,7 @@
         ":kelvin_if",
         ":sim_libs",
         ":vencodeop",
-        "//hdl/chisel:vldst_cc_library",
+        "//hdl/chisel/src/kelvin:vldst_cc_library",
     ],
 )
 
@@ -271,7 +271,7 @@
         ":kelvin_if",
         ":sim_libs",
         ":vencodeop",
-        "//hdl/chisel:vld_cc_library",
+        "//hdl/chisel/src/kelvin:vld_cc_library",
     ],
 )
 
@@ -284,7 +284,7 @@
     deps = [
         ":kelvin_if",
         ":sim_libs",
-        "//hdl/chisel:vregfilesegment_cc_library",
+        "//hdl/chisel/src/kelvin:vregfilesegment_cc_library",
     ],
 )
 
@@ -296,7 +296,7 @@
     deps = [
         ":kelvin_if",
         ":sim_libs",
-        "//hdl/chisel:vregfile_cc_library",
+        "//hdl/chisel/src/kelvin:vregfile_cc_library",
     ],
 )
 
@@ -309,6 +309,6 @@
         ":kelvin_if",
         ":sim_libs",
         ":vencodeop",
-        "//hdl/chisel:vst_cc_library",
+        "//hdl/chisel/src/kelvin:vst_cc_library",
     ],
 )