@@ -58,6 +58,14 @@ struct WireRef {
58
58
annotation wireRef(*) :WireRef ;
59
59
using WireIdx = UInt32;
60
60
61
+ struct WireTypeRef {
62
+ type @0 :Ref.ReferenceType = parent;
63
+ field @1 :Text = "wireTypes" ;
64
+ depth @2 :Int32 = 1 ;
65
+ }
66
+ annotation wireTypeRef(*) :WireTypeRef ;
67
+ using WireTypeIdx = UInt32;
68
+
61
69
using WireIDInTileType = UInt32; # ID in Tile Type
62
70
using SitePinIdx = UInt32;
63
71
@@ -89,6 +97,7 @@ struct Device {
89
97
constraints @13 : Constraints;
90
98
lutDefinitions @14 : LutDefinitions;
91
99
parameterDefs @15 : ParameterDefinitions;
100
+ wireTypes @16 : List(WireType);
92
101
93
102
# ######################################
94
103
# Placement definition objects
@@ -203,9 +212,29 @@ struct Device {
203
212
# #####################################
204
213
# Inter-site routing resources
205
214
# #####################################
215
+
206
216
struct Wire {
207
217
tile @0 : StringIdx $stringRef();
208
218
wire @1 : StringIdx $stringRef();
219
+ type @2 : WireTypeIdx $wireTypeRef();
220
+ }
221
+
222
+ enum WireCategory {
223
+ # general interconnect, usually with many uphill and downhill pips and spanning multiple tiles
224
+ general @0 ;
225
+ # pin/local wires, carry chains, dedicated paths, everything else
226
+ special @1 ;
227
+ # the global clock network
228
+ global @2 ;
229
+ }
230
+
231
+ # This is used to distinguish between different types of wires, in order to provide extra hints
232
+ # during routing, such as the category of wires. It is also intended to be able to describe
233
+ # complex routing requirements, such as global routing which requires a series of different types
234
+ # of wires to be used in succession
235
+ struct WireType {
236
+ name @0 : StringIdx $stringRef();
237
+ category @1 : WireCategory;
209
238
}
210
239
211
240
struct Node {
0 commit comments