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 1 commit
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
22 changes: 18 additions & 4 deletions interchange/LogicalNetlist.capnp
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,13 @@ struct InstRef {
annotation instRef(*) :InstRef;
using InstIdx = UInt32;

struct SiteTypeRef {
type @0 :Ref.ReferenceType = rootValue;
field @1 :Text = "siteTypeList";
}
annotation siteTypeRef(*) :SiteTypeRef;
using SiteTypeIdx = UInt32;

Copy link
Contributor

Choose a reason for hiding this comment

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

This is a DeviceResources construct and should probably stay there to keep the schema clean.

struct Netlist {

name @0 : Text;
Expand All @@ -78,10 +85,17 @@ struct Netlist {
}

struct CellInstance {
name @0 : StringIdx $stringRef();
propMap @1 : PropertyMap;
view @2 : StringIdx $stringRef();
cell @3 : CellIdx $cellRef();
name @0 : StringIdx $stringRef();
propMap @1 : PropertyMap;
view @2 : StringIdx $stringRef();
cell @3 : CellIdx $cellRef();
placements @4 : List(CellInstancePlacement);
}

# Acceptable physical placement for a cell instance
struct CellInstancePlacement {
siteType @0 : SiteTypeIdx $siteTypeRef;
bel @1 : StringIdx $stringRef;
Copy link
Contributor

Choose a reason for hiding this comment

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

There is a need to provide this information, but the LogicalNetlist would probably not be the place to do it. The LogicalNetlist is meant to be device agnostic. This information is device specific and would be better served to be placed in DeviceResources.

Copy link
Author

Choose a reason for hiding this comment

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

If LogicalNetlist was meant to be device agnostic, but there's a need to store device-specific data related to entries in primitive libraries, then is it even a good container for primitive libraries?

A possible way out of this, without severely breaking backwards compatibility, would be to introduce a list field in DeviceResources that would have an entry for each instance in instList of primLibs which is not a pretty solution but at least it would move that out of LogicalNetlist. I'm not sure if an elegant solution is possible without changing too much about primLibs, because given your suggestion, we would have to store some data related to primitive libraries outside of the container that's supposed to encapsulate it.

}

struct Cell {
Expand Down