summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgatecat <gatecat@ds0.me>2021-04-13 10:04:05 +0100
committergatecat <gatecat@ds0.me>2021-04-21 10:44:21 +0100
commit04bc92a22306351e1b848a6d8a3fd7720c4aed58 (patch)
tree901bb7bd57e6a1883987d7adc408411e8a14cdbc
parent5208d794d318e9151b93120d7e5ba75d8aef45e7 (diff)
downloadfpga-interchange-schema-04bc92a22306351e1b848a6d8a3fd7720c4aed58.tar.gz
fpga-interchange-schema-04bc92a22306351e1b848a6d8a3fd7720c4aed58.tar.bz2
fpga-interchange-schema-04bc92a22306351e1b848a6d8a3fd7720c4aed58.zip
Add wire types and categories
Signed-off-by: gatecat <gatecat@ds0.me>
-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 {