Skip to content

List BEL bindings available for cell instances of macro expansions #76

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions interchange/DeviceResources.capnp
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ struct Device {
wireTypes @16 : List(WireType);
pipTimings @17 : List(PIPTiming);
nodeTimings @18 : List(NodeTiming);
primLibsExtra @19 : PrimLibsExtra;

#######################################
# Placement definition objects
Expand Down Expand Up @@ -907,4 +908,20 @@ struct Device {
struct ParameterDefinitions {
cells @0 : List(CellParameterDefinition);
}

# Extra data for priomitive libraries that doesn't fit the LogicalNetlist format

struct PrimLibsExtra {
perCellInstances @0 : List(PerCellInstance);

struct PerCellInstance {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of PerCellInstance and perCellInstances, could we use the name PrimCellInstance and primCellInstances?

# List of possible cell placements
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How would this work in practice? I don't see how the placements would get mapped backed to the primitive macro components. Seems like you'd need a name or reference to the library/macro cell component the placement is intended for.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The mapping is done by simply using same indices as in Device.primLibs.instList.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If this is the association, please add comments so that someone examining the schema could easily know that is the case. Also, it would seem that some macros might not need a placement constraint or would have more permissive placement constraints than others. How are those details communicated? Relative offsets are another question such as multi-LUTRAM memories. Some might need to be adjacent, but don't necessarily need to fit into a specific location.

placements @0 : List(CellInstancePlacement);
}

struct CellInstancePlacement {
siteType @0 : SiteTypeIdx $siteTypeRef();
bel @1 : StringIdx $stringRef();
}
}
}