)]}'
{
  "commit": "bd14438f39e4979800bf8f043c50bd78c2084f4c",
  "tree": "fe87d8b037c729dad530c39d701b59734bd43ca6",
  "parents": [
    "813d03e1c896c4c6c44a9eda9e25e7686d0b4e85"
  ],
  "author": {
    "name": "Alex Van Damme",
    "email": "atv@google.com",
    "time": "Tue Sep 02 16:21:16 2025 -0700"
  },
  "committer": {
    "name": "Alex Van Damme",
    "email": "atv@google.com",
    "time": "Thu Sep 18 10:30:34 2025 -0700"
  },
  "message": "refactor(soc): Introduce unified KelvinChiselSubsystem\n\nThis commit introduces a major architectural refactoring by creating a unified `KelvinChiselSubsystem`. This new top-level module programmatically instantiates and connects all Chisel-based components of the SoC, including the RV core, crossbar, and peripherals like the Spi2TLUL bridge.\n\nKey changes:\n- **`SoCChiselConfig.scala`**: A new central configuration file that defines the modules to be instantiated, their parameters, and their connections. This allows for a more flexible and maintainable SoC architecture.\n- **`KelvinChiselSubsystem.scala`**: The new top-level module that reads the configuration and builds the hardware graph, connecting modules to the crossbar and exposing external ports.\n- **`CrossbarConfig.scala`**: Updated to be more dynamic. It now sources its configuration from `SoCChiselConfig` and supports a test harness mode. The Ibex core hosts have been removed and replaced by the `spi2tlul` host and a generic 32-bit test host.\n- **Tests**:\n    - The existing crossbar tests (`kelvin_xbar_test.py`) have been updated to use the new test harness and reflect the new port mapping.\n    - A new subsystem-level test suite (`test_subsystem.py`) has been added to verify the integrated subsystem. These tests demonstrate loading and executing an ELF file on the core via both a TL-UL test host and the SPI bridge.\n\nThis refactoring simplifies the top-level Verilog (`kelvin_soc.sv`) and provides a more scalable and configurable way to build the SoC.\n\nChange-Id: Ib8249023d3df3da32a62b00006e103b5f8236f4f\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "6cc1e3fc38132ebc48e8145a86ff6f7f493d7a32",
      "old_mode": 33188,
      "old_path": "fpga/ip/sram/Sram.sv",
      "new_id": "1cd1f3dc11abd906ee57747e8a7cf072771c3e64",
      "new_mode": 33188,
      "new_path": "fpga/ip/sram/Sram.sv"
    },
    {
      "type": "modify",
      "old_id": "479f88749ce85ccf3d9d3d7c253b6a9680283b34",
      "old_mode": 33188,
      "old_path": "fpga/rtl/kelvin_soc.sv",
      "new_id": "37de7076a2a65b712f5438536c44fa78fd85b608",
      "new_mode": 33188,
      "new_path": "fpga/rtl/kelvin_soc.sv"
    },
    {
      "type": "modify",
      "old_id": "f01f1e70cec3732bdd594dffb03e87a2e0861dc4",
      "old_mode": 33188,
      "old_path": "hdl/chisel/src/soc/BUILD",
      "new_id": "ee0b62d868d2765b74b99a6f2fbc45b7153504ac",
      "new_mode": 33188,
      "new_path": "hdl/chisel/src/soc/BUILD"
    },
    {
      "type": "modify",
      "old_id": "cc5f74ea286c9853cf8b62a0c49bcafd63329fac",
      "old_mode": 33188,
      "old_path": "hdl/chisel/src/soc/CrossbarConfig.scala",
      "new_id": "bde5c3036017ac3ac95aea25c581a841b862a49d",
      "new_mode": 33188,
      "new_path": "hdl/chisel/src/soc/CrossbarConfig.scala"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "0e52e4b00b99a64ef39969948f3f48d496f272b3",
      "new_mode": 33188,
      "new_path": "hdl/chisel/src/soc/KelvinChiselSubsystem.scala"
    },
    {
      "type": "modify",
      "old_id": "ed81b5fa25b83ac0ce8330d5aefebc4e16412588",
      "old_mode": 33188,
      "old_path": "hdl/chisel/src/soc/KelvinXbar.scala",
      "new_id": "2d3a49761d13aa17517d90c1358282506943c9d1",
      "new_mode": 33188,
      "new_path": "hdl/chisel/src/soc/KelvinXbar.scala"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d7a106f1aed0b4c3823f0329b900ae45766665b0",
      "new_mode": 33188,
      "new_path": "hdl/chisel/src/soc/SoCChiselConfig.scala"
    },
    {
      "type": "modify",
      "old_id": "57c1cb5b34a54c901868d04463be0acf852b80f0",
      "old_mode": 33188,
      "old_path": "kelvin_test_utils/TileLinkULInterface.py",
      "new_id": "ac54a67f9408c98148b5f4b065e584f109684736",
      "new_mode": 33188,
      "new_path": "kelvin_test_utils/TileLinkULInterface.py"
    },
    {
      "type": "modify",
      "old_id": "2044827f0defecd4c25f25eaf31b6deadccf5c42",
      "old_mode": 33188,
      "old_path": "tests/cocotb/tlul/BUILD",
      "new_id": "33e8d82fe16ad9fea1d9fc2da7cb0414ee9cc974",
      "new_mode": 33188,
      "new_path": "tests/cocotb/tlul/BUILD"
    },
    {
      "type": "modify",
      "old_id": "0e62adbbaf6b373823f0482fe16b163401a1bcef",
      "old_mode": 33188,
      "old_path": "tests/cocotb/tlul/kelvin_xbar_test.py",
      "new_id": "2bece48828547f906334846bdee1be2dbb537e72",
      "new_mode": 33188,
      "new_path": "tests/cocotb/tlul/kelvin_xbar_test.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ac7c02341daab35b2978da0554b7382a97aff3d5",
      "new_mode": 33188,
      "new_path": "tests/cocotb/tlul/test_subsystem.py"
    }
  ]
}
