Exemple #1
0
def IndexOps():
    t = Bits(8)
    n = RtlNetlist()

    s_in = n.sig("s_in", t)
    s_out = n.sig("s_out", t)

    s_in2 = n.sig("s_in2", t)
    s_out2 = n.sig("s_out2", t)

    s_in3 = n.sig("s_in3", Bits(16))
    s_out3 = n.sig("s_out3", t)

    s_in4a = n.sig("s_in4a", t)
    s_in4b = n.sig("s_in4b", t)

    s_out4 = n.sig("s_out4", Bits(16))

    s_out(s_in[4:]._concat(vec(2, 4)))

    s_out2[4:](s_in2[4:])
    s_out2[:4](s_in2[:4])

    s_out3(s_in3[8:])

    s_out4[8:](s_in4a)
    s_out4[(8 + 8):8](s_in4b)

    interf = [
        s_in, s_out, s_in2, s_out2, s_in3, s_out3, s_in4a, s_in4b, s_out4
    ]

    return n, interf
Exemple #2
0
    def test_RtlSignal(self):
        ctx = RtlNetlist()
        a = ctx.sig("a", uint8_t)
        b = ctx.sig("b", uint8_t)
        ae = self.ae
        ae(a, "a")
        ae(b, "b")
        ae(~a, "~a")
        c = ctx.sig("c", int8_t)
        ae(-c, "-c")
        ae(a + b, "a + b")
        ae(a - b, "a - b")
        ae(a // b, "a // b")
        ae(a * b, "a * b")
        ae(a._eq(b), "a._eq(b)")
        ae(a != b, "a != b")
        ae(a > b, "a > b")
        ae(a >= b, "a >= b")
        ae(a <= b, "a <= b")
        ae(a < b, "a < b")

        d = ctx.sig("d", Bits(8))
        ae(d[1:0], "d[1:0]")
        ae(d << 1, "Concat(d[7:0], Bits(1).from_py(0))")
        ae(d >> 1, "Concat(Bits(1).from_py(0), d[8:1])")
Exemple #3
0
    def __init__(self):
        self._parent = None
        self._checkIntferfaces = True
        self._lazyLoaded = []
        self._cntx = RtlNetlist(self)

        self._loadConfig()
Exemple #4
0
 def test_SwitchContainer_try_reduce__empty(self):
     nl = RtlNetlist()
     a = nl.sig("a", BIT)
     s0 = Switch(a).add_cases([(hBit(0), []), (hBit(1), [])])
     s0_red, io_change = s0._try_reduce()
     self.assertFalse(io_change)
     self.assertEqual(s0_red, [])
Exemple #5
0
 def __init__(self):
     self._parent = None
     self._name = None
     self._shared_component_with = None
     self._hdl_module_name = None
     self._lazy_loaded = []
     self._ctx = RtlNetlist(self)
     self._constraints = HdlConstraintList()
     self._loadConfig()
Exemple #6
0
def SimpleWhile():
    t = Bits(8)
    n = RtlNetlist()

    boundary = n.sig("boundary", t, def_val=8)
    s_out = n.sig("s_out", t)

    start = n.sig("start")
    en = n.sig("en")

    clk = n.sig("clk")
    syncRst = n.sig("rst")

    counter = n.sig("counter", t, clk, syncRst, 0)
    If(start, counter(boundary)).Elif(en, counter(counter - 1))

    s_out(counter)

    interf = {
        clk: DIRECTION.IN,
        syncRst: DIRECTION.IN,
        start: DIRECTION.IN,
        en: DIRECTION.IN,
        s_out: DIRECTION.OUT
    }
    return n, interf
Exemple #7
0
def IndexOps():
    t = Bits(8)
    n = RtlNetlist()

    s_in = n.sig("s_in", t)
    s_out = n.sig("s_out", t)

    s_in2 = n.sig("s_in2", t)
    s_out2 = n.sig("s_out2", t)

    s_in3 = n.sig("s_in3", Bits(16))
    s_out3 = n.sig("s_out3", t)

    s_in4a = n.sig("s_in4a", t)
    s_in4b = n.sig("s_in4b", t)

    s_out4 = n.sig("s_out4", Bits(16))

    s_out(s_in[4:]._concat(vec(2, 4)))

    s_out2[4:](s_in2[4:])
    s_out2[:4](s_in2[:4])

    s_out3(s_in3[8:])

    s_out4[8:](s_in4a)
    s_out4[(8 + 8):8](s_in4b)

    interf = [s_in, s_out, s_in2, s_out2, s_in3, s_out3, s_in4a, s_in4b, s_out4]

    return n, interf
Exemple #8
0
def SwitchStatement():
    t = Bits(8)
    n = RtlNetlist()

    In = n.sig("input", t, defVal=8)
    Out = n.sig("output", t)

    Switch(In).addCases([(i, Out(i + 1)) for i in range(8)])

    interf = [In, Out]
    return n, interf
Exemple #9
0
    def test_slice_bits_sig(self):
        n = RtlNetlist()
        sig = n.sig("sig", uint8_t, defVal=128)

        with self.assertRaises(IndexError):
            self.assertEqual(sig[8], hBit(1))

        self.assertEqual(sig[7], hBit(1))
        self.assertStrEq(sig[7], "sig(7)")

        self.assertEqual(sig[1], hBit(0))
        self.assertStrEq(sig[1], "sig(1)")

        self.assertEqual(sig[0], hBit(0))
        self.assertStrEq(sig[0], "sig(0)")

        with self.assertRaises(IndexError):
            self.assertEqual(sig[-1], hBit(0))

        with self.assertRaises(IndexError):
            self.assertEqual(sig[9:-1], hBit(0))

        with self.assertRaises(IndexError):
            self.assertEqual(sig[9:], hBit(0))

        with self.assertRaises(IndexError):
            self.assertEqual(sig[9:0], hBit(0))

        with self.assertRaises(IndexError):
            self.assertEqual(sig[0:], hBit(0))

        with self.assertRaises(IndexError):
            self.assertEqual(sig[0:0], hBit(0))

        self.assertEqual(sig[8:], sig)
        self.assertStrEq(sig[8:], "sig")

        self.assertEqual(sig[8:0], sig)
        self.assertStrEq(sig[8:0], "sig")

        self.assertEqual(sig[:0], sig)
        self.assertStrEq(sig[:0], "sig")

        self.assertEqual(sig[:1], vec(64, 7))
        self.assertStrEq(sig[:1], "sig(7DOWNTO1)")

        self.assertEqual(sig[:2], vec(32, 6))
        self.assertStrEq(sig[:2], "sig(7DOWNTO2)")

        self.assertEqual(sig[:7], vec(1, 1))
        self.assertStrEq(sig[:7], "sig(7DOWNTO7)")

        self.assertEqual(sig[7:6], vec(0, 1))
        self.assertStrEq(sig[7:6], "sig(6DOWNTO6)")
Exemple #10
0
def SwitchStatement():
    t = Bits(8)
    n = RtlNetlist()

    In = n.sig("input", t, def_val=8)
    Out = n.sig("output", t)

    Switch(In).add_cases([(i, Out(i + 1)) for i in range(8)])

    interf = {In: DIRECTION.IN, Out: DIRECTION.OUT}
    return n, interf
Exemple #11
0
    def test_slice_bits_sig(self):
        n = RtlNetlist()
        sig = n.sig("sig", uint8_t, defVal=128)

        with self.assertRaises(IndexError):
            self.assertEqual(sig[8], hBit(1))

        self.assertEqual(sig[7], hBit(1))
        self.assertStrEq(sig[7], "sig(7)")

        self.assertEqual(sig[1], hBit(0))
        self.assertStrEq(sig[1], "sig(1)")

        self.assertEqual(sig[0], hBit(0))
        self.assertStrEq(sig[0], "sig(0)")

        with self.assertRaises(IndexError):
            self.assertEqual(sig[-1], hBit(0))

        with self.assertRaises(IndexError):
            self.assertEqual(sig[9:-1], hBit(0))

        with self.assertRaises(IndexError):
            self.assertEqual(sig[9:], hBit(0))

        with self.assertRaises(IndexError):
            self.assertEqual(sig[9:0], hBit(0))

        with self.assertRaises(IndexError):
            self.assertEqual(sig[0:], hBit(0))

        with self.assertRaises(IndexError):
            self.assertEqual(sig[0:0], hBit(0))

        self.assertEqual(sig[8:], sig)
        self.assertStrEq(sig[8:], "sig")

        self.assertEqual(sig[8:0], sig)
        self.assertStrEq(sig[8:0], "sig")

        self.assertEqual(sig[:0], sig)
        self.assertStrEq(sig[:0], "sig")

        self.assertEqual(sig[:1], vec(64, 7))
        self.assertStrEq(sig[:1], "sig(7DOWNTO1)")

        self.assertEqual(sig[:2], vec(32, 6))
        self.assertStrEq(sig[:2], "sig(7DOWNTO2)")

        self.assertEqual(sig[:7], vec(1, 1))
        self.assertStrEq(sig[:7], "sig(7DOWNTO7)")

        self.assertEqual(sig[7:6], vec(0, 1))
        self.assertStrEq(sig[7:6], "sig(6DOWNTO6)")
Exemple #12
0
 def test_SwitchContainer_try_reduce__all(self):
     nl = RtlNetlist()
     a = nl.sig("a", BIT)
     b = nl.sig("b", BIT)
     s0 = Switch(a).add_cases([(hBit(0), [
         b(0),
     ]), (hBit(1), [
         b(0),
     ])])
     s0_red, io_change = s0._try_reduce()
     self.assertFalse(io_change)
     self.assertEqual(len(s0_red), 1)
     self.assertTrue(s0_red[0].isSame(b(0)))
Exemple #13
0
def SwitchStatement():
    t = Bits(8)
    n = RtlNetlist()

    In = n.sig("input", t, defVal=8)
    Out = n.sig("output", t)

    Switch(In).addCases(
        [(i, Out(i + 1)) for i in range(8)]
    )

    interf = [In, Out]
    return n, interf
Exemple #14
0
def AxiReaderCore():
    n = RtlNetlist()
    rSt_t = HEnum('rSt_t', ['rdIdle', 'rdData'])

    rSt = n.sig('rSt', rSt_t)
    r_idle = n.sig("r_idle")
    arRd = n.sig('arRd')
    arVld = n.sig('arVld')
    rVld = n.sig('rVld')
    rRd = n.sig('rRd')

    # ar fsm next
    If(arRd,
       # rdIdle
        If(arVld,
           rSt(rSt_t.rdData)
        ).Else(
           rSt(rSt_t.rdIdle)
        )
    ).Else(
        # rdData
        If(rRd & rVld,
           rSt(rSt_t.rdIdle)
        ).Else(
           rSt(rSt_t.rdData)
        )
    )
    r_idle(rSt._eq(rSt_t.rdIdle))
    return n, {
        r_idle: DIRECTION.OUT,
        arRd: DIRECTION.IN,
        arVld: DIRECTION.IN,
        rVld: DIRECTION.IN,
        rRd: DIRECTION.IN
    }
Exemple #15
0
def makeTestbenchTemplate(unit: Unit, name: str=None):
    """
    :param unit: synthesized unit
    :return: (entity, arch, context) of testbench
    """
    if name is None:
        name = unit._name + "_tb"

    entity = Entity(name)
    arch = Architecture(entity)

    arch.components.append(unit._entity)
    arch.componentInstances.append(unit._entity)

    nl = RtlNetlist()
    ctx = {}
    for p in unit._entity.ports:
        t = p._dtype
        if isinstance(t, Bits) and not t == BIT:
            t = Bits(t.bit_length(), signed=t.signed,
                     forceVector=t.forceVector)
        s = RtlSignal(nl, p.name, t, t.fromPy(0))
        ctx[p._interface] = s
        p.connectSig(s)

    arch.variables.extend(ctx.values())

    return entity, arch, ctx
Exemple #16
0
    def test_If(self):
        ctx = RtlNetlist()
        a = ctx.sig("a", uint8_t)
        b = ctx.sig("b", uint8_t)
        stm = If(a != 0,
                 a(b)
                 ).Else(
            a(b + 1)
        )
        self.ae(stm, """\
If(a != 0,
    a(b)
).Else(
    a(b + 1)
)""")
        stm = If(a != 2,
                 a(b)
                 ).Elif(b != 3,
                        a(b - 1)
                        ).Else(
            a(b + 2)
        )
        self.ae(stm, """\
If(a != 2,
    a(b)
).Elif(b != 3,
    a(b - 1)
).Else(
    a(b + 2)
)""")

        stm = If(a != 2,
                 a(b)
                 ).Elif(b != 3,
                        a(b - 1)
                        ).Elif(b != 4,
                               a(b - 2)
                               )
        self.ae(stm, """\
If(a != 2,
    a(b)
).Elif(b != 3,
    a(b - 1)
).Elif(b != 4,
    a(b - 2)
)""")
Exemple #17
0
def AxiReaderCore():
    n = RtlNetlist()
    rSt_t = HEnum('rSt_t', ['rdIdle', 'rdData'])

    rSt = n.sig('rSt', rSt_t)
    arRd = n.sig('arRd')
    arVld = n.sig('arVld')
    rVld = n.sig('rVld')
    rRd = n.sig('rRd')

    # ar fsm next
    If(arRd,
       # rdIdle
        If(arVld,
           rSt(rSt_t.rdData)
        ).Else(
           rSt(rSt_t.rdIdle)
        )
    ).Else(
        # rdData
        If(rRd & rVld,
           rSt(rSt_t.rdIdle)
        ).Else(
           rSt(rSt_t.rdData)
        )
    )

    return n, [rSt, arRd, arVld, rVld, rRd]
Exemple #18
0
def netlistToVhdlStr(name: str, netlist: RtlNetlist,
                     interfaces: Dict[RtlSignal, DIRECTION]):
    name_scope = NameScope(None, name, True)
    buff = StringIO()
    store_manager = SaveToStream(Vhdl2008Serializer, buff)
    netlist.create_HdlModuleDec(name, store_manager, {})
    netlist.interfaces = interfaces
    for s, d in interfaces.items():
        s._interface = True
        pi = portItemfromSignal(s, netlist, d)
        # port of current top component
        s.name = name_scope.checked_name(s.name, s)
        pi.connectInternSig(s)
        netlist.ent.ports.append(pi)
    netlist.ent.ports.sort(key=lambda x: x.name)
    netlist.create_HdlModuleDef(DummyPlatform(), store_manager)
    store_manager.write(netlist.arch)
    return buff.getvalue()
Exemple #19
0
    def test_Switch(self):
        ctx = RtlNetlist()
        a = ctx.sig("a", uint8_t)
        b = ctx.sig("b", uint8_t)
        stm = Switch(a)\
            .Case(0, b(0))\
            .Case(1, b(1))\
            .Case(2, b(2))\
            .Default(b(3))
        self.ae(stm, """\
Switch(a)\\
    .Case(0,
        b(0))\\
    .Case(1,
        b(1))\\
    .Case(2,
        b(2))\\
    .Default(
        b(3))""")
Exemple #20
0
def Counter():
    t = Bits(8)
    n = RtlNetlist("LeadingZero")

    en = n.sig("en")
    rst = n.sig("rst")
    clk = n.sig("clk")
    s_out = n.sig("s_out", t)
    cnt = n.sig("cnt", t, clk=clk, syncRst=rst, defVal=0)

    If(en,
       cnt(cnt + 1)
    )

    s_out(cnt)

    interf = [rst, clk, s_out, en]

    return n, interf
Exemple #21
0
    def __init__(self,
                 masterDir=DIRECTION.OUT,
                 multipliedBy=None,
                 alternativeNames=None,
                 loadConfig=True):
        """
        This constructor is called when constructing new interface, it is usually done
        manually while creating Unit or
        automatically while extracting interfaces from UnitWithSoure

        :param masterDir: direction which this interface should have for master
        :param multiplyedBy: this can be instance of integer or Param, this mean the interface
                         is array of the interfaces where multiplyedBy is the size
        :param alternativeNames: alternative names which are used for interface extraction from hdl
                                [TODO] remove
        :param loadConfig: do load config in __init__
        """
        self._setAttrListener = None
        self._associatedClk = None
        self._associatedRst = None
        self._parent = None

        super().__init__()
        if multipliedBy is not None:
            multipliedBy = toHVal(multipliedBy)
        self._multipliedBy = multipliedBy
        self._masterDir = masterDir
        self._direction = INTF_DIRECTION.UNKNOWN

        # resolve alternative names
        if not alternativeNames:
            if hasattr(self.__class__, "_alternativeNames"):
                self._alternativeNames = copy(self.__class__._alternativeNames)
            else:
                self._alternativeNames = []
        else:
            self._alternativeNames = alternativeNames

        # set default name to this interface
        if not hasattr(self, "_name"):
            if self._alternativeNames:
                self._name = self._alternativeNames[0]
            else:
                self._name = ''

        self._cntx = RtlNetlist(self)

        if loadConfig:
            self._loadConfig()

        # flags for better design error detection
        self._isExtern = False
        self._isAccessible = True
        self._dirLocked = False
        self._ag = None
Exemple #22
0
def LeadingZero():
    t = Bits(64)
    resT = Bits(8)
    n = RtlNetlist()

    s_in = n.sig("s_in", t)
    index = n.sig("s_indexOfFirstZero", resT)

    leadingZeroTop = None  # index is index of first empty record or last one
    for i in reversed(range(8)):
        connections = index(i)
        if leadingZeroTop is None:
            leadingZeroTop = connections
        else:
            leadingZeroTop = If(s_in[i]._eq(0),
                                connections).Else(leadingZeroTop)

    interf = [s_in, index]

    return n, interf
Exemple #23
0
def IndexOps():
    t = Bits(8)
    n = RtlNetlist()

    s_in = n.sig("s_in", t)
    s_out = n.sig("s_out", t)

    s_in2 = n.sig("s_in2", t)
    s_out2 = n.sig("s_out2", t)

    s_in3 = n.sig("s_in3", Bits(16))
    s_out3 = n.sig("s_out3", t)

    s_in4a = n.sig("s_in4a", t)
    s_in4b = n.sig("s_in4b", t)

    s_out4 = n.sig("s_out4", Bits(16))

    s_out(s_in[4:]._concat(Bits(4).from_py(2)))

    s_out2[4:](s_in2[4:])
    s_out2[:4](s_in2[:4])

    s_out3(s_in3[8:])

    s_out4[8:](s_in4a)
    s_out4[(8 + 8):8](s_in4b)

    interf = {
        s_in: DIRECTION.IN,
        s_out: DIRECTION.OUT,
        s_in2: DIRECTION.IN,
        s_out2: DIRECTION.OUT,
        s_in3: DIRECTION.IN,
        s_out3: DIRECTION.OUT,
        s_in4a: DIRECTION.IN,
        s_in4b: DIRECTION.IN,
        s_out4: DIRECTION.OUT
    }

    return n, interf
Exemple #24
0
    def test_ifContSeqEval(self):
        for a_in, b_in in [(0, 0), (0, 1), (1, 0), (1, 1)]:
            resT = Bits(2)
            nl = RtlNetlist()

            res = nl.sig("res", resT)
            a = nl.sig("a", BIT)
            b = nl.sig("b", BIT)

            def w(val):
                return res(val)

            a.def_val = hBit(a_in)
            b.def_val = hBit(b_in)

            stm = IfContainer(a & b,
                              ifTrue=[
                                  res(0),
                              ],
                              elIfs=[
                                  (a, [res(1)]),
                              ],
                              ifFalse=[
                                  res(2),
                              ])

            if a_in and b_in:
                expected = 0
            elif a_in:
                expected = 1
            else:
                expected = 2

            stm.seqEval()

            newVal = res._val

            self.assertEqual(newVal.val, expected)
            self.assertEqual(newVal.vld_mask, 3)
Exemple #25
0
def ComplexConditions():
    n = RtlNetlist()
    stT = HEnum('t_state', ["idle", "tsWait", "ts0Wait", "ts1Wait", "lenExtr"])
    clk = n.sig('clk')
    rst = n.sig("rst")

    st = n.sig('st', stT, clk=clk, syncRst=rst, def_val=stT.idle)
    s_idle = n.sig('s_idle')
    sd0 = n.sig('sd0')
    sd1 = n.sig('sd1')
    cntrlFifoVld = n.sig('ctrlFifoVld')
    cntrlFifoLast = n.sig('ctrlFifoLast')

    def tsWaitLogic(ifNoTsRd):
        return If(sd0 & sd1, st(stT.lenExtr)).Elif(sd0, st(stT.ts1Wait)).Elif(
            sd1, st(stT.ts0Wait)).Else(ifNoTsRd)
    Switch(st)\
    .Case(stT.idle,
        tsWaitLogic(
            If(cntrlFifoVld,
               st(stT.tsWait)
            )
        )
    ).Case(stT.tsWait,
        tsWaitLogic(st(st))
    ).Case(stT.ts0Wait,
        If(sd0,
           st(stT.lenExtr)
        )
    ).Case(stT.ts1Wait,
        If(sd1,
           st(stT.lenExtr)
        )
    ).Case(stT.lenExtr,
        If(cntrlFifoVld & cntrlFifoLast,
           st(stT.idle)
        )
    )
    s_idle(st._eq(stT.idle))

    return n, {
        rst: DIRECTION.IN,
        clk: DIRECTION.IN,
        sd0: DIRECTION.IN,
        sd1: DIRECTION.IN,
        cntrlFifoVld: DIRECTION.IN,
        cntrlFifoLast: DIRECTION.IN,
        s_idle: DIRECTION.OUT
    }
Exemple #26
0
def LeadingZero():
    t = Bits(64)
    resT = Bits(8)
    n = RtlNetlist()

    s_in = n.sig("s_in", t)
    index = n.sig("s_indexOfFirstZero", resT)

    leadingZeroTop = None  # index is index of first empty record or last one
    for i in reversed(range(8)):
        connections = index(i)
        if leadingZeroTop is None:
            leadingZeroTop = connections 
        else:
            leadingZeroTop = If(s_in[i]._eq(0),
               connections
            ).Else(
               leadingZeroTop
            )

    interf = [s_in, index]

    return n, interf
Exemple #27
0
    def test_ifContSeqEval(self):
        for a_in, b_in in [(0, 0),
                           (0, 1),
                           (1, 0),
                           (1, 1)]:
            resT = Bits(2)
            nl = RtlNetlist()

            res = nl.sig("res", resT)
            a = nl.sig("a", BIT)
            b = nl.sig("b", BIT)

            def w(val):
                return res(val)

            a.defVal = hBit(a_in)
            b.defVal = hBit(b_in)

            stm = IfContainer(a & b,
                              ifTrue=[res(0), ],
                              elIfs=[(a, [res(1)]), ],
                              ifFalse=[res(2), ]
                              )

            if a_in and b_in:
                expected = 0
            elif a_in:
                expected = 1
            else:
                expected = 2

            stm.seqEval()

            newVal = res._val

            self.assertEqual(newVal.val, expected)
            self.assertEqual(newVal.vldMask, 3)
Exemple #28
0
def SimpleWhile():
    t = Bits(8)
    n = RtlNetlist()

    boundary = n.sig("boundary", t, defVal=8)
    s_out = n.sig("s_out", t)

    start = n.sig("start")
    en = n.sig("en")

    clk = n.sig("clk")
    syncRst = n.sig("rst")

    counter = n.sig("counter", t, clk, syncRst, 0)
    If(start, counter(boundary)).Elif(en, counter(counter - 1))

    s_out(counter)

    interf = [clk, syncRst, start, en, s_out]
    return n, interf
def createTwoAxiDuplexStreams():
    i = FullDuplexAxiStream()
    i._name = 'i'
    i._loadDeclarations()
    i._setDirectionsLikeIn(INTF_DIRECTION.MASTER)

    i2 = FullDuplexAxiStream()
    i2._name = 'i2'
    i2._loadDeclarations()
    i2._setDirectionsLikeIn(INTF_DIRECTION.SLAVE)

    n = RtlNetlist()
    for _i in [i, i2]:
        _i._signalsForInterface(n)
    return i, i2
Exemple #30
0
class StatementTreesInternalTC(unittest.TestCase):
    def setUp(self):
        unittest.TestCase.setUp(self)
        self.n = RtlNetlist("test")

    def test_getBaseCond(self):
        a = self.n.sig('a')
        _a = getBaseCond(~a)
        self.assertIs(a, _a[0])
        self.assertIs(True, _a[1])

        _a = getBaseCond(a)
        self.assertIs(a, _a[0])
        self.assertIs(False, _a[1])

        b = a < self.n.sig('b')
        _b = getBaseCond(~b)

        self.assertIs(b, _b[0])
        self.assertIs(True, _b[1])

        _b = getBaseCond(b)
        self.assertIs(b, _b[0])
        self.assertIs(False, _b[1])
Exemple #31
0
def createTwoAxiDuplexStreams():
    i = AxiStreamFullDuplex()
    i._name = 'i'
    i._loadDeclarations()
    i._setDirectionsLikeIn(INTF_DIRECTION.MASTER)

    i2 = AxiStreamFullDuplex()
    i2._name = 'i2'
    i2._loadDeclarations()
    i2._setDirectionsLikeIn(INTF_DIRECTION.SLAVE)
    ns = NameScope(None, "", False)
    n = RtlNetlist()
    for _i in [i, i2]:
        _i._signalsForInterface(n, None, ns)
    return i, i2
Exemple #32
0
def ComplexConditions():
    n = RtlNetlist()
    stT = HEnum('t_state', ["idle", "tsWait", "ts0Wait", "ts1Wait", "lenExtr"])
    clk = n.sig('clk')
    rst = n.sig("rst")

    st = n.sig('st', stT, clk=clk, syncRst=rst, defVal=stT.idle)
    s_idle = n.sig('s_idle')
    sd0 = n.sig('sd0')
    sd1 = n.sig('sd1')
    cntrlFifoVld = n.sig('ctrlFifoVld')
    cntrlFifoLast = n.sig('ctrlFifoLast')

    def tsWaitLogic(ifNoTsRd):
        return If(sd0 & sd1,
                   st(stT.lenExtr)
               ).Elif(sd0,
                   st(stT.ts1Wait)
               ).Elif(sd1,
                   st(stT.ts0Wait)
               ).Else(
                   ifNoTsRd
               )
    Switch(st)\
    .Case(stT.idle,
        tsWaitLogic(
            If(cntrlFifoVld,
               st(stT.tsWait)
            )
        )
    ).Case(stT.tsWait,
        tsWaitLogic(st(st))
    ).Case(stT.ts0Wait,
        If(sd0,
           st(stT.lenExtr)
        )
    ).Case(stT.ts1Wait,
        If(sd1,
           st(stT.lenExtr)
        )
    ).Case(stT.lenExtr,
        If(cntrlFifoVld & cntrlFifoLast,
           st(stT.idle)
        )
    )
    s_idle(st._eq(stT.idle))

    return n, [rst, clk, sd0, sd1, cntrlFifoVld, cntrlFifoLast, s_idle]
Exemple #33
0
def SimpleWhile():
    t = Bits(8)
    n = RtlNetlist()

    boundary = n.sig("boundary", t, defVal=8)
    s_out = n.sig("s_out", t)

    start = n.sig("start")
    en = n.sig("en")

    clk = n.sig("clk")
    syncRst = n.sig("rst")

    counter = n.sig("counter", t, clk, syncRst, 0)
    If(start,
        counter(boundary)
    ).Elif(en,
        counter(counter - 1)
    )

    s_out(counter)

    interf = [clk, syncRst, start, en, s_out]
    return n, interf
Exemple #34
0
def Counter():
    t = Bits(8)
    n = RtlNetlist("LeadingZero")

    en = n.sig("en")
    rst = n.sig("rst")
    clk = n.sig("clk")
    s_out = n.sig("s_out", t)
    cnt = n.sig("cnt", t, clk=clk, syncRst=rst, defVal=0)

    If(en, cnt(cnt + 1))

    s_out(cnt)

    interf = [rst, clk, s_out, en]

    return n, interf
Exemple #35
0
def SimpleRegister():
    t = Bits(8)

    n = RtlNetlist()

    s_out = n.sig("s_out", t)
    s_in = n.sig("s_in", t)
    clk = n.sig("clk")
    syncRst = n.sig("rst")

    val = n.sig("val", t, clk, syncRst, 0)
    val(s_in)
    s_out(val)

    interf = {
        clk: DIRECTION.IN,
        syncRst: DIRECTION.IN,
        s_in: DIRECTION.IN,
        s_out: DIRECTION.OUT
    }
    return n, interf
    def test_IntfDirections_multistream_setSrc(self):
        def m(i):
            return self.assertEqual(i._direction, INTF_DIRECTION.MASTER)

        def s(i):
            return self.assertEqual(i._direction, INTF_DIRECTION.SLAVE)

        i, i2 = createTwoAxiDuplexStreams()
        n = RtlNetlist()

        i._signalsForInterface(n)
        i2._signalsForInterface(n)

        connect(i, i2)

        m(i)

        s(i.rx.data)
        s(i.rx.last)
        s(i.rx.valid)
        m(i.rx.ready)

        m(i.tx.data)
        m(i.tx.last)
        m(i.tx.valid)
        s(i.tx.ready)

        m(i2.rx.data)
        m(i2.rx.last)
        m(i2.rx.valid)
        s(i2.rx.ready)

        s(i2.tx.data)
        s(i2.tx.last)
        s(i2.tx.valid)
        m(i2.tx.ready)
Exemple #37
0
def SimpleEnum():
    t = Bits(8)
    fsmT = HEnum('fsmT', ['send0', 'send1'])

    n = RtlNetlist()

    s_out = n.sig("s_out", t)
    s_in0 = n.sig("s_in0", t)
    s_in1 = n.sig("s_in1", t)
    clk = n.sig("clk")
    syncRst = n.sig("rst")

    fsmSt = n.sig("fsmSt", fsmT, clk, syncRst, fsmT.send0)
    If(fsmSt._eq(fsmT.send0),
        s_out(s_in0),
        fsmSt(fsmT.send1),
    ).Else(
        s_out(s_in1),
        fsmSt(fsmT.send0)
    )

    interf = [clk, syncRst, s_in0, s_in1, s_out]
    return n, interf
Exemple #38
0
def Counter():
    t = Bits(8)
    n = RtlNetlist("LeadingZero")

    en = n.sig("en")
    rst = n.sig("rst")
    clk = n.sig("clk")
    s_out = n.sig("s_out", t)
    cnt = n.sig("cnt", t, clk=clk, syncRst=rst, def_val=0)

    If(en, cnt(cnt + 1))

    s_out(cnt)

    interf = {
        rst: DIRECTION.IN,
        clk: DIRECTION.IN,
        s_out: DIRECTION.OUT,
        en: DIRECTION.IN
    }

    return n, interf
Exemple #39
0
class StatementTreesTC(unittest.TestCase):
    def setUp(self):
        unittest.TestCase.setUp(self)
        self.n = RtlNetlist()

    def compareStructure(self, template, cont):
        self.assertIsInstance(cont, template.__class__)
        if isinstance(template, IfContainer):
            self.assertEqual(template.cond, cont.cond)

            self.assertEqual(len(template.ifTrue), len(template.ifTrue))
            self.assertEqual(len(template.elIfs), len(template.elIfs))
            self.assertEqual(len(template.ifFalse), len(template.ifFalse))
        elif isinstance(template, SwitchContainer):
            self.assertEqual(template.switchOn, template.switchOn)
            self.assertEqual(len(template.cases), len(template.cases))

    def strStructureCmp(self, cont, tmpl):
        if not isinstance(cont, str):
            cont = VhdlSerializer.asHdl(cont, VhdlSerializer.getBaseContext())
        _tmpl = rmWhitespaces.sub(" ", tmpl).strip()
        _cont = rmWhitespaces.sub(" ", cont).strip()

        self.assertEqual(_tmpl, _cont)

    def test_baicIf(self):
        a = self.n.sig('a')
        b = self.n.sig('b')

        obj = If(a,
                 b(1)
                 ).Else(
            b(0)
        )

        container, io_change = obj._try_reduce()
        self.assertFalse(io_change)
        self.assertEqual(len(container), 1)
        container = container[0]
        tmpl = IfContainer(a,
                           ifTrue=[b(1)],
                           ifFalse=[b(0)])
        self.compareStructure(tmpl, container)

    def test_basicSwitch(self):
        a = self.n.sig('a', dtype=INT)
        b = self.n.sig('b', dtype=INT)

        obj = Switch(a).addCases([(i, c(i, b)) for i in range(4)])
        cont, io_change = obj._try_reduce()
        self.assertFalse(io_change)
        self.assertEqual(len(cont), 1)
        cont = cont[0]

        tmpl = SwitchContainer(a, [(i, c(i, b)) for i in range(3)]
                               + [(None, c(3, b))])
        self.compareStructure(tmpl, cont)

    def test_ifsInSwitch(self):
        n = self.n
        stT = HEnum('t_state', ["idle", "tsWait", "ts0Wait",
                                "ts1Wait", "lenExtr"])
        clk = n.sig('clk')
        rst = n.sig("rst")

        st = n.sig('st', stT, clk=clk, syncRst=rst, defVal=stT.idle)
        sd0 = n.sig('sd0')
        sd1 = n.sig('sd1')
        cntrlFifoVld = n.sig('ctrlFifoVld')
        cntrlFifoLast = n.sig('ctrlFifoLast')

        def tsWaitLogic():
            return If(sd0 & sd1,
                      c(stT.lenExtr, st)
                      ).Else(
                c(stT.ts1Wait, st)
            )
        obj = Switch(st)\
            .Case(stT.idle,
                  tsWaitLogic()
                  ).Case(stT.tsWait,
                         tsWaitLogic()
                         ).Case(stT.ts0Wait,
                                If(sd0,
                                   c(stT.lenExtr, st)
                                   ).Else(
                                    c(st, st)
                                )
                                ).Case(stT.ts1Wait,
                                       If(sd1,
                                          c(stT.lenExtr, st)
                                          ).Else(
                                           c(st, st)
                                       )
                                       ).Case(stT.lenExtr,
                                              If(cntrlFifoVld & cntrlFifoLast,
                                                 c(stT.idle, st)
                                                 ).Else(
                                                  c(st, st)
                                              )
                                              )

        cont, io_change = obj._try_reduce()
        self.assertFalse(io_change)
        self.assertEqual(len(cont), 1)
        cont = cont[0]
        tmpl = """
        CASE st IS
            WHEN idle =>
                IF (sd0 AND sd1) = '1' THEN
                    st_next <= lenExtr;
                ELSE
                    st_next <= ts1Wait;
                END IF;
            WHEN tsWait =>
                IF (sd0 AND sd1) = '1' THEN
                    st_next <= lenExtr;
                ELSE
                    st_next <= ts1Wait;
                END IF;
            WHEN ts0Wait =>
                IF sd0 = '1' THEN
                    st_next <= lenExtr;
                ELSE
                    st_next <= st;
                END IF;
            WHEN ts1Wait =>
                IF sd1 = '1' THEN
                    st_next <= lenExtr;
                ELSE
                    st_next <= st;
                END IF;
            WHEN OTHERS =>
                IF (ctrlFifoVld AND ctrlFifoLast) = '1' THEN
                    st_next <= idle;
                ELSE
                    st_next <= st;
                END IF;
        END CASE

        """
        self.strStructureCmp(cont, tmpl)

    def test_ifs2LvlInSwitch(self):
        n = self.n
        stT = HEnum('t_state', ["idle", "tsWait",
                                "ts0Wait", "ts1Wait", "lenExtr"])
        clk = n.sig('clk')
        rst = n.sig("rst")

        st = n.sig('st', stT, clk=clk, syncRst=rst, defVal=stT.idle)
        sd0 = n.sig('sd0')
        sd1 = n.sig('sd1')
        cntrlFifoVld = n.sig('ctrlFifoVld')
        cntrlFifoLast = n.sig('ctrlFifoLast')

        def tsWaitLogic(ifNoTsRd):
            return If(sd0 & sd1,
                      c(stT.lenExtr, st)
                      ).Else(
                ifNoTsRd
            )
        obj = Switch(st)\
            .Case(stT.idle,
                  tsWaitLogic(
                      If(cntrlFifoVld,
                         c(stT.tsWait, st)
                         ).Else(
                          c(st, st)
                      )
                  )
                  ).Case(stT.tsWait,
                         tsWaitLogic(c(st, st))
                         ).Case(stT.ts0Wait,
                                If(sd0,
                                   c(stT.lenExtr, st)
                                   ).Else(
                                    c(st, st)
                                )
                                ).Case(stT.ts1Wait,
                                       If(sd1,
                                          c(stT.lenExtr, st)
                                          ).Else(
                                           c(st, st)
                                       )
                                       ).Case(stT.lenExtr,
                                              If(cntrlFifoVld & cntrlFifoLast,
                                                 c(stT.idle, st)
                                                 ).Else(
                                                  c(st, st)
                                              )
                                              )

        cont, io_change = obj._try_reduce()
        self.assertFalse(io_change)
        self.assertEqual(len(cont), 1)
        cont = cont[0]
        tmpl = """
        CASE st IS
            WHEN idle =>
                IF (sd0 AND sd1) = '1' THEN
                    st_next <= lenExtr;
                ELSIF ctrlFifoVld = '1' THEN
                    st_next <= tsWait;
                ELSE
                    st_next <= st;
                END IF;
            WHEN tsWait =>
                IF (sd0 AND sd1) = '1' THEN
                    st_next <= lenExtr;
                ELSE
                    st_next <= st;
                END IF;
            WHEN ts0Wait =>
                IF sd0 = '1' THEN
                    st_next <= lenExtr;
                ELSE
                    st_next <= st;
                END IF;
            WHEN ts1Wait =>
                IF sd1 = '1' THEN
                    st_next <= lenExtr;
                ELSE
                    st_next <= st;
                END IF;
            WHEN OTHERS =>
                IF (ctrlFifoVld AND ctrlFifoLast) = '1' THEN
                    st_next <= idle;
                ELSE
                    st_next <= st;
                END IF;
        END CASE

        """
        self.strStructureCmp(cont, tmpl)

    def test_ifs3LvlInSwitch(self):
        n = self.n
        stT = HEnum('t_state', ["idle", "tsWait",
                                "ts0Wait", "ts1Wait", "lenExtr"])
        clk = n.sig('clk')
        rst = n.sig("rst")

        st = n.sig('st', stT, clk=clk, syncRst=rst, defVal=stT.idle)
        sd0 = n.sig('sd0')
        sd1 = n.sig('sd1')
        cntrlFifoVld = n.sig('ctrlFifoVld')
        cntrlFifoLast = n.sig('ctrlFifoLast')

        def tsWaitLogic(ifNoTsRd):
            return If(sd0 & sd1,
                      c(stT.lenExtr, st)
                      ).Elif(sd0,
                             c(stT.ts1Wait, st)
                             ).Else(
                ifNoTsRd
            )
        obj = Switch(st)\
            .Case(stT.idle,
                  tsWaitLogic(
                      If(cntrlFifoVld,
                         c(stT.tsWait, st)
                         ).Else(
                          c(st, st)
                      )
                  )
                  ).Case(stT.tsWait,
                         tsWaitLogic(c(st, st))
                         ).Case(stT.ts0Wait,
                                If(sd0,
                                   c(stT.lenExtr, st)
                                   ).Else(
                                    c(st, st)
                                )
                                ).Case(stT.ts1Wait,
                                       If(sd1,
                                          c(stT.lenExtr, st)
                                          ).Else(
                                           c(st, st)
                                       )
                                       ).Case(stT.lenExtr,
                                              If(cntrlFifoVld & cntrlFifoLast,
                                                 c(stT.idle, st)
                                                 ).Else(
                                                  c(st, st)
                                              )
                                              )

        cont, io_change = obj._try_reduce()
        self.assertFalse(io_change)
        self.assertEqual(len(cont), 1)
        cont = cont[0]
        tmpl = """
        CASE st IS
            WHEN idle =>
                IF (sd0 AND sd1) = '1' THEN
                    st_next <= lenExtr;
                ELSIF sd0 = '1' THEN
                    st_next <= ts1Wait;
                ELSIF ctrlFifoVld = '1' THEN
                    st_next <= tsWait;
                ELSE
                    st_next <= st;
                END IF;
            WHEN tsWait =>
                IF (sd0 AND sd1) = '1' THEN
                    st_next <= lenExtr;
                ELSIF sd0 = '1' THEN
                    st_next <= ts1Wait;
                ELSE
                    st_next <= st;
                END IF;
            WHEN ts0Wait =>
                IF sd0 = '1' THEN
                    st_next <= lenExtr;
                ELSE
                    st_next <= st;
                END IF;
            WHEN ts1Wait =>
                IF sd1 = '1' THEN
                    st_next <= lenExtr;
                ELSE
                    st_next <= st;
                END IF;
            WHEN OTHERS =>
                IF (ctrlFifoVld AND ctrlFifoLast) = '1' THEN
                    st_next <= idle;
                ELSE
                    st_next <= st;
                END IF;
        END CASE

        """
        self.strStructureCmp(cont, tmpl)
Exemple #40
0
#!/usr/bin/env python3alu
# -*- coding: utf-8 -*-

import unittest

from hwt.bitmask import mask
from hwt.hdl.typeShortcuts import hInt, hBool, hBit, vec
from hwt.hdl.types.bits import Bits
from hwt.hdl.types.bool import HBool
from hwt.hdl.types.defs import INT, STR, BOOL
from hwt.synthesizer.rtlLevel.mainBases import RtlSignalBase
from hwt.synthesizer.rtlLevel.netlist import RtlNetlist


n = RtlNetlist()
s0 = n.sig("s0", HBool())
s1 = n.sig("s1")

andTable = [(None, None, None),
            (None, 0, 0),
            (None, 1, None),
            (0, None, 0),
            (0, 0, 0),
            (0, 1, 0),
            (1, 1, 1),
            (s0, 1, s0),
            (s0, 0, 0),
            (1, s0, s0),
            (0, s0, 0),
            ]
orTable = [(None, None, None),
Exemple #41
0
 def test_bits_sig_slice_on_slice_of_slice(self):
     n = RtlNetlist()
     s = n.sig("s", Bits(16))
     self.assertIs(s[10:0][7:0][2:0], s[2:0])
     self.assertIs(s[10:0][7:0][4:1], s[4:1])
     self.assertIs(s[12:5][7:1][4:1], s[10:7])
Exemple #42
0
 def test_bits_mul(self):
     n = RtlNetlist()
     s = n.sig("s", Bits(16))
     s * 10
     s * s
Exemple #43
0
class OperatorTC(unittest.TestCase):
    def setUp(self):
        unittest.TestCase.setUp(self)
        self.n = RtlNetlist()

    def test_BoolNot(self):
        for v in [True, False]:
            res = ~hBool(v)
            self.assertEqual(res.val, not v)
            self.assertEqual(res.vldMask, 1)
            self.assertEqual(res.updateTime, -1)

    def test_BitNot(self):
        for v in [False, True]:
            res = ~hBit(v)

            self.assertEqual(res.val, int(not v))
            self.assertEqual(res.vldMask, 1)
            self.assertEqual(res.updateTime, -1)

    def _test_And(self, vals):
        for a, b, expected in andTable:
            res = vals[a] & vals[b]
            expectedRes = vals[expected]

            if isinstance(expectedRes, RtlSignalBase):
                self.assertIs(res, expectedRes)
            else:
                self.assertEqual(expectedRes.val, res.val,
                                 "%r & %r  val=%r (should be %r)"
                                 % (a, b, res.val, expectedRes.val))
                self.assertEqual(expectedRes.vldMask, res.vldMask,
                                 "%r & %r  vldMask=%r (should be %r)"
                                 % (a, b, res.vldMask, expectedRes.vldMask))

    def _test_Or(self, vals):
        for a, b, expected in orTable:
            res = vals[a] | vals[b]
            expectedRes = vals[expected]

            if isinstance(expectedRes, RtlSignalBase):
                self.assertIs(res, expectedRes)
            else:
                self.assertEqual(expectedRes.val, res.val,
                                 "%r | %r  val=%r (should be %r)"
                                 % (a, b, res.val, expectedRes.val))
                self.assertEqual(expectedRes.vldMask, res.vldMask,
                                 "%r | %r  vldMask=%r (should be %r)"
                                 % (a, b, res.vldMask, expectedRes.vldMask))

    def _test_Xor(self, vals):
        for a, b, expected in xorTable:
            res = vals[a] ^ vals[b]
            expectedRes = vals[expected]

            if isinstance(expectedRes, RtlSignalBase):
                self.assertIs(res, expectedRes)
            else:
                if expectedRes.vldMask:
                    self.assertEqual(expectedRes.val, res.val,
                                     "%r ^ %r  val=%r (should be %r)"
                                     % (a, b, res.val, expectedRes.val))
                self.assertEqual(expectedRes.vldMask, res.vldMask,
                                 "%r ^ %r  vldMask=%r (should be %r)"
                                 % (a, b, res.vldMask, expectedRes.vldMask))

    def test_BoolAnd(self):
        self._test_And(boolvals)

    def test_BitAnd(self):
        self._test_And(bitvals)

    def test_BoolOr(self):
        self._test_Or(boolvals)

    def test_BitOr(self):
        self._test_Or(bitvals)

    def test_BoolXor(self):
        self._test_Xor(boolvals)

    def test_BitXor(self):
        self._test_Xor(bitvals)

    def test_notNotIsOrigSig(self):
        a = self.n.sig("a")
        self.assertIs(a, ~ ~a)

    def test_downto(self):
        a = self.n.sig('a', dtype=INT)
        a.defVal = hInt(10)
        b = hInt(0)
        r = a._downto(b)
        res = r.staticEval()
        self.assertEqual(res.val[0].val, 10)
        self.assertEqual(res.val[1].val, 0)

    def test_ADD_InvalidOperands(self):
        a = self.n.sig('a', dtype=STR)
        b = self.n.sig('b')
        self.assertRaises(Exception, lambda: a + b)

    def test_ADD_IntBits(self):
        a = vec(7, 8)
        b = hInt(1)
        c = a + b
        self.assertEqual(c.val, 8)
        self.assertEqual(c.vldMask, mask(8))

        a = vec(255, 8)
        b = hInt(1)
        c = a + b
        self.assertEqual(c.val, 0)
        self.assertEqual(c.vldMask, mask(8))

        a = vec(7, 8, False)
        b = hInt(1)
        c = a + b
        self.assertEqual(c.val, 8)
        self.assertEqual(c.vldMask, mask(8))

        a = vec(255, 8, False)
        b = hInt(1)
        c = a + b
        self.assertEqual(c.val, 0)
        self.assertEqual(c.vldMask, mask(8))

    def test_AND_eval(self):
        for a_in, b_in, out in [(0, 0, 0),
                                (0, 1, 0),
                                (1, 0, 0),
                                (1, 1, 1)]:
            res = hBit(a_in) & hBit(b_in)
            self.assertEqual(res.vldMask, 1)
            self.assertEqual(
                res.val, out,
                "a_in %d, b_in %d, out %d"
                % (a_in, b_in, out))

    def test_ADD_eval(self):
        for a_in, b_in, out in [(0, 0, 0),
                                (0, 1, 1),
                                (1, 0, 1),
                                (1, 1, 2)]:
            res = hInt(a_in) + hInt(b_in)

            b_w = 2

            self.assertTrue(res.vldMask)
            self.assertEqual(
                res.val, out,
                "a_in %d, b_in %d, out %d"
                % (a_in, b_in, out))

            resBit = vec(a_in, b_w) + vec(b_in, b_w)
            self.assertEqual(resBit.vldMask, 3)
            self.assertEqual(
                resBit.val, out,
                "a_in %d, b_in %d, out %d"
                % (a_in, b_in, out))

    def test_bits_le(self):
        a = vec(8, 8)
        b = vec(16, 8)
        self.assertTrue((a <= b).val)
        self.assertFalse((b <= a).val)

    def test_bits_sig_slice_on_slice(self):
        n = RtlNetlist()
        s = n.sig("s", Bits(16))
        self.assertIs(s[10:0][2:0], s[2:0])
        self.assertIs(s[10:0][4:1], s[4:1])
        self.assertIs(s[12:5][4:1], s[9:6])

    def test_bits_sig_slice_on_slice_of_slice(self):
        n = RtlNetlist()
        s = n.sig("s", Bits(16))
        self.assertIs(s[10:0][7:0][2:0], s[2:0])
        self.assertIs(s[10:0][7:0][4:1], s[4:1])
        self.assertIs(s[12:5][7:1][4:1], s[10:7])

    def test_bits_mul(self):
        n = RtlNetlist()
        s = n.sig("s", Bits(16))
        s * 10
        s * s

    def test_array_eq_neq(self):
        t = Bits(8)[5]
        v0 = t.fromPy(range(5))
        v1 = t.fromPy({0: 10, 1: 2})
        v2 = t.fromPy([1, 2, 3, 4, 5])

        self.assertTrue(v0._eq(v0))
        with self.assertRaises(ValueError):
            self.assertNotEqual(v0, v1)
        self.assertNotEqual(v0, v2)
        with self.assertRaises(ValueError):
            self.assertNotEqual(v1, v2)
        with self.assertRaises(ValueError):
            self.assertNotEqual(v1, v1)
        self.assertTrue(v2, v2)

    def test_int_neg(self):
        self.assertEqual(int(INT.fromPy(-10)), -10)
        self.assertEqual(int(-INT.fromPy(10)), -10)
        self.assertEqual(int(-INT.fromPy(10)), -10)
        v = -INT.fromPy(None)
        self.assertEqual(v.val, 0)
        self.assertEqual(v.vldMask, 0)

    def test_int_to_bool(self):
        self.assertFalse(bool(INT.fromPy(0)._auto_cast(BOOL)))
        self.assertTrue(bool(INT.fromPy(1)._auto_cast(BOOL)))
        self.assertTrue(bool(INT.fromPy(-11)._auto_cast(BOOL)))
        self.assertTrue(bool(INT.fromPy(500)._auto_cast(BOOL)))

        with self.assertRaises(ValueError):
            bool(INT.fromPy(None)._auto_cast(BOOL))
Exemple #44
0
 def setUp(self):
     unittest.TestCase.setUp(self)
     self.n = RtlNetlist()
Exemple #45
0
 def setUp(self):
     unittest.TestCase.setUp(self)
     nl = RtlNetlist()
     self.a = nl.sig("a")
     self.b = nl.sig("b")
     self.c = nl.sig("c")