Example #1
0
    def test_HTypeFromIntfMap_ArrayOfStructs(self):
        DATA_WIDTH = 32

        t = HTypeFromIntfMap(
            IntfMap([
                regCntr("a", DATA_WIDTH),
                (Bits(4 * DATA_WIDTH), None),
                ([IntfMap([
                    vldSynced("c", DATA_WIDTH),
                    vldSynced("d", DATA_WIDTH)
                ]) for _ in range(4)], "ds")
            ]))

        _t = Bits(DATA_WIDTH)
        _t2 = HStruct(
                (_t, "c"),
                (_t, "d")
            )
        t2 = HStruct(
                (_t, "a"),
                (Bits(4 * DATA_WIDTH), None),
                (_t2[4], "ds", HStructFieldMeta(split=True)),
            )

        self.assertEqual(t, t2)
Example #2
0
    def test_HTypeFromIntfMap_StructArray(self):
        DATA_WIDTH = 32

        t = HTypeFromIntfMap(
            IntfMap([
                regCntr("a", DATA_WIDTH),
                (Bits(4 * DATA_WIDTH), None),
                ([
                    IntfMap([
                        vldSynced("d", DATA_WIDTH),
                        sig("e", DATA_WIDTH),
                        (Bits(DATA_WIDTH * 2), None),
                        sig("f", DATA_WIDTH),
                    ]) for _ in range(4)], "ds")
            ]))
    
        _t = Bits(DATA_WIDTH)
        self.assertEqual(t,
             HStruct(
                (_t, "a"),
                (Bits(4 * DATA_WIDTH), None),
                (HStruct(
                    (_t, "d"),
                    (_t, "e"),
                    (Bits(2 * DATA_WIDTH), None),
                    (_t, "f"),
                    )[4], "ds", HStructFieldMeta(split=True)),
            ))
Example #3
0
 def test_HTypeFromIntfMap_wrongArray(self):
     DATA_WIDTH = 32
     with self.assertRaises(AssertionError):
         HTypeFromIntfMap(
             IntfMap([
                 ([sig("e", DATA_WIDTH),
                   sig("e", 2 * DATA_WIDTH),
                    ], "ds")
             ]))
Example #4
0
    def test_HTypeFromIntfMap_Struct(self):
        DATA_WIDTH = 32

        t = HTypeFromIntfMap(
            IntfMap([
                    regCntr("a", DATA_WIDTH),
                    regCntr("b", DATA_WIDTH),
                    sig("c", DATA_WIDTH),
                    vldSynced("d", DATA_WIDTH),
            ]))

        _t = Bits(DATA_WIDTH)
        self.assertEqual(t, HStruct(
                (_t, "a"),
                (_t, "b"),
                (_t, "c"),
                (_t, "d"),
            ))
Example #5
0
    def fromInterfaceMap(cls, interfaceMap):
        """
        Generate converter by specified struct

        :param interfaceMap: take a look at HTypeFromIntfMap
            if interface is specified it will be automatically connected
        """
        t = HTypeFromIntfMap(interfaceMap)

        def shouldEnter(field):
            if field.meta is None:
                shouldEnter = False
            else:
                shouldEnter = field.meta.split

            shouldYield = not shouldEnter
            return shouldEnter, shouldYield

        # instantiate converter
        return cls(t, shouldEnterFn=shouldEnter)
Example #6
0
    def test_HTypeFromIntfMap_Padding(self):
        DATA_WIDTH = 32

        t = HTypeFromIntfMap(
            IntfMap([
                regCntr("a", DATA_WIDTH),
                regCntr("b", DATA_WIDTH),
                sig("c", DATA_WIDTH),
                (Bits(4 * DATA_WIDTH), None),
                vldSynced("d", DATA_WIDTH),
            ]))
        _t = Bits(DATA_WIDTH)
        t2 = HStruct(
                (_t, "a"),
                (_t, "b"),
                (_t, "c"),
                (Bits(4 * DATA_WIDTH), None),
                (_t, "d"),
            )

        self.assertEqual(t, t2)