Esempio n. 1
0
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
Esempio n. 2
0
    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])
Esempio n. 3
0
    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])