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)
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)), ))
def test_HTypeFromIntfMap_wrongArray(self): DATA_WIDTH = 32 with self.assertRaises(AssertionError): HTypeFromIntfMap( IntfMap([ ([sig("e", DATA_WIDTH), sig("e", 2 * DATA_WIDTH), ], "ds") ]))
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"), ))
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)
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)