llvm / llvm/circt

[HandshakeToHW] Tracking issue

Open
#3,960 0 comments 2 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Handshake HandshakeToHW
Dominant language
C++
Stars
2.2k
Forks
524
Avg merge
3d 2h
Merged PRs (30d)
46

Description

This is a tracking issue for the reimplementation of HandshakeToFIRRTL to a HW/ESI-based implementation:

* Operators
* [x] Mux
* [x] Conditional branch
* [ ] Instance
* [ ] Buffer
* [x] Seq
* [ ] Fifo: A fifo is most easily implemented when some memory abstraction can be targeted (ready/write pointers, transparency, ...). We currently have `seq.hlmem` but it would be nice to also have a `seq.fifo` operation (which could lower to a seq.hlmem implementation).
* [x] Constant
* [x] Fork
* [x] Join
* [ ] LazyFork
* [x] Load
* [x] Store
* [x] Memory
* Ideally should lower to a `seq.hlmem` operation, see https://github.com/llvm/circt/pull/3973
* [x] External memory
* [x] Select
* [x] Sync
* [ ] Pack
* Partially done - lowerings exist but semi-blocked by https://github.com/llvm/circt/issues/4043
* [ ] Unpack
* [x] Support pruning `i0` logic
* HandshakeToHW attempts to to keep special-case logic for handling `none` (soon to be `i0`)-typed values. This implies that any handshake SSA value which is `i0` still carries ready/valid/data semantics, however the data part of the bundle is of zero width. Given this style of lowering, we need a pass that is able to prune the `i0` logic post-conversion (or keep it around until emission and let the emitter decide what to do with it).
* [x] Figure out how to support memories
* This will be ESI based, and should use an ESI service.
* [x] Move integration tests from FIRRTL to HW implementation
* [ ] Remove HandshakeToFIRRTL

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reviewing the HandshakeToHW and HandshakeToFIRRTL reimplementations, then inspect the remaining unchecked operators and the referenced seq.hlmem and ESI work. Done means completing the listed missing functionality, resolving the Pack dependency, and removing HandshakeToFIRRTL.

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.