Skip to content

Commit 380c8ea

Browse files
committed
Add Tuple5
1 parent 89fc5fa commit 380c8ea

File tree

1 file changed

+59
-33
lines changed

1 file changed

+59
-33
lines changed

std/util.sus

Lines changed: 59 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -259,60 +259,86 @@ module RotateRight#(T, int ARRAY_LEN) {
259259

260260
/// Temporary module for creating and deconstructing tuples, until we have structs
261261
module Tuple2 #(T1, T2) {
262-
gen int SIZE1 = sizeof#(T: type T1)
263-
gen int SIZE2 = sizeof#(T: type T2)
262+
gen int TO1 = sizeof#(T: type T1)
263+
gen int TO2 = TO1 + sizeof#(T: type T2)
264264
domain clk
265265

266266
domain pack_dom
267-
interface pack : T1 v1_i'0, T2 v2_i'0 -> bool[SIZE1 + SIZE2] packed_o'0
268-
packed_o[:SIZE1] = ToBits(v1_i)
269-
packed_o[SIZE1:] = ToBits(v2_i)
267+
interface pack : T1 v1_i'0, T2 v2_i'0 -> bool[TO2] packed_o'0
268+
packed_o[:TO1] = ToBits(v1_i)
269+
packed_o[TO1:] = ToBits(v2_i)
270270

271271
domain unpack_dom
272-
interface unpack : bool[SIZE1 + SIZE2] packed_i'0 -> T1 v1_o'0, T2 v2_o'0
273-
v1_o = FromBits(packed_i[:SIZE1])
274-
v2_o = FromBits(packed_i[SIZE1:])
272+
interface unpack : bool[TO2] packed_i'0 -> T1 v1_o'0, T2 v2_o'0
273+
v1_o = FromBits(packed_i[:TO1])
274+
v2_o = FromBits(packed_i[TO1:])
275275
}
276276

277277
/// Temporary module for creating and deconstructing tuples, until we have structs
278278
module Tuple3 #(T1, T2, T3) {
279-
gen int SIZE1 = sizeof#(T: type T1)
280-
gen int SIZE2 = sizeof#(T: type T2)
281-
gen int SIZE3 = sizeof#(T: type T3)
279+
gen int TO1 = sizeof#(T: type T1)
280+
gen int TO2 = TO1 + sizeof#(T: type T2)
281+
gen int TO3 = TO2 + sizeof#(T: type T3)
282282
domain clk
283283

284284
domain pack_dom
285-
interface pack : T1 v1_i'0, T2 v2_i'0, T3 v3_i'0 -> bool[SIZE1 + SIZE2 + SIZE3] packed_o'0
286-
packed_o[:SIZE1] = ToBits(v1_i)
287-
packed_o[SIZE1:SIZE1+SIZE2] = ToBits(v2_i)
288-
packed_o[SIZE1+SIZE2:] = ToBits(v3_i)
285+
interface pack : T1 v1_i'0, T2 v2_i'0, T3 v3_i'0 -> bool[TO3] packed_o'0
286+
packed_o[:TO1] = ToBits(v1_i)
287+
packed_o[TO1:TO2] = ToBits(v2_i)
288+
packed_o[TO2:] = ToBits(v3_i)
289289

290290
domain unpack_dom
291-
interface unpack : bool[SIZE1 + SIZE2 + SIZE3] packed_i'0 -> T1 v1_o'0, T2 v2_o'0, T3 v3_o'0
292-
v1_o = FromBits(packed_i[:SIZE1])
293-
v2_o = FromBits(packed_i[SIZE1:SIZE1+SIZE2])
294-
v3_o = FromBits(packed_i[SIZE1+SIZE2:])
291+
interface unpack : bool[TO3] packed_i'0 -> T1 v1_o'0, T2 v2_o'0, T3 v3_o'0
292+
v1_o = FromBits(packed_i[:TO1])
293+
v2_o = FromBits(packed_i[TO1:TO2])
294+
v3_o = FromBits(packed_i[TO2:])
295295
}
296296

297297
/// Temporary module for creating and deconstructing tuples, until we have structs
298298
module Tuple4 #(T1, T2, T3, T4) {
299-
gen int SIZE1 = sizeof#(T: type T1)
300-
gen int SIZE2 = sizeof#(T: type T2)
301-
gen int SIZE3 = sizeof#(T: type T3)
302-
gen int SIZE4 = sizeof#(T: type T4)
299+
gen int TO1 = sizeof#(T: type T1)
300+
gen int TO2 = TO1 + sizeof#(T: type T2)
301+
gen int TO3 = TO2 + sizeof#(T: type T3)
302+
gen int TO4 = TO3 + sizeof#(T: type T4)
303303
domain clk
304304

305305
domain pack_dom
306-
interface pack : T1 v1_i'0, T2 v2_i'0, T3 v3_i'0, T4 v4_i'0 -> bool[SIZE1 + SIZE2 + SIZE3 + SIZE4] packed_o'0
307-
packed_o[:SIZE1] = ToBits(v1_i)
308-
packed_o[SIZE1:SIZE1+SIZE2] = ToBits(v2_i)
309-
packed_o[SIZE1+SIZE2:SIZE1+SIZE2+SIZE3] = ToBits(v3_i)
310-
packed_o[SIZE1+SIZE2+SIZE3:] = ToBits(v4_i)
306+
interface pack : T1 v1_i'0, T2 v2_i'0, T3 v3_i'0, T4 v4_i'0 -> bool[TO4] packed_o'0
307+
packed_o[:TO1] = ToBits(v1_i)
308+
packed_o[TO1:TO2] = ToBits(v2_i)
309+
packed_o[TO2:TO3] = ToBits(v3_i)
310+
packed_o[TO3:] = ToBits(v4_i)
311311

312312
domain unpack_dom
313-
interface unpack : bool[SIZE1 + SIZE2 + SIZE3 + SIZE4] packed_i'0 -> T1 v1_o'0, T2 v2_o'0, T3 v3_o'0, T4 v4_o'0
314-
v1_o = FromBits(packed_i[:SIZE1])
315-
v2_o = FromBits(packed_i[SIZE1:SIZE1+SIZE2])
316-
v3_o = FromBits(packed_i[SIZE1+SIZE2:SIZE1+SIZE2+SIZE3])
317-
v4_o = FromBits(packed_i[SIZE1+SIZE2+SIZE3:])
313+
interface unpack : bool[TO4] packed_i'0 -> T1 v1_o'0, T2 v2_o'0, T3 v3_o'0, T4 v4_o'0
314+
v1_o = FromBits(packed_i[:TO1])
315+
v2_o = FromBits(packed_i[TO1:TO2])
316+
v3_o = FromBits(packed_i[TO2:TO3])
317+
v4_o = FromBits(packed_i[TO3:])
318+
}
319+
320+
/// Temporary module for creating and deconstructing tuples, until we have structs
321+
module Tuple5 #(T1, T2, T3, T4, T5) {
322+
gen int TO1 = sizeof#(T: type T1)
323+
gen int TO2 = TO1 + sizeof#(T: type T2)
324+
gen int TO3 = TO2 + sizeof#(T: type T3)
325+
gen int TO4 = TO3 + sizeof#(T: type T4)
326+
gen int TO5 = TO4 + sizeof#(T: type T5)
327+
domain clk
328+
329+
domain pack_dom
330+
interface pack : T1 v1_i'0, T2 v2_i'0, T3 v3_i'0, T4 v4_i'0, T5 v5_i'0 -> bool[TO5] packed_o'0
331+
packed_o[:TO1] = ToBits(v1_i)
332+
packed_o[TO1:TO2] = ToBits(v2_i)
333+
packed_o[TO2:TO3] = ToBits(v3_i)
334+
packed_o[TO3:TO4] = ToBits(v4_i)
335+
packed_o[TO4:] = ToBits(v5_i)
336+
337+
domain unpack_dom
338+
interface unpack : bool[TO4] packed_i'0 -> T1 v1_o'0, T2 v2_o'0, T3 v3_o'0, T4 v4_o'0, T5 v5_o'0
339+
v1_o = FromBits(packed_i[:TO1])
340+
v2_o = FromBits(packed_i[TO1:TO2])
341+
v3_o = FromBits(packed_i[TO2:TO3])
342+
v4_o = FromBits(packed_i[TO3:TO4])
343+
v5_o = FromBits(packed_i[TO4:])
318344
}

0 commit comments

Comments
 (0)