Fix(dispatch): Prevent FPU/LSU hazard in DispatchV1

A structural hazard exists in the V1 dispatcher where a floating-point
operation could be dispatched in the same cycle as a floating-point
store. This caused a resource conflict over the floating-point
register file, leading to incorrect data being written to memory.

This is resolved by adding an interlock that prevents a floating-point
operation from being dispatched if the LSU is already active in the
current dispatch group. This ensures that LSU and FPU operations are
mutually exclusive, matching the correct behavior of DispatchV2.

Change-Id: I0d4c0fce95be532cc4381636d6114edb95f6e800
1 file changed
tree: 305fd9880e2cab2fe486b7ba4d6413d839eea005
  1. doc/
  2. examples/
  3. external/
  4. hdl/
  5. hw_sim/
  6. kelvin_test_utils/
  7. lib/
  8. platforms/
  9. rules/
  10. tests/
  11. third_party/
  12. toolchain/
  13. utils/
  14. .bazelrc
  15. .bazelversion
  16. .gitignore
  17. CONTRIBUTING.md
  18. LICENSE
  19. PREUPLOAD.cfg
  20. README.md
  21. 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