def reinterpret_bits_to_hstruct__val(val: HValue, hStructT: HStruct): """ Reinterpret signal of type Bits to signal of type HStruct """ container = hStructT.from_py(None) offset = 0 for f in hStructT.fields: t = f.dtype width = t.bit_length() if f.name is not None: v = val[(width + offset):offset] v = v._reinterpret_cast(t) setattr(container, f.name, v) offset += width return container
def test_const_size_stream(self, dataWidth, frame_len, randomize): T = HStruct( (HStream(Bits(8), frame_len=frame_len), "frame0"), (uint16_t, "footer"), ) u = self.mySetUp(dataWidth, T, randomize, use_strb=True) u.dataIn._ag.data.extend( packAxiSFrame(dataWidth, T.from_py({"frame0": [i + 1 for i in range(frame_len)], "footer": 2}), withStrb=True, ) ) t = 20 if randomize: t *= 3 self.runMatrixSim2(t, dataWidth, frame_len, randomize) off, f = axis_recieve_bytes(u.dataOut.frame0) self.assertEqual(off, 0) self.assertValSequenceEqual(f, [i + 1 for i in range(frame_len)]) self.assertValSequenceEqual(u.dataOut.footer._ag.data, [2])
def test_stream_and_footer(self, dataWidth, frame_len, prefix_suffix_as_padding, randomize): """ :note: Footer separation is tested in AxiS_footerSplitTC and this test only check that the AxiS_frameParser can connect wires correctly """ prefix_padding, suffix_padding = prefix_suffix_as_padding T = HStruct( (HStream(Bits(8)), "frame0"), (uint16_t, "footer"), ) fieldsToUse = set() if not prefix_padding: fieldsToUse.add("frame0") if not suffix_padding: fieldsToUse.add("footer") _T = HdlType_select(T, fieldsToUse) u = self.mySetUp(dataWidth, _T, randomize, use_strb=True) v = T.from_py({ "frame0": [i + 1 for i in range(frame_len)], "footer": frame_len + 1 }) u.dataIn._ag.data.extend( packAxiSFrame(dataWidth, v, withStrb=True) ) t = 20 if randomize: t *= 3 self.runMatrixSim2(t, dataWidth, frame_len, randomize) if not prefix_padding: off, f = axis_recieve_bytes(u.dataOut.frame0) self.assertEqual(off, 0) self.assertValSequenceEqual(f, [i + 1 for i in range(frame_len)]) if not suffix_padding: self.assertValSequenceEqual(u.dataOut.footer._ag.data, [frame_len + 1])