feat(soc): Add data-driven TileLink-UL crossbar

This commit introduces a data-driven TileLink-UL crossbar for the
Kelvin SoC. The entire crossbar topology is defined in a single
`CrossbarConfig.scala` file, which serves as the single source of
truth for hosts, devices, address maps, and connections.

The `KelvinXbar.scala` module programmatically generates the crossbar
by instantiating and connecting the necessary TileLink primitives
(sockets, FIFOs, width bridges) based on the configuration. This
approach provides a flexible and maintainable way to manage the SoC's
interconnect.

Key features:
- Centralized configuration in `CrossbarConfig.scala`.
- A validator to check for configuration errors, such as overlapping
  address ranges.
- Automatic instantiation of TileLink primitives.
- Programmatic address decoding and wiring.
- Support for multiple, asynchronous clock domains.
- A comprehensive cocotb test suite (`kelvin_xbar_test.py`) that
  verifies various data paths, including width and clock domain
  crossings, error responses, and integrity checks.

Change-Id: I6b341aadfabcc9c2220c1818246989c35bba8ad5
5 files changed
tree: 2915f8998a98da26677dcaeb2a36e0040a8b65f5
  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