diff options
Diffstat (limited to 'interchange')
-rw-r--r-- | interchange/DeviceResources.capnp | 34 | ||||
-rw-r--r-- | interchange/PhysicalNetlist.capnp | 8 |
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 { |