summaryrefslogtreecommitdiffstats
path: root/interchange
diff options
context:
space:
mode:
Diffstat (limited to 'interchange')
-rw-r--r--interchange/DeviceResources.capnp34
-rw-r--r--interchange/PhysicalNetlist.capnp8
2 files changed, 41 insertions, 1 deletions
diff --git a/interchange/DeviceResources.capnp b/interchange/DeviceResources.capnp
index 44313b8..e39f844 100644
--- a/interchange/DeviceResources.capnp
+++ b/interchange/DeviceResources.capnp
@@ -58,6 +58,14 @@ struct WireRef {
annotation wireRef(*) :WireRef;
using WireIdx = UInt32;
+struct WireTypeRef {
+ type @0 :Ref.ReferenceType = parent;
+ field @1 :Text = "wireTypes";
+ depth @2 :Int32 = 1;
+}
+annotation wireTypeRef(*) :WireTypeRef;
+using WireTypeIdx = UInt32;
+
using WireIDInTileType = UInt32; # ID in Tile Type
using SitePinIdx = UInt32;
@@ -80,7 +88,10 @@ struct Device {
tileList @4 : List(Tile);
wires @5 : List(Wire);
nodes @6 : List(Node);
- primLibs @7 : Dir.Netlist; # Netlist libraries of Unisim primitives and macros
+ # Netlist libraries of Unisim primitives and macros
+ # The library containing primitives should be called "primitives", and
+ # the library containing macros called "macros".
+ primLibs @7 : Dir.Netlist;
exceptionMap @8 : List(PrimToMacroExpansion); # Prims to macros expand w/same name, except these
cellBelMap @9 : List(CellBelMapping);
cellInversions @10 : List(CellInversion);
@@ -89,6 +100,7 @@ struct Device {
constraints @13 : Constraints;
lutDefinitions @14 : LutDefinitions;
parameterDefs @15 : ParameterDefinitions;
+ wireTypes @16 : List(WireType);
#######################################
# Placement definition objects
@@ -203,9 +215,29 @@ struct Device {
######################################
# Inter-site routing resources
######################################
+
struct Wire {
tile @0 : StringIdx $stringRef();
wire @1 : StringIdx $stringRef();
+ type @2 : WireTypeIdx $wireTypeRef();
+ }
+
+ enum WireCategory {
+ # general interconnect, usually with many uphill and downhill pips and spanning multiple tiles
+ general @0;
+ # pin/local wires, carry chains, dedicated paths, everything else
+ special @1;
+ # the global clock network
+ global @2;
+ }
+
+ # This is used to distinguish between different types of wires, in order to provide extra hints
+ # during routing, such as the category of wires. It is also intended to be able to describe
+ # complex routing requirements, such as global routing which requires a series of different types
+ # of wires to be used in succession
+ struct WireType {
+ name @0 : StringIdx $stringRef();
+ category @1 : WireCategory;
}
struct Node {
diff --git a/interchange/PhysicalNetlist.capnp b/interchange/PhysicalNetlist.capnp
index 6758039..1ac268f 100644
--- a/interchange/PhysicalNetlist.capnp
+++ b/interchange/PhysicalNetlist.capnp
@@ -131,6 +131,14 @@ struct PhysNetlist {
wire1 @2 : StringIdx $stringRef();
forward @3 : Bool;
isFixed @4 : Bool;
+ # In case of a pseudo PIP also the traversed site
+ # needs to be added to the PhysPIP object
+ union {
+ noSite @5: Void;
+ # It is assumed that a pseudo PIP can traverse one
+ # site only
+ site @6: StringIdx $stringRef();
+ }
}
struct PhysSitePIP {