@@ -259,60 +259,86 @@ module RotateRight#(T, int ARRAY_LEN) {
259259
260260/// Temporary module for creating and deconstructing tuples, until we have structs
261261module 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
278278module 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
298298module 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