summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarol Gugala <kgugala@antmicro.com>2021-04-29 15:22:57 +0200
committerGitHub <noreply@github.com>2021-04-29 15:22:57 +0200
commitb3ab09776c8dc31a71ca2c7fbcb4575219232d16 (patch)
tree901bb7bd57e6a1883987d7adc408411e8a14cdbc
parent5208d794d318e9151b93120d7e5ba75d8aef45e7 (diff)
parent04bc92a22306351e1b848a6d8a3fd7720c4aed58 (diff)
downloadfpga-interchange-schema-b3ab09776c8dc31a71ca2c7fbcb4575219232d16.tar.gz
fpga-interchange-schema-b3ab09776c8dc31a71ca2c7fbcb4575219232d16.tar.bz2
fpga-interchange-schema-b3ab09776c8dc31a71ca2c7fbcb4575219232d16.zip
Merge pull request #31 from gatecat/wire-general-routing
Add Wire types and categories
-rw-r--r--interchange/DeviceResources.capnp29
1 files changed, 29 insertions, 0 deletions
diff --git a/interchange/DeviceResources.capnp b/interchange/DeviceResources.capnp
index 5a52bec..e2edd20 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;
@@ -89,6 +97,7 @@ struct Device {
constraints @13 : Constraints;
lutDefinitions @14 : LutDefinitions;
parameterDefs @15 : ParameterDefinitions;
+ wireTypes @16 : List(WireType);
#######################################
# Placement definition objects
@@ -203,9 +212,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 {