chipsalliance / chipsalliance/rocket-chip

RoCC accelerator TileLink manager node interface

Open
#2,885 0 comments 0 reactions 0 assignees View on GitHub
proposal
Dominant language
Scala
Stars
3.9k
Forks
1.3k
Avg merge
5d 13m
Merged PRs (30d)
1

Description

**Type of issue**: feature request
**Impact**: API addition (no impact on existing code)
**Development Phase**: proposal

**Other information**
I have a RoCC accelerator that needs to provide a TileLink manager node interface. I enabled this through this simple patch (I know I need to figure out how to correctly specify the currently hard-wired 8 beat-bytes ... sorry about that). I believe this patch is harmless for any RoCC accelerator not using atlSlaveNode.

I know I need to sign the contributor agreement, etc, but I was looking here today to see if this is a viable addition or if there's something about it that's very bad that I may not be considering. My RoCC accelerator has a need to communicate between accelerators over TileLink and that seems to be a very clean way to do it. It's been working well for me, anyway.

```
diff --git a/hw/LazyRoCC.scala b/hw/LazyRoCC.scala
index d58b1f0..25aa865 100644
--- a/hw/LazyRoCC.scala
+++ b/hw/LazyRoCC.scala
@@ -61,6 +61,7 @@ abstract class LazyRoCC(
)(implicit p: Parameters) extends LazyModule {
val module: LazyRoCCModuleImp
val atlNode: TLNode = TLIdentityNode()
+ val atlSlaveNode: TLNode = TLIdentityNode()
val tlNode: TLNode = TLIdentityNode()
}

@@ -74,6 +75,7 @@ trait HasLazyRoCC extends CanHavePTW { this: BaseTile =>
val roccs = p(BuildRoCC).map(_(p))

roccs.map(_.atlNode).foreach { atl => tlMasterXbar.node :=* atl }
+ roccs.map(_.atlSlaveNode).foreach { atlm => connectTLSlave(atlm, 8) } // fix beatBytes!
roccs.map(_.tlNode).foreach { tl => tlOtherMastersNode :=* tl }

nPTWPorts += roccs.map(_.nPTWPorts).sum

```

Contributor guide

Open the contributing guide

Research direction

Start with hw/LazyRoCC.scala and review the existing atlNode and tlNode connections, then inspect how connectTLSlave specifies beatBytes and how other TileLink nodes are wired. Done would require a maintainer-approved API for the RoCC TileLink manager interface, including the beat width and compatibility behavior for existing accelerators.

Written by the indexing model from the issue text.

Assessment

Tech stack
scala
Domain
embedded-iot
Issue type
Feature
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.