Esempio n. 1
0
 def testSetSlice(self):
     self.seqsSetup()
     toggle = 0
     for s in self.seqs:
         n = long(s, 2)
         for i in range(1, len(s) + 5):
             for j in range(0, len(s) + 5):
                 for v in self.seqv:
                     ext = "0" * (i - j - len(v))
                     extv = ext + v
                     bv = intbv(n)
                     bvi = intbv(~n)
                     val = long(v, 2)
                     toggle ^= 1
                     if toggle:
                         val = intbv(val)
                     try:
                         bv[i:j] = val
                     except ValueError:
                         assert i <= j or val >= 2 ** (i - j)
                         continue
                     else:
                         ref = long(setSlice(s, i, j, extv), 2)
                         assert bv == ref
                     mask = (2 ** (i - j)) - 1
                     vali = val ^ mask
                     try:
                         bvi[i:j] = vali
                     except ValueError:
                         assert vali >= 2 ** (i - j)
                         continue
                     else:
                         refi = ~long(setSlice(s, i, j, extv), 2)
                         assert bvi == refi
Esempio n. 2
0
 def testSetSlice(self):
     self.seqsSetup()
     toggle = 0
     for s in self.seqs:
         n = long(s, 2)
         for i in range(1, len(s) + 5):
             for j in range(0, len(s) + 5):
                 for v in self.seqv:
                     ext = '0' * (i - j - len(v))
                     extv = ext + v
                     bv = intbv(n)
                     bvi = intbv(~n)
                     val = long(v, 2)
                     toggle ^= 1
                     if toggle:
                         val = intbv(val)
                     try:
                         bv[i:j] = val
                     except ValueError:
                         self.assertTrue(i <= j or val >= 2**(i - j))
                         continue
                     else:
                         ref = long(setSlice(s, i, j, extv), 2)
                         self.assertEqual(bv, ref)
                     mask = (2**(i - j)) - 1
                     vali = val ^ mask
                     try:
                         bvi[i:j] = vali
                     except ValueError:
                         self.assertTrue(vali >= 2**(i - j))
                         continue
                     else:
                         refi = ~long(setSlice(s, i, j, extv), 2)
                         self.assertEqual(bvi, refi)
Esempio n. 3
0
 def testSliceAssign(self):
     a = intbv(min=-24, max=34)
     for i in (-24, -2, 13, 33):
         for k in (6, 9, 10):
             a[:] = 0
             a[k:] = i
             self.assertEqual(a, i)
     for i in (-25, -128, 34, 35, 229):
         for k in (0, 9, 10):
             try:
                 a[k:] = i
             except ValueError:
                 pass
             else:
                 self.fail()
     a = intbv(5)[8:]
     for v in (0, 2**8-1, 100):
         a[:] = v
     for v in (-1, 2**8, -10, 1000):
         try:
             a[:] = v
         except ValueError:
             pass
         else:
             self.fail()
Esempio n. 4
0
 def testSetSlice(self):
     self.seqsSetup()
     toggle = 0
     for s in self.seqs:
         n = int(s, 2)
         for i in range(1, len(s)+5):
             for j in range(0, len(s)+5):
                 for v in self.seqv:
                     ext = '0' * (i-j -len(v))
                     extv = ext + v
                     bv = intbv(n)
                     bvi = intbv(~n)
                     val = int(v, 2)
                     toggle ^= 1
                     if toggle:
                         val = intbv(val)
                     try:
                         bv[i:j] = val
                     except ValueError:
                         assert i<=j or val >= 2**(i-j)
                         continue
                     else:
                         ref = int(setSlice(s, i, j, extv), 2)
                         assert bv == ref
                     mask = (2**(i-j))-1
                     vali = val ^ mask
                     try:
                         bvi[i:j] = vali
                     except ValueError:
                         assert vali >= 2**(i-j)
                         continue
                     else:
                         refi = ~int(setSlice(s, i, j, extv), 2)
                         assert bvi == refi
Esempio n. 5
0
 def testSliceAssign(self):
     a = intbv(min=-24, max=34)
     for i in (-24, -2, 13, 33):
         for k in (6, 9, 10):
             a[:] = 0
             a[k:] = i
             self.assertEqual(a, i)
     for i in (-25, -128, 34, 35, 229):
         for k in (0, 9, 10):
             try:
                 a[k:] = i
             except ValueError:
                 pass
             else:
                 self.fail()
     a = intbv(5)[8:]
     for v in (0, 2**8 - 1, 100):
         a[:] = v
     for v in (-1, 2**8, -10, 1000):
         try:
             a[:] = v
         except ValueError:
             pass
         else:
             self.fail()
Esempio n. 6
0
    def testInit(self):
        with pytest.raises(ValueError):
            intbv(15, min=-8, max=8)

        x = modbv(15, min=-8, max=8)
        assert -1 == x

        # Arbitrary boundraries support (no exception)
        modbv(5, min=-3, max=8)
Esempio n. 7
0
    def testInit(self):
        with pytest.raises(ValueError):
            intbv(15, min=-8, max=8)

        x = modbv(15, min=-8, max=8)
        assert -1 == x

        # Arbitrary boundraries support (no exception)
        modbv(5, min=-3, max=8)
Esempio n. 8
0
    def testNoWrap(self):
        # Validate the base class fails for the wraps
        x = intbv(0, min=-8, max=8)
        with pytest.raises(ValueError):
            x[:] += 15

        x = intbv(0, min=-8, max=8)
        with pytest.raises(ValueError):
            x[:] += 15
Esempio n. 9
0
    def testNoWrap(self):
        # Validate the base class fails for the wraps
        x = intbv(0, min=-8, max=8)
        with pytest.raises(ValueError):
            x[:] += 15

        x = intbv(0, min=-8, max=8)
        with pytest.raises(ValueError):
            x[:] += 15
Esempio n. 10
0
def concat(base, *args):

    if isinstance(base, intbv):
        basewidth = base._nrbits
        val = base._val
    elif isinstance(base, integer_types):
        if isinstance(base, bool):
            basewidth = 1
        else:
            basewidth = 0
        val = base
    elif isinstance(base, _Signal):
        basewidth = base._nrbits
        if isinstance(base._val, intbv):
            val = base._val._val
        else:
            val = base._val
    elif isinstance(base, str):
        basewidth = len(base)
        val = long(base, 2)
    else:
        raise TypeError("concat: inappropriate first argument type: %s" %
                        type(base))

    width = 0
    for i, arg in enumerate(args):
        if isinstance(arg, intbv):
            w = arg._nrbits
            v = arg._val
        elif isinstance(arg, _Signal):
            w = arg._nrbits
            if isinstance(arg._val, intbv):
                v = arg._val._val
            else:
                v = arg._val
        elif isinstance(arg, bool):
            w = 1
            v = arg
        elif isinstance(arg, str):
            w = len(arg)
            v = long(arg, 2)
        else:
            raise TypeError("concat: inappropriate argument type: %s" %
                            type(arg))
        if not w:
            raise TypeError("concat: arg on pos %d should have length" %
                            (i + 1))
        width += w
        val = val << w | v & (long(1) << w) - 1

    if basewidth:
        return intbv(val, _nrbits=basewidth + width)
    else:
        return intbv(val)
Esempio n. 11
0
def concat(base, *args):

    if isinstance(base, intbv):
        basewidth = base._nrbits
        val = base._val
    elif isinstance(base, integer_types):
        if isinstance(base, bool):
            basewidth = 1
        else:
            basewidth = 0
        val = base
    elif isinstance(base, _Signal):
        basewidth = base._nrbits
        if isinstance(base._val, intbv):
            val = base._val._val
        else:
            val = base._val
    elif isinstance(base, str):
        basewidth = len(base)
        val = long(base, 2)
    else:
        raise TypeError("concat: inappropriate first argument type: %s" \
                        % type(base))

    width = 0
    for i, arg in enumerate(args):
        if isinstance(arg, intbv):
            w = arg._nrbits
            v = arg._val
        elif isinstance(arg, _Signal):
            w = arg._nrbits
            if isinstance(arg._val, intbv):
                v = arg._val._val
            else:
                v = arg._val
        elif isinstance(arg, bool):
            w = 1
            v = arg
        elif isinstance(arg, str):
            w = len(arg)
            v = long(arg, 2)
        else:
            raise TypeError("concat: inappropriate argument type: %s" \
                            % type(arg))
        if not w:
            raise TypeError("concat: arg on pos %d should have length" % (i+1))
        width += w
        val = val << w | v & (long(1) << w)-1
 
    if basewidth:
        return intbv(val, _nrbits=basewidth + width)
    else:
        return intbv(val)
Esempio n. 12
0
 def comparisonCheck(self, op, imin=0, imax=None, jmin=0, jmax=None):
     self.seqSetup(imin=imin, imax=imax, jmin=jmin, jmax=jmax)
     for i, j in zip(self.seqi, self.seqj):
         bi = intbv(i)
         bj = intbv(j)
         ref = op(i, j)
         r1 = op(bi, j)
         r2 = op(i, bj)
         r3 = op(bi, bj)
         assert r1 == ref
         assert r2 == ref
         assert r3 == ref
Esempio n. 13
0
 def comparisonCheck(self, op, imin=0, imax=None, jmin=0, jmax=None):
     self.seqSetup(imin=imin, imax=imax, jmin=jmin, jmax=jmax)
     for i, j in zip(self.seqi, self.seqj):
         bi = intbv(i)
         bj = intbv(j)
         ref = op(i, j)
         r1 = op(bi, j)
         r2 = op(i, bj)
         r3 = op(bi, bj)
         assert r1 == ref
         assert r2 == ref
         assert r3 == ref
Esempio n. 14
0
 def comparisonCheck(self, op, imin=0, imax=None, jmin=0, jmax=None):
     self.seqSetup(imin=imin, imax=imax, jmin=jmin, jmax=jmax)
     for i, j in zip(self.seqi, self.seqj):
         bi = intbv(i)
         bj = intbv(j)
         exec("ref = i %s j" % op)
         exec("r1 = bi %s j" % op)
         exec("r2 = i %s bj" % op)
         exec("r3 = bi %s bj" % op)
         self.assertEqual(r1, ref)
         self.assertEqual(r2, ref)
         self.assertEqual(r3, ref)
Esempio n. 15
0
 def comparisonCheck(self, op, imin=0, imax=None, jmin=0, jmax=None):
     self.seqSetup(imin=imin, imax=imax, jmin=jmin, jmax=jmax)
     for i, j in zip(self.seqi, self.seqj):
         bi = intbv(i)
         bj = intbv(j)
         exec("ref = i %s j" % op)
         exec("r1 = bi %s j" % op)
         exec("r2 = i %s bj" % op)
         exec("r3 = bi %s bj" % op)
         self.assertEqual(r1, ref)
         self.assertEqual(r2, ref)
         self.assertEqual(r3, ref)
Esempio n. 16
0
 def comparisonCheck(self, op, imin=0, imax=None, jmin=0, jmax=None):
     self.seqSetup(imin=imin, imax=imax, jmin=jmin, jmax=jmax)
     for i, j in zip(self.seqi, self.seqj):
         bi = intbv(i)
         bj = intbv(j)
         ref = op(i, j)
         r1 = op(bi, j)
         r2 = op(i, bj)
         r3 = op(bi, bj)
         self.assertEqual(r1, ref)
         self.assertEqual(r2, ref)
         self.assertEqual(r3, ref)
Esempio n. 17
0
 def comparisonCheck(self, op, imin=0, imax=None, jmin=0, jmax=None):
     self.seqSetup(imin=imin, imax=imax, jmin=jmin, jmax=jmax)
     for i, j in zip(self.seqi, self.seqj):
         bi = intbv(i)
         bj = intbv(j)
         ref = op(i, j)
         r1 = op(bi, j)
         r2 = op(i, bj)
         r3 = op(bi, bj)
         self.assertEqual(r1, ref)
         self.assertEqual(r2, ref)
         self.assertEqual(r3, ref)
Esempio n. 18
0
 def testConcatMixToUnsizedBase(self):
     bases = []
     for base in self.bases:
         seq = (long(base, 2), Signal(long(base, 2)))
         bases.append(random.choice(seq))
     extslist = []
     for exts in self.extslist:
         newexts = []
         for ext in exts:
             seq = (ext, intbv(ext), Signal(intbv(ext)))
             newexts.append(random.choice(seq))
         extslist.append(newexts)
     self.ConcatToUnsizedBase(bases, extslist)
Esempio n. 19
0
 def testGetSliceLeftOpen(self):
     self.seqsSetup()
     for s in self.seqs:
         n = long(s, 2)
         bv = intbv(n)
         bvi = intbv(~n)
         for j in range(0, len(s) + 20):
             res = bv[:j]
             resi = bvi[:j]
             ref = long(getSliceLeftOpen(s, j), 2)
             self.assertEqual(res, ref)
             self.assertEqual(type(res), intbv)
             self.assertEqual(resi + ref, -1)
             self.assertEqual(type(res), intbv)
Esempio n. 20
0
 def testGetSliceLeftOpen(self):
     self.seqsSetup()
     for s in self.seqs:
         n = long(s, 2)
         bv = intbv(n)
         bvi = intbv(~n)
         for j in range(0, len(s) + 20):
             res = bv[:j]
             resi = bvi[:j]
             ref = long(getSliceLeftOpen(s, j), 2)
             assert res == ref
             assert type(res) == intbv
             assert resi + ref == -1
             assert type(res) == intbv
Esempio n. 21
0
 def testGetSliceLeftOpen(self):
     self.seqsSetup()
     for s in self.seqs:
         n = long(s, 2)
         bv = intbv(n)
         bvi = intbv(~n)
         for j in range(0,len(s)+20):
             res = bv[:j]
             resi = bvi[:j]
             ref = long(getSliceLeftOpen(s, j), 2)
             self.assertEqual(res, ref)
             self.assertEqual(type(res), intbv)
             self.assertEqual(resi+ref, -1)
             self.assertEqual(type(res), intbv)
Esempio n. 22
0
 def testGetItem(self):
     self.seqsSetup()
     for s in self.seqs:
         n = long(s, 2)
         bv = intbv(n)
         bvi = intbv(~n)
         for i in range(len(s) + 20):
             ref = long(getItem(s, i), 2)
             res = bv[i]
             resi = bvi[i]
             self.assertEqual(res, ref)
             self.assertEqual(type(res), bool)
             self.assertEqual(resi, ref ^ 1)
             self.assertEqual(type(resi), bool)
Esempio n. 23
0
 def testGetItem(self):
     self.seqsSetup()
     for s in self.seqs:
         n = long(s, 2)
         bv = intbv(n)
         bvi = intbv(~n)
         for i in range(len(s) + 20):
             ref = long(getItem(s, i), 2)
             res = bv[i]
             resi = bvi[i]
             assert res == ref
             assert type(res) == bool
             assert resi == ref ^ 1
             assert type(resi) == bool
Esempio n. 24
0
 def testGetItem(self):
     self.seqsSetup()
     for s in self.seqs:
         n = long(s, 2)
         bv = intbv(n)
         bvi = intbv(~n)
         for i in range(len(s) + 20):
             ref = long(getItem(s, i), 2)
             res = bv[i]
             resi = bvi[i]
             assert res == ref
             assert type(res) == bool
             assert resi == ref ^ 1
             assert type(resi) == bool
Esempio n. 25
0
 def testGetSliceLeftOpen(self):
     self.seqsSetup()
     for s in self.seqs:
         n = long(s, 2)
         bv = intbv(n)
         bvi = intbv(~n)
         for j in range(0, len(s) + 20):
             res = bv[:j]
             resi = bvi[:j]
             ref = long(getSliceLeftOpen(s, j), 2)
             assert res == ref
             assert type(res) == intbv
             assert resi + ref == -1
             assert type(res) == intbv
Esempio n. 26
0
 def testGetItem(self):
     self.seqsSetup()
     for s in self.seqs:
         n = long(s, 2)
         bv = intbv(n)
         bvi = intbv(~n)
         for i in range(len(s)+20):
             ref = long(getItem(s, i), 2)
             res = bv[i]
             resi = bvi[i]
             self.assertEqual(res, ref)
             self.assertEqual(type(res), bool)
             self.assertEqual(resi, ref^1)
             self.assertEqual(type(resi), bool)
Esempio n. 27
0
 def testConcatIntbvsBoolsToIntbv(self):
     if type(bool) is not type:
         return
     bases = [intbv(base) for base in self.bases]
     extslist = []
     for exts in self.extslist:
         newexts = []
         for ext in exts:
             if len(ext) == 1:
                 newexts.append(bool(int(ext)))
             else:
                 newexts.append(intbv(ext))
         extslist.append(newexts)
     self.ConcatToSizedBase(bases, extslist)
Esempio n. 28
0
 def binaryCheck(self, op, imin=0, imax=None, jmin=0, jmax=None):
     self.seqSetup(imin=imin, imax=imax, jmin=jmin, jmax=jmax)
     for i, j in zip(self.seqi, self.seqj):
         bi = intbv(long(i))
         bj = intbv(j)
         ref = op(long(i), j)
         r1 = op(bi, j)
         r2 = op(long(i), bj)
         r3 = op(bi, bj)
         #self.assertEqual(type(r1), intbv)
         #self.assertEqual(type(r2), intbv)
         #self.assertEqual(type(r3), intbv)
         self.assertEqual(r1, ref)
         self.assertEqual(r2, ref)
         self.assertEqual(r3, ref)
Esempio n. 29
0
    def testNoWrap(self):
        # Validate the base class fails for the wraps
        x = intbv(0, min=-8, max=8)
        try:
            x[:] += 15
            self.fail()
        except ValueError:
            pass

        x = intbv(0, min=-8, max=8)
        try:
            x[:] += 15
            self.fail()
        except ValueError:
            pass
Esempio n. 30
0
 def binaryCheck(self, op, imin=0, imax=None, jmin=0, jmax=None):
     self.seqSetup(imin=imin, imax=imax, jmin=jmin, jmax=jmax)
     for i, j in zip(self.seqi, self.seqj):
         bi = intbv(long(i))
         bj = intbv(j)
         ref = op(long(i), j)
         r1 = op(bi, j)
         r2 = op(long(i), bj)
         r3 = op(bi, bj)
         # self.assertEqual(type(r1), intbv)
         # self.assertEqual(type(r2), intbv)
         # self.assertEqual(type(r3), intbv)
         assert r1 == ref
         assert r2 == ref
         assert r3 == ref
Esempio n. 31
0
    def testNoWrap(self):
        # Validate the base class fails for the wraps
        x = intbv(0, min=-8, max=8)
        try:
            x[:] += 15
            self.fail()
        except ValueError:
            pass

        x = intbv(0, min=-8, max=8)
        try:
            x[:] += 15
            self.fail()
        except ValueError:
            pass
Esempio n. 32
0
 def toVerilog(self):
     lines = []
     ini = intbv(self._initval)[self._nrbits:]
     hi = self._nrbits
     for a in self._args:
         if isinstance(a, bool):
             w = 1
         else:
             w = len(a)
         lo = hi - w
         if w == 1:
             if isinstance(a, _Signal):
                 if a._type == bool:
                     lines.append("assign %s[%s] = %s;" %
                                  (self._name, lo, a._name))
                 else:
                     lines.append("assign %s[%s] = %s[0];" %
                                  (self._name, lo, a._name))
             else:
                 lines.append("assign %s[%s] = 'b%s;" %
                              (self._name, lo, bin(ini[lo])))
         else:
             if isinstance(a, _Signal):
                 lines.append("assign %s[%s-1:%s] = %s;" %
                              (self._name, hi, lo, a._name))
             else:
                 lines.append("assign %s[%s-1:%s] = 'b%s;" %
                              (self._name, hi, lo, bin(ini[hi:lo], w)))
         hi = lo
     return "\n".join(lines)
Esempio n. 33
0
 def toVHDL(self):
     lines = []
     ini = intbv(self._initval)[self._nrbits:]
     hi = self._nrbits
     for a in self._args:
         if isinstance(a, bool):
             w = 1
         else:
             w = len(a)
         lo = hi - w
         if w == 1:
             if isinstance(a, _Signal):
                 if a._type == bool: # isinstance(a._type , bool): <- doesn't work
                     lines.append("%s(%s) <= %s;" % (self._name, lo, a._name))
                 else:
                     lines.append("%s(%s) <= %s(0);" % (self._name, lo, a._name))
             else:
                  lines.append("%s(%s) <= '%s';" % (self._name, lo, bin(ini[lo])))
         else:
             if isinstance(a, _Signal):
                 lines.append("%s(%s-1 downto %s) <= %s;" % (self._name, hi, lo, a._name))
             else:
                 lines.append('%s(%s-1 downto %s) <= "%s";' % (self._name, hi, lo, bin(ini[hi:lo],w)))
         hi = lo
     return "\n".join(lines)
Esempio n. 34
0
    def __init__(self, *args):
        assert len(args) >= 2
        self._args = args
        self._sigargs = sigargs = []

        nrbits = 0
        val = 0
        for a in args:
            if isinstance(a, intbv):
                w = a._nrbits
                v = a._val
            elif isinstance(a, _Signal):
                sigargs.append(a)
                w = a._nrbits
                if isinstance(a._val, intbv):
                    v = a._val._val
                else:
                    v = a._val
            elif isinstance(a, bool):
                w = 1
                v = a
            elif isinstance(a, str):
                w = len(a)
                v = long(a, 2)
            else:
                raise TypeError("ConcatSignal: inappropriate argument type: %s" \
                                % type(a))
            nrbits += w
            val = val << w | v & (long(1) << w)-1
        self._initval = val
        ini = intbv(val)[nrbits:]
        _ShadowSignal.__init__(self, ini)
        gen = self.genfunc()
        self._waiter = _SignalTupleWaiter(gen)
Esempio n. 35
0
    def __init__(self, sig, left, right, signed):
        # XXX error checks
        if not signed:
            _ShadowSignal.__init__(self, sig[left:right])
        else:
            if sig[left - 1]:
                val = -(2**(left - right) - sig[left:right])
            else:
                val = sig[left:right]
            _ShadowSignal.__init__(
                self,
                intbv(val,
                      min=-2**(left - right - 1),
                      max=2**(left - right - 1)))

        self._sig = sig
        self._left = left
        self._right = right
        #         if right is None:
        #             gen = self._genfuncIndex()
        #         else:
        gen = self._genfuncSlice()
        self._waiter = _SignalWaiter(gen)
        # 6jun16 jb
        sig._read = True
        self._driven = 'wire'
Esempio n. 36
0
 def toVerilog(self):
     lines = []
     ini = intbv(self._initval)[self._nrbits:]
     hi = self._nrbits
     for a in self._args:
         if isinstance(a, bool):
             w = 1
         else:
             w = len(a)
         lo = hi - w
         if w == 1:
             if isinstance(a, _Signal):
                 if a._type == bool:
                     lines.append("assign %s[%s] = %s;" % (self._name, lo, a._name))
                 else:
                     lines.append("assign %s[%s] = %s[0];" % (self._name, lo, a._name))
             else:
                 lines.append("assign %s[%s] = 'b%s;" % (self._name, lo, bin(ini[lo])))
         else:
             if isinstance(a, _Signal):
                 lines.append("assign %s[%s-1:%s] = %s;" % (self._name, hi, lo, a._name))
             else:
                 lines.append("assign %s[%s-1:%s] = 'b%s;" % (self._name, hi, lo, bin(ini[hi:lo],w)))
         hi = lo
     return "\n".join(lines)
Esempio n. 37
0
    def __init__(self, *args):
        assert len(args) >= 2
        self._args = args
        self._sigargs = sigargs = []

        nrbits = 0
        val = 0
        for a in args:
            if isinstance(a, intbv):
                w = a._nrbits
                v = a._val
            elif isinstance(a, _Signal):
                sigargs.append(a)
                w = a._nrbits
                if isinstance(a._val, intbv):
                    v = a._val._val
                else:
                    v = a._val
            elif isinstance(a, bool):
                w = 1
                v = a
            elif isinstance(a, str):
                w = len(a)
                v = long(a, 2)
            else:
                raise TypeError("ConcatSignal: inappropriate argument type: %s" \
                                % type(a))
            nrbits += w
            val = val << w | v & (long(1) << w) - 1
        self._initval = val
        ini = intbv(val)[nrbits:]
        _ShadowSignal.__init__(self, ini)
        gen = self.genfunc()
        self._waiter = _SignalTupleWaiter(gen)
Esempio n. 38
0
 def toVHDL(self):
     lines = []
     ini = intbv(self._initval)[self._nrbits:]
     hi = self._nrbits
     for a in self._args:
         if isinstance(a, bool):
             w = 1
         else:
             w = len(a)
         lo = hi - w
         if w == 1:
             if isinstance(a, _Signal):
                 if a._type == bool:  # isinstance(a._type , bool): <- doesn't work
                     lines.append("%s(%s) <= %s;" %
                                  (self._name, lo, a._name))
                 else:
                     lines.append("%s(%s) <= %s(0);" %
                                  (self._name, lo, a._name))
             else:
                 lines.append("%s(%s) <= '%s';" %
                              (self._name, lo, bin(ini[lo])))
         else:
             if isinstance(a, _Signal):
                 lines.append("%s(%s-1 downto %s) <= %s;" %
                              (self._name, hi, lo, a._name))
             else:
                 lines.append('%s(%s-1 downto %s) <= "%s";' %
                              (self._name, hi, lo, bin(ini[hi:lo], w)))
         hi = lo
     return "\n".join(lines)
Esempio n. 39
0
def concat(base, *args):

    if isinstance(base, intbv):
        basewidth = base._nrbits
        val = base._val
    elif isinstance(base, (int, long)):
        if isinstance(base, bool):
            basewidth = 1
        else:
            basewidth = 0
        val = base
    elif isinstance(base, Signal):
        basewidth = base._nrbits
        val = base._val
    elif isinstance(base, str):
        basewidth = len(base)
        val = long(base, 2)
    else:
        raise TypeError("concat: inappropriate first argument type: %s" \
                        % type(base))

    width = 0
    for arg in args:
        if isinstance(arg, intbv):
            w = arg._nrbits
            v = arg._val
        elif isinstance(arg, Signal):
            w = arg._nrbits
            v = arg._val
        elif isinstance(arg, bool):
            w = 1
            v = arg
        elif isinstance(arg, str):
            w = len(arg)
            v = long(arg, 2)
        else:
            raise TypeError("concat: inappropriate argument type: %s" \
                            % type(arg))
        if not w:
            raise TypeError, "concat: arg to concat should have length"
        width += w
        val = val*(2**w) + v
        
    if basewidth:
        return intbv(val, _nrbits=basewidth + width)
    else:
        return intbv(val)
Esempio n. 40
0
 def conversionCheck(self, op, imin=0, imax=None):
     self.seqSetup(imin=imin, imax=imax)
     for i in self.seqi:
         bi = intbv(i)
         ref = op(i)
         r1 = op(bi)
         assert type(r1) == type(ref)
         assert r1 == ref
Esempio n. 41
0
 def unaryCheck(self, op, imin=0, imax=None):
     self.seqSetup(imin=imin, imax=imax)
     for i in self.seqi:
         bi = intbv(i)
         ref = op(i)
         r1 = op(bi)
         # self.assertEqual(type(r1), intbv)
         assert r1 == ref
Esempio n. 42
0
 def conversionCheck(self, op, imin=0, imax=None):
     self.seqSetup(imin=imin, imax=imax)
     for i in self.seqi:
         bi = intbv(i)
         ref = op(i)
         r1 = op(bi)
         self.assertEqual(type(r1), type(ref))
         self.assertEqual(r1, ref)
Esempio n. 43
0
 def conversionCheck(self, op, imin=0, imax=None):
     self.seqSetup(imin=imin, imax=imax)
     for i in self.seqi:
         bi = intbv(i)
         ref = op(i)
         r1 = op(bi)
         assert type(r1) == type(ref)
         assert r1 == ref
Esempio n. 44
0
 def conversionCheck(self, op, imin=0, imax=None):
     self.seqSetup(imin=imin, imax=imax)
     for i in self.seqi:
         bi = intbv(i)
         ref = op(i)
         r1 = op(bi)
         self.assertEqual(type(r1), type(ref))
         self.assertEqual(r1, ref)
Esempio n. 45
0
 def unaryCheck(self, op, imin=0, imax=None):
     self.seqSetup(imin=imin, imax=imax)
     for i in self.seqi:
         bi = intbv(i)
         ref = op(i)
         r1 = op(bi)
         #self.assertEqual(type(r1), intbv)
         self.assertEqual(r1, ref)
Esempio n. 46
0
    def testSliceAssign(self):
        a = intbv(min=-24, max=34)
        for i in (-24, -2, 13, 33):
            for k in (6, 9, 10):
                a[:] = 0
                a[k:] = i
                assert a == i
        for i in (-25, -128, 34, 35, 229):
            for k in (0, 9, 10):
                with pytest.raises(ValueError):
                    a[k:] = i

        a = intbv(5)[8:]
        for v in (0, 2**8 - 1, 100):
            a[:] = v
        for v in (-1, 2**8, -10, 1000):
            with pytest.raises(ValueError):
                a[:] = v
Esempio n. 47
0
 def testConcatMixBoolToSizedBase(self):
     if type(bool) is not type:
         return
     bases = []
     for base in self.bases:
         seq = (base, intbv(base), Signal(intbv(base)))
         bases.append(random.choice(seq))
     extslist = []
     for exts in self.extslist:
         newexts = []
         for ext in exts:
             if len(ext) == 1:
                 seq = (ext, bool(int(ext)), Signal(bool(int(ext))))
             else:
                 seq = (ext, intbv(ext), Signal(intbv(ext)))
             newexts.append(random.choice(seq))
         extslist.append(newexts)
     self.ConcatToSizedBase(bases, extslist)
Esempio n. 48
0
    def testSliceAssign(self):
        a = intbv(min=-24, max=34)
        for i in (-24, -2, 13, 33):
            for k in (6, 9, 10):
                a[:] = 0
                a[k:] = i
                assert a == i
        for i in (-25, -128, 34, 35, 229):
            for k in (0, 9, 10):
                with pytest.raises(ValueError):
                    a[k:] = i

        a = intbv(5)[8:]
        for v in (0, 2 ** 8 - 1, 100):
            a[:] = v
        for v in (-1, 2 ** 8, -10, 1000):
            with pytest.raises(ValueError):
                a[:] = v
Esempio n. 49
0
 def augmentedAssignCheck(self, op, imin=0, imax=None, jmin=0, jmax=None):
     self.seqSetup(imin=imin, imax=imax, jmin=jmin, jmax=jmax)
     for i, j in zip(self.seqi, self.seqj):
         bj = intbv(j)
         ref = long(i)
         exec("ref %s j" % op)
         r1 = bi1 = intbv(long(i))
         exec("r1 %s j" % op)
         r2 = long(i)
         exec("r2 %s bj" % op)
         r3 = bi3 = intbv(long(i))
         exec("r3 %s bj" % op)
         self.assertEqual(type(r1), intbv)
         self.assertEqual(type(r3), intbv)
         self.assertEqual(r1, ref)
         self.assertEqual(r2, ref)
         self.assertEqual(r3, ref)
         self.assert_(r1 is bi1)
         self.assert_(r3 is bi3)
Esempio n. 50
0
 def augmentedAssignCheck(self, op, imin=0, imax=None, jmin=0, jmax=None):
     self.seqSetup(imin=imin, imax=imax, jmin=jmin, jmax=jmax)
     for i, j in zip(self.seqi, self.seqj):
         bj = intbv(j)
         ref = long(i)
         ref = op(ref, j)
         r1 = bi1 = intbv(long(i))
         r1 = op(r1, j)
         r2 = long(i)
         r2 = op(r2, bj)
         r3 = bi3 = intbv(long(i))
         r3 = op(r3, bj)
         self.assertEqual(type(r1), intbv)
         self.assertEqual(type(r3), intbv)
         self.assertEqual(r1, ref)
         self.assertEqual(r2, ref)
         self.assertEqual(r3, ref)
         self.assertTrue(r1 is bi1)
         self.assertTrue(r3 is bi3)
Esempio n. 51
0
 def augmentedAssignCheck(self, op, imin=0, imax=None, jmin=0, jmax=None):
     self.seqSetup(imin=imin, imax=imax, jmin=jmin, jmax=jmax)
     for i, j in zip(self.seqi, self.seqj):
         bj = intbv(j)
         ref = long(i)
         exec("ref %s j" % op)
         r1 = bi1 = intbv(long(i))
         exec("r1 %s j" % op)
         r2 = long(i)
         exec("r2 %s bj" % op)
         r3 = bi3 = intbv(long(i))
         exec("r3 %s bj" % op)
         self.assertEqual(type(r1), intbv)
         self.assertEqual(type(r3), intbv)
         self.assertEqual(r1, ref)
         self.assertEqual(r2, ref)
         self.assertEqual(r3, ref)
         self.assert_(r1 is bi1)
         self.assert_(r3 is bi3)
Esempio n. 52
0
 def testSetSliceLeftOpen(self):
     self.seqsSetup()
     toggle = 0
     for s in self.seqs:
         n = long(s, 2)
         for j in range(0, len(s) + 5):
             for v in self.seqv:
                 bv = intbv(n)
                 bvi = intbv(~n)
                 val = long(v, 2)
                 toggle ^= 1
                 if toggle:
                     val = intbv(val)
                 bv[:j] = val
                 bvi[:j] = -1 - val
                 ref = long(setSliceLeftOpen(s, j, v), 2)
                 self.assertEqual(bv, ref)
                 refi = ~long(setSliceLeftOpen(s, j, v), 2)
                 self.assertEqual(bvi, refi)
Esempio n. 53
0
 def augmentedAssignCheck(self, op, imin=0, imax=None, jmin=0, jmax=None):
     self.seqSetup(imin=imin, imax=imax, jmin=jmin, jmax=jmax)
     for i, j in zip(self.seqi, self.seqj):
         bj = intbv(j)
         ref = long(i)
         ref = op(ref, j)
         r1 = bi1 = intbv(long(i))
         r1 = op(r1, j)
         r2 = long(i)
         r2 = op(r2, bj)
         r3 = bi3 = intbv(long(i))
         r3 = op(r3, bj)
         self.assertEqual(type(r1), intbv)
         self.assertEqual(type(r3), intbv)
         self.assertEqual(r1, ref)
         self.assertEqual(r2, ref)
         self.assertEqual(r3, ref)
         self.assertTrue(r1 is bi1)
         self.assertTrue(r3 is bi3)
Esempio n. 54
0
 def augmentedAssignCheck(self, op, imin=0, imax=None, jmin=0, jmax=None):
     self.seqSetup(imin=imin, imax=imax, jmin=jmin, jmax=jmax)
     for i, j in zip(self.seqi, self.seqj):
         bj = intbv(j)
         ref = long(i)
         ref = op(ref, j)
         r1 = bi1 = intbv(long(i))
         r1 = op(r1, j)
         r2 = long(i)
         r2 = op(r2, bj)
         r3 = bi3 = intbv(long(i))
         r3 = op(r3, bj)
         assert type(r1) == intbv
         assert type(r3) == intbv
         assert r1 == ref
         assert r2 == ref
         assert r3 == ref
         assert r1 is bi1
         assert r3 is bi3
Esempio n. 55
0
 def testSetSliceLeftOpen(self):
     self.seqsSetup()
     toggle = 0
     for s in self.seqs:
         n = long(s, 2)
         for j in range(0, len(s) + 5):
             for v in self.seqv:
                 bv = intbv(n)
                 bvi = intbv(~n)
                 val = long(v, 2)
                 toggle ^= 1
                 if toggle:
                     val = intbv(val)
                 bv[:j] = val
                 bvi[:j] = -1 - val
                 ref = long(setSliceLeftOpen(s, j, v), 2)
                 assert bv == ref
                 refi = ~long(setSliceLeftOpen(s, j, v), 2)
                 assert bvi == refi
Esempio n. 56
0
 def augmentedAssignCheck(self, op, imin=0, imax=None, jmin=0, jmax=None):
     self.seqSetup(imin=imin, imax=imax, jmin=jmin, jmax=jmax)
     for i, j in zip(self.seqi, self.seqj):
         bj = intbv(j)
         ref = long(i)
         ref = op(ref, j)
         r1 = bi1 = intbv(long(i))
         r1 = op(r1, j)
         r2 = long(i)
         r2 = op(r2, bj)
         r3 = bi3 = intbv(long(i))
         r3 = op(r3, bj)
         assert type(r1) == intbv
         assert type(r3) == intbv
         assert r1 == ref
         assert r2 == ref
         assert r3 == ref
         assert r1 is bi1
         assert r3 is bi3
Esempio n. 57
0
 def testGetSlice(self):
     self.seqsSetup()
     for s in self.seqs:
         n = long(s, 2)
         bv = intbv(n)
         bvi = intbv(~n)
         for i in range(1, len(s) + 20):
             for j in range(0, len(s) + 20):
                 try:
                     res = bv[i:j]
                     resi = bvi[i:j]
                 except ValueError:
                     assert i <= j
                     continue
                 ref = long(getSlice(s, i, j), 2)
                 assert res == ref
                 assert type(res) == intbv
                 mask = (2 ** (i - j)) - 1
                 assert resi == ref ^ mask
                 assert type(resi) == intbv