Emit verilog files for alu, mlu and dvu modules

Change-Id: Icb7080851861f5524fc2414bbb23bcf6cd7e35b4
diff --git a/hdl/chisel/src/kelvin/BUILD b/hdl/chisel/src/kelvin/BUILD
index f46b820..d318fdc 100644
--- a/hdl/chisel/src/kelvin/BUILD
+++ b/hdl/chisel/src/kelvin/BUILD
@@ -12,6 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+load("@kelvin_hw//rules:autogen.bzl", "autogen_scm_info")
 load(
     "@kelvin_hw//rules:chisel.bzl",
     "chisel_binary",
@@ -20,7 +21,6 @@
     "chisel_test",
 )
 load("@kelvin_hw//rules:verilog.bzl", "verilog_zip_bundle")
-load("@kelvin_hw//rules:autogen.bzl", "autogen_scm_info")
 
 package(default_visibility = ["//visibility:public"])
 
@@ -68,29 +68,29 @@
     srcs = [
         "rvv/RvvDecodeTest.scala",
     ],
+    args = [
+        "-P",  # Allows parallel tests.
+    ],
     deps = [
         ":kelvin_rvv",
         "//hdl/chisel/src/common:testing",
     ],
-    args = [
-        "-P",  # Allows parallel tests.
-    ],
 )
 
 chisel_test(
     name = "kelvin_scalar_tests",
     srcs = [
+        "scalar/AluTest.scala",
         "scalar/MluTest.scala",
-        "scalar/AluTest.scala"
+    ],
+    args = [
+        "-P",  # Allows parallel tests.
     ],
     deps = [
         ":kelvin_base",
         ":kelvin_scalar",
         "//hdl/chisel/src/common:testing",
     ],
-    args = [
-        "-P",  # Allows parallel tests.
-    ],
 )
 
 chisel_test(
@@ -125,10 +125,10 @@
     srcs = [
         "ClockGate.scala",
     ],
+    resource_strip_prefix = "hdl/verilog",
     resources = [
         "//hdl/verilog:ClockGate.sv",
     ],
-    resource_strip_prefix = "hdl/verilog",
 )
 
 chisel_test(
@@ -136,11 +136,11 @@
     srcs = [
         "ClockGateTest.scala",
     ],
-    deps = [
-        ":kelvin_base",
-        ":clock_gate",
-    ],
     tags = ["verilator"],
+    deps = [
+        ":clock_gate",
+        ":kelvin_base",
+    ],
 )
 
 chisel_library(
@@ -148,10 +148,10 @@
     srcs = [
         "RstSync.scala",
     ],
+    resource_strip_prefix = "hdl/verilog",
     resources = [
         "//hdl/verilog:RstSync.sv",
     ],
-    resource_strip_prefix = "hdl/verilog",
 )
 
 autogen_scm_info(name = "KelvinScmInfo")
@@ -221,8 +221,8 @@
         "scalar/UncachedFetch.scala",
     ],
     deps = [
-        ":kelvin_base",
         ":KelvinScmInfo",
+        ":kelvin_base",
         "//hdl/chisel/src/common",
         "//hdl/chisel/src/common:instruction_buffer",
     ],
@@ -231,18 +231,18 @@
 chisel_library(
     name = "srams",
     srcs = [
-        "Sram_12ffcp_128x128.scala",
-        "Sram_12ffcp_512x128.scala",
-        "Sram_12ffcp_2048x128.scala",
         "SramNx128.scala",
-    ],
-    deps = [
-        ":kelvin_base",
+        "Sram_12ffcp_128x128.scala",
+        "Sram_12ffcp_2048x128.scala",
+        "Sram_12ffcp_512x128.scala",
     ],
     resources = [
         "//hdl/verilog:Sram_12ffcp_128x128.v",
-        "//hdl/verilog:Sram_12ffcp_512x128.v",
         "//hdl/verilog:Sram_12ffcp_2048x128.v",
+        "//hdl/verilog:Sram_12ffcp_512x128.v",
+    ],
+    deps = [
+        ":kelvin_base",
     ],
 )
 
@@ -258,11 +258,11 @@
         "TCM.scala",
     ],
     deps = [
+        ":RstSync",
         ":clock_gate",
         ":kelvin_base",
         ":kelvin_scalar",
         ":kelvin_vector",
-        ":RstSync",
         ":srams",
         "//hdl/chisel/src/bus",
         "//hdl/chisel/src/common",
@@ -280,6 +280,13 @@
 )
 
 chisel_cc_library(
+    name = "alu_cc_library",
+    chisel_lib = ":kelvin_scalar",
+    emit_class = "kelvin.EmitAlu",
+    module_name = "Alu",
+)
+
+chisel_cc_library(
     name = "core_cc_library",
     chisel_lib = ":kelvin",
     emit_class = "kelvin.EmitCore",
@@ -338,11 +345,11 @@
         "--moduleName=CoreMini",
         "--useAxi",
     ],
+    module_name = "CoreMiniAxi",
+    verilog_file_path = "CoreMiniAxi.sv",
     vopts = [
         "-DUSE_GENERIC",
     ],
-    module_name = "CoreMiniAxi",
-    verilog_file_path = "CoreMiniAxi.sv",
 )
 
 verilog_zip_bundle(
@@ -358,6 +365,20 @@
 )
 
 chisel_cc_library(
+    name = "dvu_cc_library",
+    chisel_lib = ":kelvin_scalar",
+    emit_class = "kelvin.EmitDvu",
+    module_name = "Dvu",
+)
+
+chisel_cc_library(
+    name = "mlu_cc_library",
+    chisel_lib = ":kelvin_scalar",
+    emit_class = "kelvin.EmitMlu",
+    module_name = "Mlu",
+)
+
+chisel_cc_library(
     name = "l1dcache_cc_library",
     chisel_lib = ":kelvin",
     emit_class = "kelvin.EmitL1DCache",
diff --git a/hdl/chisel/src/kelvin/scalar/Alu.scala b/hdl/chisel/src/kelvin/scalar/Alu.scala
index 3464848..a9009af 100644
--- a/hdl/chisel/src/kelvin/scalar/Alu.scala
+++ b/hdl/chisel/src/kelvin/scalar/Alu.scala
@@ -17,6 +17,7 @@
 import chisel3._
 import chisel3.util._
 import common._
+import _root_.circt.stage.ChiselStage
 
 object Alu {
   def apply(p: Parameters): Alu = {
@@ -133,3 +134,8 @@
   assert(!(valid && !io.rs1.valid && !op.isOneOf(AluOp.LUI)))
   assert(!(valid && !io.rs2.valid && !rs1Only))
 }
+
+object EmitAlu extends App {
+  val p = new Parameters
+  ChiselStage.emitSystemVerilogFile(new Alu(p), args)
+}