示例#1
0
    def check_consystency(self, u):
        synthesised(u)
        c = u._ctx
        for s in c.signals:
            for e in s.endpoints:
                if isinstance(e, HdlStatement):
                    self.assertIs(e.parentStm, None, (s, e))
                    self.assertIn(e, c.statements)
            for d in s.drivers:
                if isinstance(d, HdlStatement):
                    self.assertIs(d.parentStm, None, (s, d))
                    self.assertIn(d, c.statements)

        for stm in c.statements:
            self.assertIs(stm.parentStm, None)
示例#2
0
    def test_SimpleUnit2(self):
        from hwtLib.examples.simpleAxiStream import SimpleUnitAxiStream
        u = SimpleUnitAxiStream()
        u._loadDeclarations()

        def ex(i):
            return self.assertTrue(i._isExtern)

        ex(u.a)
        ex(u.a.data)
        ex(u.a.last)
        ex(u.a.ready)
        ex(u.a.strb)
        ex(u.a.valid)
        ex(u.b)
        ex(u.b.data)
        ex(u.b.last)
        ex(u.b.ready)
        ex(u.b.strb)
        ex(u.b.valid)

        u = synthesised(u)

        for pn in ['a_data', 'a_last', 'a_strb', 'a_valid', 'b_ready']:
            self.assertDirIn(u, pn)
        for pn in ['a_ready', 'b_data', 'b_last', 'b_strb', 'b_valid']:
            self.assertDirOut(u, pn)
示例#3
0
    def test_SimpleUnit2(self):
        from hwtLib.examples.simpleAxiStream import SimpleUnitAxiStream
        u = SimpleUnitAxiStream()
        u._loadDeclarations()

        def ex(i): return self.assertTrue(i._isExtern)

        ex(u.a)
        ex(u.a.data)
        ex(u.a.last)
        ex(u.a.ready)
        ex(u.a.strb)
        ex(u.a.valid)
        ex(u.b)
        ex(u.b.data)
        ex(u.b.last)
        ex(u.b.ready)
        ex(u.b.strb)
        ex(u.b.valid)

        u = synthesised(u)

        for pn in ['a_data', 'a_last', 'a_strb', 'a_valid', 'b_ready']:
            self.assertDirIn(u, pn)
        for pn in ['a_ready', 'b_data', 'b_last', 'b_strb', 'b_valid']:
            self.assertDirOut(u, pn)
示例#4
0
    def test_SimpleSubUnit2(self):
        from hwtLib.examples.hierarchy.simpleSubunit2 import SimpleSubunit2
        u = SimpleSubunit2()
        u = synthesised(u)

        for pn in ['a0_data', 'a0_last', 'a0_strb', 'a0_valid', 'b0_ready']:
            self.assertDirIn(u, pn)
        for pn in ['a0_ready', 'b0_data', 'b0_last', 'b0_strb', 'b0_valid']:
            self.assertDirOut(u, pn)
示例#5
0
    def test_SimpleSubUnit2(self):
        from hwtLib.examples.hierarchy.simpleSubunit2 import SimpleSubunit2
        u = SimpleSubunit2()
        u = synthesised(u)

        for pn in ['a0_data', 'a0_last', 'a0_strb', 'a0_valid', 'b0_ready']:
            self.assertDirIn(u, pn)
        for pn in ['a0_ready', 'b0_data', 'b0_last', 'b0_strb', 'b0_valid']:
            self.assertDirOut(u, pn)
示例#6
0
    def test_EmptyUnit(self):
        class Eu(EmptyUnit):
            def _declr(self):
                self.a = Signal()
                self.b = Signal()._m()

        u = Eu()
        u = synthesised(u)

        e = u._ctx.ent
        a = self.getPort(e, 'a')
        b = self.getPort(e, 'b')
        self.assertEqual(a.direction, D.IN)
        self.assertEqual(b.direction, D.OUT)
示例#7
0
    def test_EmptyUnit(self):
        class Eu(EmptyUnit):
            def _declr(self):
                self.a = Signal()
                self.b = Signal()._m()

        u = Eu()
        u = synthesised(u)

        e = u._entity
        a = self.getPort(e, 'a')
        b = self.getPort(e, 'b')
        self.assertEqual(a.direction, D.IN)
        self.assertEqual(b.direction, D.OUT)
示例#8
0
    def test_SimpleUnit2_iLvl(self):
        """
        Check interface directions pre and after synthesis
        """
        from hwtLib.examples.simpleAxiStream import SimpleUnitAxiStream
        u = SimpleUnitAxiStream()
        u._loadDeclarations()
        m = self.assertIsM
        s = self.assertIsS

        # u.a._resolveDirections()
        # u.b._resolveDirections()
        #
        #
        # # inside
        # m(u.a)
        # m(u.a.data)
        # m(u.a.last)
        # s(u.a.ready)
        # m(u.a.valid)
        # m(u.a.strb)
        #
        # # inside
        # m(u.b)
        # m(u.b.data)
        # m(u.b.last)
        # s(u.b.ready)
        # m(u.b.valid)
        # m(u.b.strb)

        u = synthesised(u)

        # outside
        s(u.a)
        s(u.a.data)
        s(u.a.last)
        m(u.a.ready)
        s(u.a.valid)
        s(u.a.strb)

        m(u.b)
        m(u.b.data)
        m(u.b.last)
        s(u.b.ready)
        m(u.b.valid)
        m(u.b.strb)
示例#9
0
    def test_SimpleUnit2_iLvl(self):
        """
        Check interface directions pre and after synthesis
        """
        from hwtLib.examples.simpleAxiStream import SimpleUnitAxiStream
        u = SimpleUnitAxiStream()
        u._loadDeclarations()
        m = self.assertIsM
        s = self.assertIsS

        # u.a._resolveDirections()
        # u.b._resolveDirections()
        #
        #
        # # inside
        # m(u.a)
        # m(u.a.data)
        # m(u.a.last)
        # s(u.a.ready)
        # m(u.a.valid)
        # m(u.a.strb)
        #
        # # inside
        # m(u.b)
        # m(u.b.data)
        # m(u.b.last)
        # s(u.b.ready)
        # m(u.b.valid)
        # m(u.b.strb)

        u = synthesised(u)

        # outside
        s(u.a)
        s(u.a.data)
        s(u.a.last)
        m(u.a.ready)
        s(u.a.valid)
        s(u.a.strb)

        m(u.b)
        m(u.b.data)
        m(u.b.last)
        s(u.b.ready)
        m(u.b.valid)
        m(u.b.strb)
示例#10
0
    def test_signalInstances(self):
        from hwtLib.examples.simple import SimpleUnit
        bram = SimpleUnit()
        bram = synthesised(bram)

        self.assertIsNot(bram.a, bram.b, 'instances are properly instantiated')

        port_a = list(where(bram._ctx.ent.ports, lambda x: x.name == "a"))
        port_b = list(where(bram._ctx.ent.ports, lambda x: x.name == "b"))

        self.assertEqual(len(port_a), 1, 'entity has single port a')
        port_a = port_a[0]
        self.assertEqual(len(port_b), 1, 'entity has single port b')
        port_b = port_b[0]

        self.assertEqual(len(bram._ctx.ent.ports), 2,
                         'entity has right number of ports')

        self.assertEqual(port_a.direction, D.IN,
                         'port a has src that means it should be input')
        self.assertEqual(port_b.direction, D.OUT,
                         'port b has no src that means it should be output')
示例#11
0
    def test_signalInstances(self):
        from hwtLib.examples.simple import SimpleUnit
        bram = SimpleUnit()
        bram = synthesised(bram)

        self.assertIsNot(bram.a, bram.b, 'instances are properly instantiated')

        port_a = list(where(bram._entity.ports, lambda x: x.name == "a"))
        port_b = list(where(bram._entity.ports, lambda x: x.name == "b"))

        self.assertEqual(len(port_a), 1, 'entity has single port a')
        port_a = port_a[0]
        self.assertEqual(len(port_b), 1, 'entity has single port b')
        port_b = port_b[0]

        self.assertEqual(len(bram._entity.ports), 2,
                         'entity has right number of ports')

        self.assertEqual(port_a.direction, D.IN,
                         'port a has src that means it should be input')
        self.assertEqual(port_b.direction, D.OUT,
                         'port b has no src that means it should be output')
示例#12
0
    def test_EmptyUnitWithCompositePort(self):
        class Dummy(EmptyUnit):
            def _declr(self):
                self.a = Axi4()
                self.b = Axi4()._m()

        u = Dummy()

        u = synthesised(u)
        self.assertTrue(u.a.ar.addr._isExtern)
        e = u._ctx.ent

        a_ar_addr = self.getPort(e, 'a_ar_addr')
        self.assertEqual(a_ar_addr.direction, D.IN)

        a_ar_ready = self.getPort(e, 'a_ar_ready')
        self.assertEqual(a_ar_ready.direction, D.OUT)

        b_ar_addr = self.getPort(e, 'b_ar_addr')
        self.assertEqual(b_ar_addr.direction, D.OUT)

        b_ar_ready = self.getPort(e, "b_ar_ready")
        self.assertEqual(b_ar_ready.direction, D.IN)
示例#13
0
    def test_EmptyUnitWithCompositePort(self):
        class Dummy(EmptyUnit):
            def _declr(self):
                self.a = Axi4()
                self.b = Axi4()._m()


        u = Dummy()

        u = synthesised(u)
        self.assertTrue(u.a.ar.addr._isExtern)
        e = u._entity

        a_ar_addr = self.getPort(e, 'a_ar_addr')
        self.assertEqual(a_ar_addr.direction, D.IN)

        a_ar_ready = self.getPort(e, 'a_ar_ready')
        self.assertEqual(a_ar_ready.direction, D.OUT)

        b_ar_addr = self.getPort(e, 'b_ar_addr')
        self.assertEqual(b_ar_addr.direction, D.OUT)

        b_ar_ready = self.getPort(e, "b_ar_ready")
        self.assertEqual(b_ar_ready.direction, D.IN)