Ejemplo n.º 1
0
    def smoke(self):
        @vsc.randobj
        class my_cls(object):
            def __init__(self):
                self.a = vsc.rand_uint8_t()
                self.b = vsc.rand_uint8_t()

        # First, test that values vary
        init_a = 0
        init_b = 0
        it = my_cls()

        for i in range(20):
            with it.randomize_with():
                it.a != init_a
                it.b != init_b

            self.assertNotEqual(it.a, init_a)
            self.assertNotEqual(it.b, init_b)
            init_a = it.a
            init_b = it.b

        # Now, disable rand_mode for a
        with vsc.raw_mode():
            it.a.rand_mode = False

            self.assertEqual(it.a.rand_mode, False)
            self.assertEqual(it.b.rand_mode, True)

        for i in range(20):
            with it.randomize_with():
                it.b != init_b

            self.assertEqual(it.a, init_a)
            self.assertNotEqual(it.b, init_b)
            init_a = it.a
            init_b = it.b

        # Now, go back
        with vsc.raw_mode():
            it.a.rand_mode = True

            self.assertEqual(it.a.rand_mode, True)
            self.assertEqual(it.b.rand_mode, True)

        for i in range(20):
            with it.randomize_with():
                it.a != init_a
                it.b != init_b

            self.assertNotEqual(it.a, init_a)
            self.assertNotEqual(it.b, init_b)
            init_a = it.a
            init_b = it.b
Ejemplo n.º 2
0
 def pre_randomize(self):
     super().pre_randomize()
     if(riscv_reg_t.SP in [cfg.reserved_regs, self.reserved_rd]):
         self.use_sp_as_rs1 = 0
         with vsc.raw_mode():
             self.use_sp_as_rs1.rand_mode = False
         self.sp_rnd_order_c.constraint_mode(False)
 def pre_randomize(self):
     super().pre_randomize()
     with vsc.raw_mode():
         self.fs1.rand_mode = bool(self.has_fs1)
         self.fs2.rand_mode = bool(self.has_fs2)
         self.fs3.rand_mode = bool(self.has_fs3)
         self.fd.rand_mode = bool(self.has_fd)
Ejemplo n.º 4
0
 def pre_randomize(self):
     with vsc.raw_mode():
         self.rs1.rand_mode = bool(self.has_rs1)
         self.rs2.rand_mode = bool(self.has_rs2)
         self.rd.rand_mode = bool(self.has_rd)
         self.imm.rand_mode = bool(self.has_imm)
         if self.category != riscv_instr_category_t.CSR:
             self.csr.rand_mode = False
Ejemplo n.º 5
0
    def test_obj_getpart(self):
        @vsc.randobj
        class my_c(object):
            def __init__(self):
                self.a = vsc.rand_uint16_t()

        c = my_c()
        c.a = (25 << 8)

        with vsc.raw_mode():
            self.assertEqual(c.a[15:8], 25)
Ejemplo n.º 6
0
 def task(self, a, b):
     print("self.value: %d" % self.value)
     with vsc.raw_mode():
         with vsc.randomize_with(self.value):
             self.value in vsc.rangelist(a, b)
Ejemplo n.º 7
0
 def pre_randomize(self):
     super().pre_randomize()
     with vsc.raw_mode():
         self.rs3.rand_mode = bool(self.has_rs3)
Ejemplo n.º 8
0
    def test_two_layer(self):
        import vsc

        @vsc.randobj
        class Parent:
            def __init__(self):
                self.id = 0
                self.c1 = vsc.rand_list_t(vsc.rand_attr(Child1()))
                for i in range(2):
                    self.c1.append(vsc.rand_attr(Child1()))

                self.c2 = vsc.rand_list_t(vsc.rand_attr(Child2()))
                for i in range(2):
                    self.c2.append(vsc.rand_attr(Child2()))

            @vsc.constraint
            def parent_c(self):
                self.c1[0].a[1].value == self.c2[0].x[1].value  # Multi-level
                pass
#                self.c1[0].a[1].value == 2

#                with vsc.foreach(self.c1, idx=True) as i:
#                    self.c1[i].a[0].value == self.c2[i].x[0].value

        @vsc.randobj
        class Field():
            def __init__(self, name, def_value):
                self.name = name
                self.value = vsc.rand_uint8_t(def_value)

        @vsc.randobj
        class Child1:
            def __init__(self):
                self.a = vsc.rand_list_t(vsc.rand_attr(Field('an', 10)))
                for i in range(2):
                    self.a.append(vsc.rand_attr(Field('an', 10)))

                self.b = vsc.rand_list_t(vsc.rand_attr(Field('bn', 10)))
                for i in range(1):
                    self.b.append(vsc.rand_attr(Field('bn', 10)))

            @vsc.constraint
            def test_c(self):
                #                self.a[0].value < self.a[1].value
                #                self.a[0].value == self.a[1].value
                pass

        @vsc.randobj
        class Child2:
            def __init__(self):
                self.x = vsc.rand_list_t(vsc.rand_attr(Field('x', 10)))
                for i in range(2):
                    self.x.append(vsc.rand_attr(Field('x', 10)))

                self.y = vsc.rand_list_t(vsc.rand_attr(Field('y', 10)))
                for i in range(1):
                    self.y.append(vsc.rand_attr(Field('y', 10)))

            @vsc.constraint
            def test_c(self):
                self.x[0].value < self.x[1].value
                pass

        inst = Parent()
        inst.randomize(debug=0)

        for i in range(inst.c2.size):
            print("c[%d].x[0].value=%d c2[%d].x[1].value=%d" %
                  (i, inst.c2[i].x[0].value, i, inst.c2[i].x[1].value))
            with vsc.raw_mode():
                print("%s %s" % (inst.c2[i].x[0].value.get_model().fullname,
                                 inst.c2[i].x[1].value.get_model().fullname))

        for i in range(inst.c2.size):
            #            self.assertEqual(inst.c1[i].a[0].value, inst.c1[i].a[1].value)
            self.assertLess(inst.c2[i].x[0].value, inst.c2[i].x[1].value)

        print(inst.c1[0].a[0].value)
        print(inst.c1[0].a[1].value)
        print(inst.c2[0].x[0].value)
Ejemplo n.º 9
0
 def set_field_rand_mode(self, fld_name, rand_on):
     fld_hd = self.get_field_by_name(fld_name)
     with vsc.raw_mode():
         fld_hd.rand_mode = bool(rand_on)