def gpr_c(self): with vsc.foreach(self.gpr, idx=True) as i: self.gpr[i].not_inside( vsc.rangelist(self.sp, self.tp, self.scratch_reg, self.pmp_reg, riscv_reg_t.ZERO, riscv_reg_t.RA, riscv_reg_t.GP)) vsc.unique(self.gpr)
def avail_regs_c(self): # TODO self.avail_regs.size == 10 # self.num_of_avail_regs vsc.unique(self.avail_regs) with vsc.foreach(self.avail_regs, idx=True) as i: self.avail_regs[i].not_inside(cfg.reserved_regs) self.avail_regs[i] != riscv_reg_t.ZERO
def ab_c(self): self.a != 0 self.b != 0 self.c != 0 self.d != 0 vsc.unique(self.a, self.b, self.c, self.d)
def reg_c(self): vsc.solve_order(self.num_of_regs, self.reg) self.reg.size == self.num_of_regs self.offset.size == self.num_of_regs with vsc.foreach(self.reg, idx=True) as i: self.reg[i].not_inside( vsc.rangelist(self.reserved_regs, reg_t.A)) vsc.unique(self.reg)
def rs1_c(self): # TODO constraint size with num_of_rs1_reg vsc.solve_order(self.num_of_rs1_reg, self.rs1_reg) self.rs1_reg.size == 1 # self.num_of_rs1_reg self.offset.size == 1 # self.num_of_rs1_reg with vsc.foreach(self.rs1_reg, idx = True) as i: self.rs1_reg[i].not_inside(vsc.rangelist(cfg.reserved_regs, self.reserved_rd, riscv_reg_t.ZERO)) vsc.unique(self.rs1_reg)
def gpr_c(self): self.gpr0.not_inside(vsc.rangelist(self.sp, self.tp, self.scratch_reg, self.pmp_reg, riscv_reg_t.ZERO, riscv_reg_t.RA, riscv_reg_t.GP)) self.gpr1.not_inside(vsc.rangelist(self.sp, self.tp, self.scratch_reg, self.pmp_reg, riscv_reg_t.ZERO, riscv_reg_t.RA, riscv_reg_t.GP)) self.gpr2.not_inside(vsc.rangelist(self.sp, self.tp, self.scratch_reg, self.pmp_reg, riscv_reg_t.ZERO, riscv_reg_t.RA, riscv_reg_t.GP)) self.gpr3.not_inside(vsc.rangelist(self.sp, self.tp, self.scratch_reg, self.pmp_reg, riscv_reg_t.ZERO, riscv_reg_t.RA, riscv_reg_t.GP)) vsc.unique(self.gpr0, self.gpr1, self.gpr2, self.gpr3)
def randomize_avail_regs(self): if self.avail_regs.size > 0: try: with vsc.randomize_with(self.avail_regs): vsc.unique(self.avail_regs) self.avail_regs[0].inside( vsc.rangelist(vsc.rng(riscv_reg_t.S0, riscv_reg_t.A5))) with vsc.foreach(self.avail_regs, idx=True) as i: self.avail_regs[i].not_inside( vsc.rangelist(cfg.reserved_regs, self.reserved_rd)) except Exception: logging.critical("Cannot randomize avail_regs") sys.exit(1)
def legal_loop_regs_c(self): self.num_of_nested_loop.inside(vsc.rangelist(1, 2)) self.loop_limit_reg.size.inside(vsc.rangelist((1, 32))) self.loop_cnt_reg.size.inside(vsc.rangelist((1, 8))) vsc.solve_order(self.num_of_nested_loop, self.loop_cnt_reg) vsc.solve_order(self.num_of_nested_loop, self.loop_limit_reg) with vsc.foreach(self.loop_cnt_reg, idx=True) as i: self.loop_cnt_reg[i] != riscv_reg_t.ZERO with vsc.foreach(cfg.reserved_regs, idx=True) as j: self.loop_cnt_reg[i] != cfg.reserved_regs[j] with vsc.foreach(self.loop_limit_reg, idx=True) as i: with vsc.foreach(cfg.reserved_regs, idx=True) as j: self.loop_limit_reg[i] != cfg.reserved_regs[j] vsc.unique(self.loop_cnt_reg) vsc.unique(self.loop_limit_reg) self.loop_cnt_reg.size == self.num_of_nested_loop self.loop_limit_reg.size == self.num_of_nested_loop
def ab_c(self): vsc.unique(self.v1_1, self.v1_2, self.v1_3, self.v1_4, self.v1_5, self.v1_6, self.v1_7, self.v1_8, self.v1_9, self.v1_10, self.v1_11, self.v1_12, self.v1_13, self.v1_14, self.v1_15, self.v1_16) # vsc.unique(self.v1_16, self.v2_1) vsc.unique(self.v2_1, self.v2_2, self.v2_3, self.v2_4, self.v2_5, self.v2_6, self.v2_7, self.v2_8, self.v2_9, self.v2_10, self.v2_11, self.v2_12, self.v2_13, self.v2_14, self.v2_15, self.v2_16) # vsc.unique(self.v2_16, self.v3_1) vsc.unique(self.v3_1, self.v3_2, self.v3_3, self.v3_4, self.v3_5, self.v3_6, self.v3_7, self.v3_8, self.v3_9, self.v3_10, self.v3_11, self.v3_12, self.v3_13, self.v3_14, self.v3_15, self.v3_16) # vsc.unique(self.v3_16, self.v4_1) vsc.unique(self.v4_1, self.v4_2, self.v4_3, self.v4_4, self.v4_5, self.v4_6, self.v4_7, self.v4_8, self.v4_9, self.v4_10, self.v4_11, self.v4_12, self.v4_13, self.v4_14, self.v4_15, self.v4_16)
def ab_c(self): with vsc.foreach(self.vals) as it: it < 64 vsc.unique(self.vals)
def ab_c(self): vsc.unique(self.vals)
def a_c(self): vsc.unique(self.a, self.b, self.c)
def legel_c(self): vsc.unique(self.sub_program_id) with vsc.foreach(self.sub_program_id, idx=True) as i: self.sub_program_id[i] != self.program_id
def list_c(self): vsc.unique(self.selectedList)