llvm / llvm/circt

Standard-To-Handshake + handshake runner doesn't handle toplevel memories well.

Open
#68 1 comment 0 reactions 0 assignees View on GitHub
Handshake
Dominant language
C++
Stars
2.2k
Forks
524
Avg merge
3d 2h
Merged PRs (30d)
46

Description

There's currently a small 'hack' to enable simulation with the handshake runner when code from the standard dialect has passed a pointer. In the current implementation, the pointer argument is converted to an internal memory, which is then intended to be initialized before simulation (although this doesn't actually happen yet). This is somewhat unintuitive since the memory conceptually lies outside the handshake design.

Fixing this properly probably requires better design for how the handshake dialect (And graph regions in general) are embedded inside SSACFG regions (e.g. the standard dialect). It would make more sense if a testable interface was provided by the standard to handshake conversion, which could then be easily interacted with by sequential code (like the handshake runner) or by an MLIR testbench. Today this complexity is built into the runner.

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by tracing the Standard-To-Handshake conversion and the handshake runner, focusing on how pointer arguments become internal memories and how graph regions are embedded in SSACFG regions. Done should provide a testable conversion interface that sequential code or an MLIR testbench can use, with toplevel memories handled and initialized correctly during simulation.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
compilers
Issue type
Refactor
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.