Skip to content

Does different proc()’s allow shared hardware resources? #1876

Description

@Mars-Cat2023

What's hard to do? (limit 100 words)

In DSLX, let’s imagine that my DSLX code is hardware-bounded and only allowed to create about 4x4 PEs (or called Node in the example matmul_4x4.x). If I spawn 4x4 Nodes at 3 different locations by the same or different proc() in series (no concurrency, no data hazards), after compiling it into Verilog,
(1) How many the hardware do I use? Is it 4x4 PEs (because it is allowed to the ideal Node proc()? Or it must be 3×(4x4) PEs?

(2) How can we share the subproc() across different proc()?
(Hope that you can give me some solutions or equivalent solutions for this) [Hint: This is a question is because we are not allowed to treat proc() as a parameter type, are we? Essentially different from other valid ones like array, structure, primitive data types, etc..]

(3) How to index or reference the spawned proc() from another proc()?

Current best alternative workaround (limit 100 words)

/

Your view of the "best case XLS enhancement" (limit 100 words)

Is there any way to support sharing Nodes?

Alternatively, I have seen some other languages have something like this: option of memory

...
let shared = spawn SharedHardware();
let p = spawn Process(memory=shared.memory);
...

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions