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
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)
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
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)
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)
def pre_randomize(self): super().pre_randomize() with vsc.raw_mode(): self.rs3.rand_mode = bool(self.has_rs3)
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)
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)