)]}'
{
  "commit": "0004fc32c1b0d4287693d1d0d1febce780730cf0",
  "tree": "2915f8998a98da26677dcaeb2a36e0040a8b65f5",
  "parents": [
    "be106f192e7e77a9038adf577aafa6c2d4e03b6c"
  ],
  "author": {
    "name": "Alex Van Damme",
    "email": "atv@google.com",
    "time": "Tue Aug 19 13:29:51 2025 -0700"
  },
  "committer": {
    "name": "Alex Van Damme",
    "email": "atv@google.com",
    "time": "Thu Aug 28 17:09:51 2025 -0700"
  },
  "message": "feat(soc): Add data-driven TileLink-UL crossbar\n\nThis commit introduces a data-driven TileLink-UL crossbar for the\nKelvin SoC. The entire crossbar topology is defined in a single\n`CrossbarConfig.scala` file, which serves as the single source of\ntruth for hosts, devices, address maps, and connections.\n\nThe `KelvinXbar.scala` module programmatically generates the crossbar\nby instantiating and connecting the necessary TileLink primitives\n(sockets, FIFOs, width bridges) based on the configuration. This\napproach provides a flexible and maintainable way to manage the SoC\u0027s\ninterconnect.\n\nKey features:\n- Centralized configuration in `CrossbarConfig.scala`.\n- A validator to check for configuration errors, such as overlapping\n  address ranges.\n- Automatic instantiation of TileLink primitives.\n- Programmatic address decoding and wiring.\n- Support for multiple, asynchronous clock domains.\n- A comprehensive cocotb test suite (`kelvin_xbar_test.py`) that\n  verifies various data paths, including width and clock domain\n  crossings, error responses, and integrity checks.\n\nChange-Id: I6b341aadfabcc9c2220c1818246989c35bba8ad5\n",
  "tree_diff": [
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f01f1e70cec3732bdd594dffb03e87a2e0861dc4",
      "new_mode": 33188,
      "new_path": "hdl/chisel/src/soc/BUILD"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "cc5f74ea286c9853cf8b62a0c49bcafd63329fac",
      "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": "ed81b5fa25b83ac0ce8330d5aefebc4e16412588",
      "new_mode": 33188,
      "new_path": "hdl/chisel/src/soc/KelvinXbar.scala"
    },
    {
      "type": "modify",
      "old_id": "33c324b350b85c237a7182953248088416172ac7",
      "old_mode": 33188,
      "old_path": "tests/cocotb/tlul/BUILD",
      "new_id": "0e8417c80ca40292d8d42f1139177525f33713e7",
      "new_mode": 33188,
      "new_path": "tests/cocotb/tlul/BUILD"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "0e62adbbaf6b373823f0482fe16b163401a1bcef",
      "new_mode": 33188,
      "new_path": "tests/cocotb/tlul/kelvin_xbar_test.py"
    }
  ]
}
