)]}'
{
  "commit": "4aa97a944ac2c5c399d2f05a77fcfd0a27352c0e",
  "tree": "7db367673cfd79e7b172598b79bb635a6d8744a4",
  "parents": [
    "5fad6ba07730f96e34f323f734dcf656fff199df"
  ],
  "author": {
    "name": "Alex Van Damme",
    "email": "atv@google.com",
    "time": "Tue Sep 02 16:27:33 2025 -0700"
  },
  "committer": {
    "name": "Alex Van Damme",
    "email": "atv@google.com",
    "time": "Thu Sep 18 10:30:34 2025 -0700"
  },
  "message": "feat(dv): Add Python-based SPI loader for Verilator\n\nThis commit introduces a Python-based toolchain for loading and running software on the Verilator simulation of the Kelvin SoC. This toolchain interacts with the `spi_dpi_master` via its TCP socket interface.\n\nThe new toolchain in `utils/kelvin_soc_loader/` includes:\n- **`spi_driver.py`**: A Python client library that connects to the DPI server and provides a high-level API for SPI operations (read/write/poll registers, bulk data transfer).\n- **`loader.py`**: An application that uses the `spi_driver` to parse an ELF file, load its segments into the SoC\u0027s memory through the simulated SPI bridge, and then start the core\u0027s execution.\n- **`run_simulation.py`**: An orchestration script that manages the entire simulation and loading flow. It starts the Verilator binary, waits for the DPI server to initialize, executes the loader script, and manages the simulation runtime.\n\nThis provides a complete, scriptable workflow for running software tests on the hardware design in a simulation environment, greatly improving the development and verification loop.\n\nChange-Id: I950efdff040c49502cc74e4b7ad71ed5e3c9124c\n",
  "tree_diff": [
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d0093537cf1a08e2defecc93523ac9ab96f50f3f",
      "new_mode": 33188,
      "new_path": "utils/kelvin_soc_loader/BUILD"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b58d202d9ba107f71a1110d5d7ed22d4d191682b",
      "new_mode": 33188,
      "new_path": "utils/kelvin_soc_loader/loader.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3bf83c9a6017eef62a0769ec07e6cd67823441d9",
      "new_mode": 33188,
      "new_path": "utils/kelvin_soc_loader/run_simulation.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a19a365fe205ca2e2394767618571dc22f519080",
      "new_mode": 33188,
      "new_path": "utils/kelvin_soc_loader/spi_driver.py"
    }
  ]
}
