Example #1
0
 def test_frameHeader(self):
     DW = 64
     tmpl = TransTmpl(frameHeader)
     frames = FrameTmpl.framesFromTransTmpl(tmpl, DW)
     frames = list(frames)
     self.assertEqual(len(frames), 1)
     self.assertEqual(frameHeader_str, frames[0].__repr__())
Example #2
0
    def instantiateFrameForge(self, structT,
                              DATA_WIDTH=64,
                              maxFrameLen=inf,
                              maxPaddingWords=inf,
                              trimPaddingWordsOnStart=False,
                              trimPaddingWordsOnEnd=False,
                              randomized=True):
        tmpl = TransTmpl(structT)
        frames = list(FrameTmpl.framesFromTransTmpl(
                                     tmpl,
                                     DATA_WIDTH,
                                     maxFrameLen=maxFrameLen,
                                     maxPaddingWords=maxPaddingWords,
                                     trimPaddingWordsOnStart=trimPaddingWordsOnStart,
                                     trimPaddingWordsOnEnd=trimPaddingWordsOnEnd))
        u = self.u = AxiS_frameForge(structT,
                                     tmpl, frames)
        self.DATA_WIDTH = DATA_WIDTH
        self.m = mask(self.DATA_WIDTH // 8)
        u.DATA_WIDTH.set(self.DATA_WIDTH)

        self.prepareUnit(self.u)
        if randomized:
            self.randomize(u.dataOut)
            for intf in u.dataIn._fieldsToInterfaces.values():
                self.randomize(intf)
Example #3
0
 def _test(self, DW, t, ref_str):
     tmpl = TransTmpl(t)
     frames = FrameTmpl.framesFromTransTmpl(tmpl, DW)
     frames = list(frames)
     self.assertEqual(len(frames), len(ref_str))
     for f, ref in zip(frames, ref_str):
         self.assertEqual(repr(f), ref)
Example #4
0
 def test_sWithPadding(self):
     DW = 64
     tmpl = TransTmpl(sWithPadding)
     frames = FrameTmpl.framesFromTransTmpl(tmpl, DW)
     frames = list(frames)
     self.assertEqual(len(frames), 1)
     self.assertEqual(sWithPadding_str, frames[0].__repr__())
Example #5
0
 def test_frameHeader(self):
     DW = 64
     tmpl = TransTmpl(frameHeader)
     frames = FrameTmpl.framesFromTransTmpl(tmpl, DW)
     frames = list(frames)
     self.assertEqual(len(frames), 1)
     self.assertEqual(frameHeader_str, frames[0].__repr__())
Example #6
0
 def test_stream1_32(self):
     DW = 32
     tmpl = TransTmpl(stream0)
     frames = list(FrameTmpl.framesFromTransTmpl(tmpl, DW))
     self.assertEqual(len(frames), 1)
     s = frames[0].__repr__()
     self.assertEqual(stream1_32bit_str, s)
Example #7
0
 def test_union0at16b(self):
     DW = 16
     tmpl = TransTmpl(union0)
     frames = FrameTmpl.framesFromTransTmpl(tmpl, DW)
     frames = list(frames)
     self.assertEqual(len(frames), 1)
     self.assertEqual(repr(frames[0]), union0_16b_str)
Example #8
0
 def test_sWithPadding(self):
     DW = 64
     tmpl = TransTmpl(sWithPadding)
     frames = FrameTmpl.framesFromTransTmpl(tmpl, DW)
     frames = list(frames)
     self.assertEqual(len(frames), 1)
     self.assertEqual(sWithPadding_str, frames[0].__repr__())
Example #9
0
 def test_union0at16b(self):
     DW = 16
     tmpl = TransTmpl(union0)
     frames = FrameTmpl.framesFromTransTmpl(tmpl, DW)
     frames = list(frames)
     self.assertEqual(len(frames), 1)
     self.assertEqual(repr(frames[0]), union0_16b_str)
Example #10
0
 def test_basic_tripleFrame(self):
     DW = 64
     tmpl = TransTmpl(s_basic)
     frames = FrameTmpl.framesFromTransTmpl(tmpl, DW, maxFrameLen=64)
     frames = list(frames)
     self.assertEqual(len(frames), 3)
     for f, ref in zip(frames, s_basic_3frame_srt):
         self.assertEqual(repr(f), ref)
Example #11
0
 def test_basic_tripleFrame(self):
     DW = 64
     tmpl = TransTmpl(s_basic)
     frames = FrameTmpl.framesFromTransTmpl(tmpl, DW, maxFrameLen=64)
     frames = list(frames)
     self.assertEqual(len(frames), 3)
     for f, ref in zip(frames, s_basic_3frame_srt):
         self.assertEqual(repr(f), ref)
Example #12
0
    def parseTemplate(self):
        if self._tmpl is None:
            self._tmpl = TransTmpl(self._structT)

        if self._frames is None:
            DW = int(self.DATA_WIDTH)
            frames = FrameTmpl.framesFromTransTmpl(self._tmpl, DW)
            self._frames = list(frames)
Example #13
0
    def parseTemplate(self):
        if self._tmpl is None:
            self._tmpl = TransTmpl(self._structT)

        if self._frames is None:
            DW = int(self.DATA_WIDTH)
            frames = FrameTmpl.framesFromTransTmpl(self._tmpl,
                                                   DW)
            self._frames = list(frames)
Example #14
0
 def test_struct_with_union(self):
     DW = 64
     tmpl = TransTmpl(struct_with_union)
     frames = FrameTmpl.framesFromTransTmpl(
                 tmpl, DW,
                 )
     frames = list(frames)
     self.assertEqual(len(frames), 1)
     self.assertEqual(repr(frames[0]), struct_with_union_str)
Example #15
0
 def test_s2_oneFrame(self):
     DW = 64
     tmpl = TransTmpl(s2)
     frames = FrameTmpl.framesFromTransTmpl(
                 tmpl, DW,
                 )
     frames = list(frames)
     self.assertEqual(len(frames), 1)
     self.assertEqual(repr(frames[0]), s2_oneFrame)
Example #16
0
 def test_frameHeader_trimmed(self):
     DW = 64
     tmpl = TransTmpl(frameHeader)
     frames = FrameTmpl.framesFromTransTmpl(tmpl,
                                            DW,
                                            trimPaddingWordsOnStart=True,
                                            trimPaddingWordsOnEnd=True)
     frames = list(frames)
     self.assertEqual([f.__repr__() for f in frames], frameHeader_trimm_str)
Example #17
0
 def test_s2_oneFrame(self):
     DW = 64
     tmpl = TransTmpl(s2)
     frames = FrameTmpl.framesFromTransTmpl(
         tmpl,
         DW,
     )
     frames = list(frames)
     self.assertEqual(len(frames), 1)
     self.assertEqual(repr(frames[0]), s2_oneFrame)
Example #18
0
 def test_struct_with_union(self):
     DW = 64
     tmpl = TransTmpl(struct_with_union)
     frames = FrameTmpl.framesFromTransTmpl(
         tmpl,
         DW,
     )
     frames = list(frames)
     self.assertEqual(len(frames), 1)
     self.assertEqual(repr(frames[0]), struct_with_union_str)
Example #19
0
 def test_multiframe(self):
     tmpl = TransTmpl(s0)
     DATA_WIDTH = 64
     frames = list(
         FrameTmpl.framesFromTransTmpl(tmpl,
                                       DATA_WIDTH,
                                       maxPaddingWords=0,
                                       trimPaddingWordsOnStart=True,
                                       trimPaddingWordsOnEnd=True))
     u = StructReader(s0, tmpl=tmpl, frames=frames)
     self._test_s0(u)
Example #20
0
 def test_multiframe(self):
     tmpl = TransTmpl(s0)
     DATA_WIDTH = 64
     frames = list(FrameTmpl.framesFromTransTmpl(
                          tmpl,
                          DATA_WIDTH,
                          maxPaddingWords=0,
                          trimPaddingWordsOnStart=True,
                          trimPaddingWordsOnEnd=True))
     u = StructReader(s0, tmpl=tmpl, frames=frames)
     self._test_s0(u)
Example #21
0
 def test_s2_oneFrame_tryToTrim(self):
     DW = 64
     tmpl = TransTmpl(s2)
     frames = FrameTmpl.framesFromTransTmpl(tmpl,
                                            DW,
                                            maxPaddingWords=0,
                                            trimPaddingWordsOnStart=True,
                                            trimPaddingWordsOnEnd=True)
     frames = list(frames)
     self.assertEqual(len(frames), 1)
     self.assertEqual(repr(frames[0]), s2_oneFrame)
Example #22
0
 def test_sWithStartPaddingKept(self):
     DW = 64
     tmpl = TransTmpl(sWithStartPadding)
     frames = FrameTmpl.framesFromTransTmpl(
                 tmpl, DW,
                 maxPaddingWords=2,
                 trimPaddingWordsOnStart=True,
                 trimPaddingWordsOnEnd=True)
     frames = list(frames)
     self.assertEqual(len(frames), 1)
     self.assertEqual(sWithStartPadding_strKept, frames[0].__repr__())
Example #23
0
 def test_sWithStartPaddingKept(self):
     DW = 64
     tmpl = TransTmpl(sWithStartPadding)
     frames = FrameTmpl.framesFromTransTmpl(tmpl,
                                            DW,
                                            maxPaddingWords=2,
                                            trimPaddingWordsOnStart=True,
                                            trimPaddingWordsOnEnd=True)
     frames = list(frames)
     self.assertEqual(len(frames), 1)
     self.assertEqual(sWithStartPadding_strKept, frames[0].__repr__())
Example #24
0
    def parseTemplate(self):
        if self._tmpl is None:
            self._tmpl = TransTmpl(self._structT)
        if self._frames is None:
            DW = int(self.DATA_WIDTH)
            frames = FrameTmpl.framesFromTransTmpl(
                self._tmpl,
                DW,
                trimPaddingWordsOnStart=True,
                trimPaddingWordsOnEnd=True)

            self._frames = list(frames)
Example #25
0
 def test_s2_oneFrame_tryToTrim(self):
     DW = 64
     tmpl = TransTmpl(s2)
     frames = FrameTmpl.framesFromTransTmpl(
                 tmpl, DW,
                 maxPaddingWords=0,
                 trimPaddingWordsOnStart=True,
                 trimPaddingWordsOnEnd=True
                 )
     frames = list(frames)
     self.assertEqual(len(frames), 1)
     self.assertEqual(repr(frames[0]), s2_oneFrame)
Example #26
0
 def test_sWithPaddingMultiFrame(self):
     DW = 64
     tmpl = TransTmpl(sWithPadding)
     frames = FrameTmpl.framesFromTransTmpl(tmpl,
                                            DW,
                                            maxPaddingWords=0,
                                            trimPaddingWordsOnStart=True,
                                            trimPaddingWordsOnEnd=True)
     frames = list(frames)
     self.assertEqual(len(frames), 2)
     for frame, s in zip(frames, sWithPaddingMultiframe_str):
         self.assertEqual(s, frame.__repr__())
Example #27
0
    def parseTemplate(self):
        if self._tmpl is None:
            self._tmpl = TransTmpl(self._structT)
        if self._frames is None:
            DW = int(self.DATA_WIDTH)
            frames = FrameTmpl.framesFromTransTmpl(
                        self._tmpl,
                        DW,
                        trimPaddingWordsOnStart=True,
                        trimPaddingWordsOnEnd=True)

            self._frames = list(frames)
Example #28
0
 def test_sWithPaddingMultiFrame(self):
     DW = 64
     tmpl = TransTmpl(sWithPadding)
     frames = FrameTmpl.framesFromTransTmpl(
                 tmpl,
                 DW,
                 maxPaddingWords=0,
                 trimPaddingWordsOnStart=True,
                 trimPaddingWordsOnEnd=True)
     frames = list(frames)
     self.assertEqual(len(frames), 2)
     for frame, s in zip(frames, sWithPaddingMultiframe_str):
         self.assertEqual(s, frame.__repr__())
Example #29
0
 def test_frameHeader_splited(self):
     DW = 64
     tmpl = TransTmpl(frameHeader)
     frames = FrameTmpl.framesFromTransTmpl(
                 tmpl, DW,
                 maxPaddingWords=0,
                 trimPaddingWordsOnStart=True,
                 trimPaddingWordsOnEnd=True
                 )
     frames = list(frames)
     self.assertEqual(len(frames), 2)
     for frame, s, end in zip(frames, frameHeader_split_str, [2 * DW, 5 * DW]):
         self.assertEqual(s, frame.__repr__())
         self.assertEqual(frame.endBitAddr, end)
Example #30
0
 def test_frameHeader_splited(self):
     DW = 64
     tmpl = TransTmpl(frameHeader)
     frames = FrameTmpl.framesFromTransTmpl(tmpl,
                                            DW,
                                            maxPaddingWords=0,
                                            trimPaddingWordsOnStart=True,
                                            trimPaddingWordsOnEnd=True)
     frames = list(frames)
     self.assertEqual(len(frames), 2)
     for frame, s, end in zip(frames, frameHeader_split_str,
                              [2 * DW, 5 * DW]):
         self.assertEqual(s, frame.__repr__())
         self.assertEqual(frame.endBitAddr, end)
Example #31
0
    def test_simpleOp(self):
        DW = 64
        AW = 32

        u = EthAddrUpdater()
        u.DATA_WIDTH.set(DW)
        u.ADDR_WIDTH.set(AW)

        self.prepareUnit(u)

        r = self.randomize
        r(u.axi_m.ar)
        r(u.axi_m.r)
        r(u.axi_m.aw)
        r(u.axi_m.w)
        r(u.axi_m.b)

        m = Axi3DenseMem(u.clk, u.axi_m)
        tmpl = TransTmpl(frameHeader)
        frameTmpl = list(FrameTmpl.framesFromTransTmpl(tmpl, DW))[0]

        def randFrame():
            rand = self._rand.getrandbits
            data = {
                "eth": {
                    "src": rand(48),
                    "dst": rand(48)
                },
                "ipv4": {
                    "src": rand(32),
                    "dst": rand(32)
                }
            }
            d = list(frameTmpl.packData(data))
            ptr = m.calloc(ceil(frameHeader.bit_length() / DW),
                           DW // 8,
                           initValues=d)
            return ptr, data

        framePtr, frameData = randFrame()

        u.packetAddr._ag.data.append(framePtr)

        self.runSim(1000 * Time.ns)
        updatedFrame = m.getStruct(framePtr, tmpl)
        self.assertValEqual(updatedFrame.eth.src, frameData["eth"]['dst'])
        self.assertValEqual(updatedFrame.eth.dst, frameData["eth"]['src'])
        self.assertValEqual(updatedFrame.ipv4.src, frameData["ipv4"]['dst'])
        self.assertValEqual(updatedFrame.ipv4.dst, frameData["ipv4"]['src'])
Example #32
0
    def test_simpleOp(self):
        DW = 64
        AW = 32

        u = EthAddrUpdater()
        u.DATA_WIDTH.set(DW)
        u.ADDR_WIDTH.set(AW)

        self.prepareUnit(u)

        r = self.randomize
        r(u.axi_m.ar)
        r(u.axi_m.r)
        r(u.axi_m.aw)
        r(u.axi_m.w)
        r(u.axi_m.b)

        m = Axi3DenseMem(u.clk, u.axi_m)
        tmpl = TransTmpl(frameHeader)
        frameTmpl = list(FrameTmpl.framesFromTransTmpl(tmpl, DW))[0]

        def randFrame():
            rand = self._rand.getrandbits
            data = {"eth": {"src": rand(48),
                            "dst": rand(48)
                            },
                    "ipv4": {"src": rand(32),
                             "dst": rand(32)
                            }
                    }
            d = list(frameTmpl.packData(data))
            ptr = m.calloc(ceil(frameHeader.bit_length() / DW),
                           DW // 8,
                           initValues=d)
            return ptr, data

        framePtr, frameData = randFrame()

        u.packetAddr._ag.data.append(framePtr)

        self.runSim(1000 * Time.ns)
        updatedFrame = m.getStruct(framePtr, tmpl)
        self.assertValEqual(updatedFrame.eth.src, frameData["eth"]['dst'])
        self.assertValEqual(updatedFrame.eth.dst, frameData["eth"]['src'])
        self.assertValEqual(updatedFrame.ipv4.src, frameData["ipv4"]['dst'])
        self.assertValEqual(updatedFrame.ipv4.dst, frameData["ipv4"]['src'])
Example #33
0
    def test_simpleOp(self):
        DW = self.DW
        u = self.u
        r = self.randomize
        r(u.axi_m.ar)
        r(u.axi_m.r)
        r(u.axi_m.aw)
        r(u.axi_m.w)
        r(u.axi_m.b)

        m = AxiSimRam(u.axi_m)
        tmpl = TransTmpl(frameHeader)
        frameTmpl = list(FrameTmpl.framesFromTransTmpl(tmpl, DW))[0]

        def randFrame():
            rand = self._rand.getrandbits
            data = {
                "eth": {
                    "src": rand(48),
                    "dst": rand(48),
                },
                "ipv4": {
                    "src": rand(32),
                    "dst": rand(32),
                }
            }
            d = list(frameTmpl.packData(data))
            ptr = m.calloc(
                ceil(frameHeader.bit_length() / DW),
                DW // 8,
                initValues=d,
                keepOut=self.OFFSET,
            )
            return ptr, data

        framePtr, frameData = randFrame()
        u.packetAddr._ag.data.append(framePtr)

        self.runSim(100 * CLK_PERIOD)
        updatedFrame = m.getStruct(framePtr, tmpl)
        self.assertValEqual(updatedFrame.eth.src, frameData["eth"]['dst'])
        self.assertValEqual(updatedFrame.eth.dst, frameData["eth"]['src'])
        self.assertValEqual(updatedFrame.ipv4.src, frameData["ipv4"]['dst'])
        self.assertValEqual(updatedFrame.ipv4.dst, frameData["ipv4"]['src'])
Example #34
0
    def test_s2Pading_spliting(self):
        structT = s2Pading
        self.DATA_WIDTH = 64
        tmpl = TransTmpl(structT)
        frames = list(FrameTmpl.framesFromTransTmpl(
                                     tmpl,
                                     self.DATA_WIDTH,
                                     maxPaddingWords=0,
                                     trimPaddingWordsOnStart=True,
                                     trimPaddingWordsOnEnd=True))
        u = self.u = AxiS_frameForge(structT,
                                     tmpl, frames)
        u.DATA_WIDTH.set(self.DATA_WIDTH)
        m = mask(self.DATA_WIDTH // 8)
        self.prepareUnit(self.u)

        def enDataOut(s):
            u.dataOut._ag.enable = False
            yield s.wait(50 * Time.ns)
            u.dataOut._ag.enable = True

        self.procs.append(enDataOut)

        MAGIC = 468
        u.dataIn.item0_0._ag.data.append(MAGIC)
        u.dataIn.item0_1._ag.data.append(MAGIC + 1)
        u.dataIn.item1_0._ag.data.append(MAGIC + 2)
        u.dataIn.item1_1._ag.data.append(MAGIC + 3)

        t = 200
        self.runSim(t * Time.ns)

        self.assertValSequenceEqual(u.dataOut._ag.data,
                                    [(MAGIC, m, 0),
                                     (MAGIC + 1, m, 1),
                                     (MAGIC + 2, m, 0),
                                     (MAGIC + 3, m, 1),
                                     ])
Example #35
0
    def instantiate(self,
                    structT,
                    DATA_WIDTH=64,
                    maxFrameLen=inf,
                    maxPaddingWords=inf,
                    trimPaddingWordsOnStart=False,
                    trimPaddingWordsOnEnd=False,
                    randomized=True,
                    use_strb=False,
                    use_keep=True):
        if maxFrameLen is not inf\
                or maxPaddingWords is not inf\
                or trimPaddingWordsOnStart is not False\
                or trimPaddingWordsOnEnd is not False:
            tmpl = TransTmpl(structT)
            frames = list(
                FrameTmpl.framesFromTransTmpl(
                    tmpl,
                    DATA_WIDTH,
                    maxFrameLen=maxFrameLen,
                    maxPaddingWords=maxPaddingWords,
                    trimPaddingWordsOnStart=trimPaddingWordsOnStart,
                    trimPaddingWordsOnEnd=trimPaddingWordsOnEnd))
        else:
            tmpl = None
            frames = None

        u = self.u = AxiS_frameDeparser(structT, tmpl, frames)
        u.DATA_WIDTH = self.DATA_WIDTH = DATA_WIDTH
        u.USE_STRB = use_strb
        u.USE_KEEP = use_keep
        self.m = mask(self.DATA_WIDTH // 8)

        self.compileSimAndStart(self.u)
        if randomized:
            self.randomize(u.dataOut)
            for intf in u.dataIn._fieldsToInterfaces.values():
                self.randomize(intf)
Example #36
0
 def test_s0at71bit(self):
     DW = 71
     tmpl = TransTmpl(s0)
     frames = list(FrameTmpl.framesFromTransTmpl(tmpl, DW))
     self.assertEqual(len(frames), 1)
     self.assertEqual(s0at71bit_str, frames[0].__repr__(scale=2))
Example #37
0
 def test_stream0(self):
     DW = 8
     tmpl = TransTmpl(stream0)
     frames = list(FrameTmpl.framesFromTransTmpl(tmpl, DW))
     self.assertEqual(len(frames), 1)
     self.assertEqual(stream0_8bit_str, frames[0].__repr__())
Example #38
0
 def test_s1at64(self):
     DW = 64
     tmpl = TransTmpl(s1)
     frames = list(FrameTmpl.framesFromTransTmpl(tmpl, DW))
     self.assertEqual(len(frames), 1)
     self.assertEqual(s1_str, frames[0].__repr__())
Example #39
0
    def _parseTemplate(self):
        self.WORD_ADDR_STEP = self._getWordAddrStep()
        self.ADDR_STEP = self._getAddrStep()

        AW = int(self.ADDR_WIDTH)
        SUGGESTED_AW = self._suggestedAddrWidth()
        assert SUGGESTED_AW <= AW, ("Address width too small", SUGGESTED_AW,
                                    AW)
        tmpl = TransTmpl(self.STRUCT_TEMPLATE)

        self._ADDR_MIN = TransTmpl_get_min_addr(tmpl) // self.ADDR_STEP
        self._ADDR_MAX = ceil(TransTmpl_get_max_addr(tmpl) / self.ADDR_STEP)

        # resolve addresses for bram port mapped fields
        self._bramPortMapped = []

        def shouldEnterFn(trans_tmpl: TransTmpl):
            p = trans_tmpl.getFieldPath()
            intf = self.decoded._fieldsToInterfaces[p]
            if isinstance(intf,
                          (StructIntf, UnionSink, UnionSource, HObjList)):
                shouldEnter = True
                shouldUse = False
            elif isinstance(intf, BramPort_withoutClk):
                shouldEnter = False
                shouldUse = True
            else:
                shouldEnter = False
                shouldUse = False

            return shouldEnter, shouldUse

        for ((base, end), t) in tmpl.walkFlatten(shouldEnterFn=shouldEnterFn):
            self._bramPortMapped.append(((base, end), t))

        # resolve exact addresses for directly mapped field parts
        directly_mapped_fields = {}
        for p, out in self.decoded._fieldsToInterfaces.items():
            if not isinstance(out, (RegCntrl, Signal)):
                continue
            a = directly_mapped_fields
            for _p in p:
                if isinstance(_p, int) and _p != 0:
                    # we need spec only for first array item
                    break
                a = a.setdefault(_p, {})

        dmw = self._directly_mapped_words = []
        if directly_mapped_fields:
            DW = self.DATA_WIDTH
            directly_mapped_t = HdlType_select(self.STRUCT_TEMPLATE,
                                               directly_mapped_fields)
            tmpl = TransTmpl(directly_mapped_t)

            frames = list(
                FrameTmpl.framesFromTransTmpl(
                    tmpl,
                    DW,
                    maxPaddingWords=0,
                    trimPaddingWordsOnStart=True,
                    trimPaddingWordsOnEnd=True,
                ))

            for f in frames:
                f_word_offset = f.startBitAddr // DW
                for (w_i, items) in f.walkWords(showPadding=True):
                    dmw.append((w_i + f_word_offset, items))
Example #40
0
 def test_s0at71bit(self):
     DW = 71
     tmpl = TransTmpl(s0)
     frames = list(FrameTmpl.framesFromTransTmpl(tmpl, DW))
     self.assertEqual(len(frames), 1)
     self.assertEqual(s0at71bit_str, frames[0].__repr__(scale=2))
Example #41
0
 def test_s1at64(self):
     DW = 64
     tmpl = TransTmpl(s1)
     frames = list(FrameTmpl.framesFromTransTmpl(tmpl, DW))
     self.assertEqual(len(frames), 1)
     self.assertEqual(s1_str, frames[0].__repr__())