feat(bus): Add SECDED integrity for TileLink-UL

This commit implements SECDED (Single Error Correction, Double Error
Detection) for the TileLink-UL bus to ensure data integrity. The
implementation is compatible with OpenTitan's `prim_secded_inv` logic.

Key changes include:
- A parameterized `SecdedEncoder` Chisel module that supports 32-bit,
  57-bit, and 128-bit data widths. The 128-bit implementation uses a
  folded ECC scheme.
- `RequestIntegrityGen/Check` and `ResponseIntegrityGen/Check` modules
  to generate and verify integrity codes for the TileLink A and D
  channels.
- A Python-based golden model (`secded_golden.py`) for the SECDED
  logic to ensure correctness.
- A new `TileLinkULInterface` cocotb utility for simplified,
  transaction-based testing of the TileLink bus.
- Comprehensive cocotb tests that verify the `SecdedEncoder` against
  the golden model and test the full `TlulIntegrity` functionality,
  including fault injection.

Change-Id: I20a059b78a47699f145ae397b0e037d8c56dab69
10 files changed
tree: 51f5f9da62f5b35fc9aac3d69a5309035ab27ca8
  1. doc/
  2. examples/
  3. external/
  4. fpga/
  5. hdl/
  6. hw_sim/
  7. kelvin_test_utils/
  8. lib/
  9. platforms/
  10. rules/
  11. tests/
  12. third_party/
  13. toolchain/
  14. utils/
  15. .bazelrc
  16. .bazelversion
  17. .gitignore
  18. CONTRIBUTING.md
  19. LICENSE
  20. PREUPLOAD.cfg
  21. README.md
  22. WORKSPACE
README.md

Kelvin

Kelvin is a RISC-V32IM core with a custom instruction set.

Kelvin block diagram

More information on the design can be found in the overview.

Getting Started

  • If you are hardware engineer looking to integrate Kelvin into your design, check out our integration guide.
  • If you are a software engineer looking to write code for Kelvin, start with this tutorial.

Building

Kelvin uses bazel as it's build system. The Verilated simulator for Kelvin can be generated using:

bazel build //tests/verilator_sim:core_sim

The verilog source for the Kelvin core can be generated using:

bazel build //hdl/chisel/src/kelvin:core_cc_library_emit_verilog

Verilog source for the Matcha SoC can be generated using:

bazel clean --expunge  # To generate the ToT sha
bazel build //hdl/chisel:matcha_kelvin_verilog