summaryrefslogtreecommitdiffstats
path: root/interchange/PhysicalNetlist.capnp
diff options
context:
space:
mode:
Diffstat (limited to 'interchange/PhysicalNetlist.capnp')
-rw-r--r--interchange/PhysicalNetlist.capnp153
1 files changed, 153 insertions, 0 deletions
diff --git a/interchange/PhysicalNetlist.capnp b/interchange/PhysicalNetlist.capnp
new file mode 100644
index 0000000..61b312d
--- /dev/null
+++ b/interchange/PhysicalNetlist.capnp
@@ -0,0 +1,153 @@
+# Copyright 2020-2021 Xilinx, Inc. and Google, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+@0xcb2ccd67aa912968;
+using Java = import "/capnp/java.capnp";
+using Ref = import "References.capnp";
+$Java.package("com.xilinx.rapidwright.interchange");
+$Java.outerClassname("PhysicalNetlist");
+
+struct StringRef {
+ type @0 :Ref.ReferenceType = rootValue;
+ field @1 :Text = "strList";
+}
+annotation stringRef(*) :StringRef;
+using StringIdx = UInt32;
+
+struct HashSet {
+ type @0 : Ref.ImplementationType = enumerator;
+ hide @1 : Bool = true;
+}
+annotation hashSet(*) :HashSet;
+
+struct PhysNetlist {
+
+ part @0 : Text;
+ placements @1 : List(CellPlacement);
+ physNets @2 : List(PhysNet);
+ physCells @3 : List(PhysCell);
+ strList @4 : List(Text) $hashSet();
+ siteInsts @5 : List(SiteInstance);
+ properties @6 : List(Property);
+ nullNet @7 : PhysNet;
+
+ struct PinMapping {
+ cellPin @0 : StringIdx $stringRef();
+ bel @1 : StringIdx $stringRef();
+ belPin @2 : StringIdx $stringRef();
+ isFixed @3 : Bool;
+ union {
+ multi @4 : Void;
+ otherCell @5 : MultiCellPinMapping;
+ }
+ }
+
+ struct MultiCellPinMapping {
+ multiCell @0 : StringIdx $stringRef();
+ multiType @1 : StringIdx $stringRef();
+ }
+
+ struct CellPlacement {
+ cellName @0 : StringIdx $stringRef();
+ type @1 : StringIdx $stringRef();
+ site @2 : StringIdx $stringRef();
+ bel @3 : StringIdx $stringRef();
+ pinMap @4 : List(PinMapping);
+ otherBels @5 : List(StringIdx) $stringRef();
+ isBelFixed @6 : Bool;
+ isSiteFixed @7 : Bool;
+ altSiteType @8 : StringIdx $stringRef();
+ }
+
+ struct PhysCell {
+ cellName @0 : StringIdx $stringRef();
+ physType @1 : PhysCellType;
+ }
+
+ enum PhysCellType {
+ locked @0;
+ port @1;
+ gnd @2;
+ vcc @3;
+ }
+
+ struct PhysNet {
+ name @0 : StringIdx $stringRef();
+ sources @1 : List(RouteBranch);
+ stubs @2 : List(RouteBranch);
+ type @3 : NetType = signal;
+ }
+
+ enum NetType {
+ signal @0;
+ gnd @1;
+ vcc @2;
+ }
+
+
+ struct RouteBranch {
+ routeSegment : union {
+ belPin @0 : PhysBelPin;
+ sitePin @1 : PhysSitePin;
+ pip @2 : PhysPIP;
+ sitePIP @3 : PhysSitePIP;
+ }
+ branches @4 : List(RouteBranch);
+ }
+
+ struct PhysBel {
+ site @0 : StringIdx $stringRef();
+ bel @1 : StringIdx $stringRef();
+ }
+
+ struct PhysBelPin {
+ site @0 : StringIdx $stringRef();
+ bel @1 : StringIdx $stringRef();
+ pin @2 : StringIdx $stringRef();
+ }
+
+ struct PhysSitePin {
+ site @0 : StringIdx $stringRef();
+ pin @1 : StringIdx $stringRef();
+ }
+
+ struct PhysPIP {
+ tile @0 : StringIdx $stringRef();
+ wire0 @1 : StringIdx $stringRef();
+ wire1 @2 : StringIdx $stringRef();
+ forward @3 : Bool;
+ isFixed @4 : Bool;
+ }
+
+ struct PhysSitePIP {
+ site @0 : StringIdx $stringRef();
+ bel @1 : StringIdx $stringRef();
+ pin @2 : StringIdx $stringRef();
+ isFixed @3 : Bool;
+ union {
+ isInverting @4 : Bool;
+ inverts @5 : Void;
+ }
+ }
+
+ struct SiteInstance {
+ site @0 : StringIdx $stringRef();
+ type @1 : StringIdx $stringRef();
+ }
+
+ struct Property {
+ key @0 : StringIdx $stringRef();
+ value @1 : StringIdx $stringRef();
+ }
+}