Example #1
0
def test4():
    I1 = ila.Abstraction('a')
    inp1 = I1.inp('inp', 1)
    r1 = I1.reg('r1', 5)
    r1a = I1.reg('ra', 5)

    I1.decode_exprs = [inp1 == 1, inp1 == 0]

    uI1 = I1.add_microabstraction("mic", (r1 != 0))

    I1.set_next('r1', ila.ite(inp1 == 1, I1.const(1, 5), I1.const(0, 5)))
    I1.set_next('ra', r1a)

    ur1 = uI1.reg('ur1', 5)

    r1p = uI1.getreg('r1')
    uI1.set_init('ur1', uI1.const(0, 5))
    uI1.set_next('ur1', ur1 + 1)

    ura1 = uI1.getreg('ra')
    uI1.set_next('ra', ura1 - 1)
    uI1.set_next('r1', ila.ite(ura1 == 1, I1.const(0, 5), I1.const(1, 5)))

    #######################
    I2 = ila.Abstraction('b')
    inp2 = I2.inp('inp', 1)
    r2 = I2.reg('r1', 5)
    r2a = I2.reg('ra', 5)

    I2.decode_exprs = [inp2 == 1, inp2 == 0]

    uI2 = I2.add_microabstraction("mic", (r2 != 0))

    I2.set_next('r1', ila.ite(inp2 == 1, I2.const(1, 5), I2.const(0, 5)))
    I2.set_next('ra', r2a)

    ur2 = uI2.reg('ur1', 5)

    r2p = uI2.getreg('r1')
    uI2.set_init('ur1', uI2.const(0, 5))
    uI2.set_next('ur1', ur2 + 1)

    ura2 = uI2.getreg('ra')
    uI2.set_next('ra', uI2.getreg('ra') - 1)
    uI2.set_next('r1', ila.ite(ura2 == 1, I2.const(0, 5), I2.const(1, 5)))

    print 'simple signature test:'
    print ila.eqcheckSimple(I1, I2)

    print 'full test'
    u1 = I1.newUnroller(uI1, False)
    u1.unrollTo(4)

    u2 = I2.newUnroller(uI2, False)
    u2.unrollTo(4)

    inductiveAssumpt = [(1, "r1", "r1"), (1, "ra", "ra"), (1, "ur1", "ur1")]
    print ila.eqcheck(u1, u2, "r1", "r1", inductiveAssumpt)
    print ila.eqcheck(u1, u2, "ra", "ra", inductiveAssumpt)
    print ila.eqcheck(u1, u2, "ur1", "ur1", inductiveAssumpt)
Example #2
0
def main():
    iteAsNode = False
    iteAsNode = True
    hornFile = "tmp/horn_test_node.smt2"
    A = getDummyILA()
    ila.setloglevel(3, "")
    ila.enablelog("Horn")
    A.hornifyAll("tmp/horn_test_ILA.smt2")
    r2_nxt = A.get_next('r2')
    A.hornifyNode(r2_nxt, "r2_nxt")
    A.exportHornToFile(hornFile)

    m = ila.Abstraction("fun")
    x = m.reg('x', 8)
    y = m.reg('y', 16)
    f = m.fun('foo', 8, [8, 16])
    r = ila.appfun(f, x, y)
    m.hornifyBvAsInt(True)
    m.hornifyNode(r, "foo")
    m.exportHornToFile(hornFile)

    alu = ila.Abstraction("alu")
    alu.hornifyBvAsInt(True)
    aluFile = 'tmp/alu.txt'
    if not os.path.exists(aluFile):
        print 'alu file not exist'
        return
    alu.importAll(aluFile)
    r0_nxt = alu.get_next('r0')
    r1_nxt = alu.get_next('r1')
    pc_nxt = alu.get_next('pc')
    rom_nxt = alu.get_next('rom')
    """
    alu.hornifyNode(pc_nxt, "pc_nxt")
    alu.hornifyNode(r0_nxt, "r0_nxt")
    alu.hornifyNode(r1_nxt, "r1_nxt")
    alu.hornifyNode(rom_nxt, "rom_nxt")
    alu.exportHornToFile(hornFile)
    """

    alu.addHornInstr('alu_instr', alu.bool(True))
    alu.addHornNext('alu_instr', 'pc', pc_nxt)
    alu.addHornNext('alu_instr', 'r0', r0_nxt)
    alu.addHornNext('alu_instr', 'r1', r1_nxt)
    alu.addHornNext('alu_instr', 'rom', rom_nxt)

    alu.addHornChild('alu_child', 'alu_instr', alu.bool(True))
    alu.addHornNext('alu_child', 'pc', pc_nxt)
    alu.addHornNext('alu_child', 'r0', r0_nxt)
    alu.addHornNext('alu_child', 'r1', r1_nxt)
    alu.addHornNext('alu_child', 'rom', rom_nxt)
    alu.generateHornMapping('Interleave')
    #alu.generateHornMapping ('Blocking')
    alu.exportHornToFile(hornFile)
Example #3
0
def loadILAs(vname, cname):
    vILA = ila.Abstraction('vaes')
    vILA.importAll(os.path.join(vname, 'all'))
    vuILA = vILA.get_microabstraction('aes_compute')
    vuILA.importAll(os.path.join(vname, 'allu'))

    cILA = ila.Abstraction('caes')
    cILA.importAll(os.path.join(cname, 'all'))
    cuILA = cILA.get_microabstraction('aes_compute')
    cuILA.importAll(os.path.join(cname, 'allu'))

    return (vILA, vuILA, cILA, cuILA)
Example #4
0
def loadILAs():
    vILA = ila.Abstraction('vaes')
    vILA.importAll('vILA/all')
    vuILA = vILA.get_microabstraction('aes_compute')
    vuILA.importAll('vILA/allu')

    cILA = ila.Abstraction('caes')
    cILA.importAll('cILA/all')
    cuILA = cILA.get_microabstraction('aes_compute')
    cuILA.importAll('cILA/allu')

    return (vILA, vuILA, cILA, cuILA)
Example #5
0
def test3():
    I1 = ila.Abstraction('a')
    inp1 = I1.inp('inp', 1)
    r1 = I1.reg('r1', 5)

    I1.decode_exprs = [inp1 == 1, inp1 == 0]

    uI1 = I1.add_microabstraction("mic", (r1 != 0) & (r1 < 2))

    I1.set_next('r1', ila.ite(inp1 == 1, I1.const(1, 5), I1.const(0, 5)))

    ur1 = uI1.reg('ur1', 5)
    r1p = uI1.getreg('r1')
    uI1.set_init('ur1', uI1.const(0, 5))
    uI1.set_next('ur1', ur1 + 1)
    uI1.set_next('r1', ila.ite(ur1 > 5, ur1, r1p))

    #######################

    I2 = ila.Abstraction('b')
    inp2 = I2.inp('inp', 1)
    r2 = I2.reg('r1', 5)

    uI2 = I2.add_microabstraction("mic", (r2 != 0) & (r2 < 2))

    I2.set_next('r1', ila.ite(inp2 == 1, I2.const(1, 5), I2.const(0, 5)))

    I2.decode_exprs = [inp2 == 1, inp2 == 0]
    ur2 = uI2.reg('ur1', 5)
    r2p = uI2.getreg('r1')
    uI2.set_init('ur1', uI1.const(0, 5))
    uI2.set_next('ur1', ur2 + 3)
    uI2.set_next('r1', ila.ite(ur2 > 5, ur2, r2p))

    print 'simple signature test:'
    print ila.eqcheckSimple(I1, I2)

    print 'full test'
    u1 = I1.newUnroller(uI1, True)
    u1.addAssumption(inp1 == 1)
    u1.unrollTo(20)
    u1.checkAssertion(~(uI1.fetch_valid))
    u1.checkAssertion(r1 == 6)

    u2 = I2.newUnroller(uI2, True)
    u2.addAssumption(inp2 == 1)
    u2.unrollTo(20)
    u2.checkAssertion(~(uI2.fetch_valid))
    u2.checkAssertion(r2 == 6)

    print ila.eqcheck(u1, u2, 'r1', 'r1')
Example #6
0
 def __init__(self):
     self.model = ila.Abstraction('GPU_ptx')
     self.bar_spec = barSpec()
     self.thread_num = 2
     self.createStates()
     self.set_init()
     self.add_assumptions()
Example #7
0
def createHorn():
    all_addrs = [addr for addr in xrange(0xfe00, 0xfe04)]
    all_child = [1, 2, 3, 4]
    all_states = ['acc_state', 'bytes_read']

    m = ila.Abstraction('acc')

    chcPath = '../horn'
    if not os.path.exists(chcPath):
        os.makedirs(chcPath)

    for addr in all_addrs:
        decodePath = 'asts/0x%x/decode' % addr
        decode = m.importOne(decodePath)
        m.hornifyNode(decode, 'decode_%x' % addr, True)
        for s in all_states:
            nxtPath = 'asts/0x%x/%s' % (addr, s)
            nxt = m.importOne(nxtPath)
            m.hornifyNode(nxt, 'instr_%x_%s_nxt' % (addr, s), True)

    for st in all_child:
        decodePath = 'asts/st%d/decode' % st
        decode = m.importOne(decodePath)
        m.hornifyNode(decode, 'decode_st%d' % st, True)
        for s in all_states:
            nxtPath = 'asts/st%d/%s' % (st, s)
            nxt = m.importOne(nxtPath)
            m.hornifyNode(nxt, 'child_%d_%s_nxt' % (st, s), True)

    m.exportHornToFile('%s/ila.smt' % chcPath)
Example #8
0
    def set_init(self):
        bar_spec = ptxILA.barSpec()
        self.a_is_bar = (self.opcode_a == bar_spec.BAR_OPCODE)
        #self.a_is_bar = (self.pc_a == 20)
        self.a_previous_bar = self.model.bit('a_previous_bar')
        self.model.set_next('a_previous_bar', self.a_is_bar)
        self.a_cross_bar_flag = self.model.bit('a_cross_bar_flag')
        self.model.set_next(
            'a_cross_bar_flag',
            ila.ite((self.a_is_bar == ila.bool(False)) &
                    (self.a_previous_bar == ila.bool(True)), ila.bool(True),
                    self.a_cross_bar_flag))
        self.b_is_bar = (self.opcode_b == bar_spec.BAR_OPCODE)
        self.b_come_to_bar_flag = self.model.bit('b_come_to_bar_flag')
        self.model.set_next(
            'b_come_to_bar_flag',
            ila.ite(self.b_is_bar, ila.bool(True), self.b_come_to_bar_flag))

        self.predicate_one = self.model.bit('predicate_one')
        self.model.set_next('predicate_one', (~self.a_cross_bar_flag) |
                            (self.b_come_to_bar_flag))

        self.model.set_init('a_previous_bar', self.model.bool(False))
        self.model.set_init('a_cross_bar_flag', self.model.bool(False))
        self.model.set_init('b_come_to_bar_flag', self.model.bool(False))
        self.model.set_init('predicate_one', self.model.bool(True))

        golden = ila.Abstraction('golden')
        g_prop = golden.bit('prop')
        golden.set_next('prop', golden.bool(True))
        golden.set_init('prop', golden.bool(True))
        ila.bmc(30, self.model, self.predicate_one, 1, golden, g_prop)
Example #9
0
def template():
    # Create a model container.
    m = ila.Abstraction('tutorial')

    # Create/define states in the model.
    regs = []
    for i in xrange(0, 8):
        regName = 'reg{}'.format(i)
        regs.append(m.reg(regName, 8))

    instr = m.reg('input', 16)
    out = m.reg('output', 8)

    # Define next state function.
    imm = instr[7:0]
    src1 = ila.choice('src1', regs + [imm])
    src2 = ila.choice('src2', regs + [imm])
    out_nxt = ila.choice('out', [src1 + src2, src1 * src2])

    # Assign the next state function.
    m.set_next('output', out_nxt)

    # Define how to decode.
    m.decode_exprs = [instr[15:8] == i for i in xrange(0, 0x100)]

    return m
Example #10
0
File: syn.py Project: emzha/IMDb
def createILA():
    m = ila.Abstraction('acc_regs')

    # input ports
    cmd     = m.inp ('cmd', 2)
    cmdaddr = m.inp ('cmdaddr', 16)
    cmddata = m.inp ('cmddata', 8)

    # arch states
    state   = m.reg ('acc_state', 3)
    rd_addr = m.reg ('rd_addr', 16)
    wr_addr = m.reg ('wr_addr', 16)
    oplen   = m.reg ('acc_len', 16)
    xram    = m.mem ('XRAM', 16, 8)

    # micro-arch states
    bytes_read = m.reg ('bytes_read', 16)

    # fetch function and fetch valid function
    m.fetch_expr = ila.concat ([state, cmd, cmdaddr, cmddata])
    m.fetch_valid = (cmd == 1) | (cmd == 2)

    # state_nxt
    state_nxt = ila.choice ('state_nxt', [
                    m.const (0, 3), m.const (1, 3), m.const (2, 3),
                    m.const (3, 3), m.const (4, 3), state])
    m.set_next ('acc_state', state_nxt)

    # NOTE next state functions for rd_addr, wr_addr, oplen and xram is ignore.

    return m
Example #11
0
def createmodel():
    m = ila.Abstraction('alu')
    m.enable_parameterized_synthesis = 1

    regs = [m.reg('r%d' % i, 8) for i in xrange(4)]
    opcode = m.inp('opcode', 7)

    rs_index = opcode[1:0]
    rt_index = opcode[3:2]
    rd_index = opcode[5:4]
    op = opcode[6:6]

    def sel(regs, idx):
        return ila.ite(
            idx == 0, regs[0],
            ila.ite(idx == 1, regs[1], ila.ite(idx == 2, regs[2], regs[3])))

    rs = sel(regs, rs_index)
    rt = sel(regs, rt_index)
    res = ila.choice('op', rs + rt, rs - rt)
    for i in xrange(4):
        ri_next = ila.ite(rd_index == i, res, regs[i])
        m.set_next('r%d' % i, ri_next)

    m.fetch_expr = opcode
    m.decode_exprs = [opcode == i for i in xrange(0, 128)]
    m.synthesize(alusim)
    for i, di in enumerate(m.decode_exprs):
        for reg in xrange(4):
            exp_i = m.get_next('r%d' % reg, i)
            si = ila.simplify(di, exp_i)
            if not m.areEqual(di, exp_i, si):
                print 'decode:', di
                print 'exp:', exp_i
Example #12
0
def main():
    m = ila.Abstraction('test')
    x = m.reg('x', 8)
    y = m.reg('y', 8)

    ex1 = (x + y) | x
    h1 = ex1.__hash__()

    ex2 = (x + y) | x
    h2 = ex2.__hash__()

    x3 = m.getreg('x')
    y3 = m.getreg('y')
    ex3 = (x3 + y3) | x
    h3 = ex3.__hash__()

    assert h1 == h2
    assert h2 == h3
    assert h3 == h1

    ex4 = (y + x) | x
    h4 = ex4.__hash__()

    assert h4 != h1
    assert h4 != h2
    assert h4 != h3
Example #13
0
 def __init__(self):
     self.model = ila.Abstraction('GPU_ptx')
     self.thread_num = 2
     self.flag_num = 10
     self.current_flag = 0
     self.createStates()
     self.add_assumptions()
Example #14
0
File: chc.py Project: emzha/IMDb
def translate():
    all_instrs = [addr for addr in xrange(0xfd00, 0xfe10)]
    all_instrs = [0xfd00, 0xfd01]
    all_childs = [1, 2, 3]
    all_states = [
        'rsa_state', 'rsa_addr', 'XRAM', 'rsa_byte_counter', 'rsa_buff',
        'rsa_M', 'dataout'
    ]

    m = ila.Abstraction('rsa')
    m.hornifyIteAsNode(True)
    m.hornifyBvAsInt(True)

    dstDir = '../horn'
    if not os.path.exists(dstDir):
        os.makedirs(dstDir)

    root = 'asts'

    for addr in all_instrs:
        Dpath = root + '/instr_W_%x/decode' % addr
        Dast = m.importOne(Dpath)
        instrName = 'rsa_w_%x' % addr
        #m.hornifyNode (Dast, 'D_%x' % addr)
        m.addHornInstr(instrName, Dast)

        for s in all_states:
            Npath = root + '/instr_W_%x/%s' % (addr, s)
            Nast = m.importOne(Npath)
            #m.hornifyNode (Nast, 'N_%x_%s' % (addr, s))
            m.addHornNext(instrName, s, Nast)

    for addr in all_instrs:
        Dpath = root + '/instr_R_%x/decode' % addr
        Dast = m.importOne(Dpath)
        instrName = 'rsa_r_%x' % addr
        m.addHornInstr(instrName, Dast)

        for s in all_states:
            Npath = root + '/instr_R_%x/%s' % (addr, s)
            Nast = m.importOne(Npath)
            m.addHornNext(instrName, s, Nast)

    for st in all_childs:
        Dpath = root + '/child_%d/decode' % st
        Dast = m.importOne(Dpath)
        childName = 'rsa_u_%x' % st
        #m.hornifyNode (Dast, 'D_%x' % st)
        m.addHornChild(childName, 'rsa_w_fd00', Dast)

        for s in all_states:
            Npath = root + '/child_%d/%s' % (st, s)
            Nast = m.importOne(Npath)
            #m.hornifyNode (Nast, 'N_%d_%s' % (st, s))
            m.addHornNext(childName, s, Nast)

    m.generateHornMapping('Interleave')
    ilaFile = dstDir + '/ila.smt2'
    m.exportHornToFile(ilaFile)
Example #15
0
def main():
    expFile = "tmp/test_ila_export.txt"

    sys = ila.Abstraction("test")

    r0 = sys.reg('r0', 8)
    r1 = sys.reg('r1', 8)

    a = sys.bit('a')
    b = sys.bit('b')

    ex = ila.choice("function", r0 + r1, r0 - r1, r0 + r1 + 1)
    resfoo = sys.syn_elem("sum", ex, foo)
    assert sys.areEqual(resfoo, r0 + r1)

    resbar = sys.syn_elem("diff", ex, bar)
    assert sys.areEqual(resbar, r0 - r1)

    a1 = ila.choice("a1", a, ~a, a & b, a | b)
    b1 = ila.choice("b1", [b, ~b, a & b, a | b, a ^ b])

    a2 = ila.choice("a2", a, ~a)
    b2 = ila.choice("b2", b, ~b)

    t1 = a1 & b1
    t2 = a2 & b2
    y = t1 | t2
    resbaz = sys.syn_elem("baz", y, baz)
    assert sys.areEqual(resbaz, a ^ b)

    resshaz = sys.syn_elem("shaz", y, shaz)
    assert sys.areEqual(resshaz, ~(a ^ b))

    c = ila.inrange("cnst", sys.const(0x00, 8), sys.const(0xff, 8))
    z = ila.choice("func_z", r0 + r1 + c, r0 + r1 - c)
    resdaz = sys.syn_elem("daz", z, daz)
    assert sys.areEqual(resdaz, r0 + r1 + 0x44)

    slc0 = ila.readslice("r0slice", r0, 4)
    slc1 = ila.readslice("r1slice", r1, 4)
    res = ila.choice('slice', slc0 + slc1, slc0 - slc1)
    resrmz = sys.syn_elem("razmatazz", res, razmatazz)
    assert sys.areEqual(resrmz, r0[3:0] + r1[7:4])

    sys.exportOne(resrmz, expFile)
    getback = sys.importOne(expFile)
    assert sys.areEqual(resrmz, getback)
    print getback
    #sys.exportFile(expFile);

    #sys.importFile(expFile);

    ila.setloglevel(3, "")
    ila.enablelog("Export")
    sys.exportList([resrmz, resdaz], expFile)
    l = sys.importList(expFile)
    for ast in l:
        print ast
Example #16
0
def test():
    m1 = ila.Abstraction('t1')
    x1 = m1.reg('x', 8)
    y1 = m1.reg('y', 8)

    m1.set_next('x', x1)
    m1.set_init('x', m1.const(1, 8))
    m1.set_next('y', y1 + x1)
    assert m1.areEqualUnrolled(3, y1, y1 + 3)
    assert not m1.areEqualUnrolled(3, y1, y1 + 4)

    m2 = ila.Abstraction('t2')
    y2 = m2.reg('y', 8)
    m2.set_next('y', y2 + 3)
    assert m2.areEqualUnrolled(3, y2, y2 + 9)
    assert not m2.areEqualUnrolled(3, y2, y2 + 10)

    assert ila.bmc(3, m2, y2, 9, m1, y1)
    assert not ila.bmc(4, m2, y2, 9, m1, y1)
Example #17
0
def getDummyILA():
    A = ila.Abstraction("dummy")
    r0 = A.reg('r0', 8)
    r1 = A.reg('r1', 8)
    r2 = A.reg('r2', 8)

    r2_nxt = r0 + r1

    A.set_next('r2', r2_nxt)
    return A
Example #18
0
def main():
    c = ila.Abstraction("test")

    top = c.bool(True)
    bot = c.bool(False)

    x = c.reg('x', 8)
    y = c.reg('y', 8)

    g = c.fun('cnst', 8, [])
    h1 = ila.appfun(g, [])
    h2 = c.const(40, 8)
    c.add_assumption((h1 >= 10) & (h1 <= 15))
    val = ila.choice('val', h1, h2)
    res = val + x + y

    def sim(d):
        x = d['x']
        y = d['y']
        d_out = {}
        d_out['res'] = (x + y + randint(11, 12)) & 0xff
        return d_out

    res_s = c.syn_elem('res', res, sim)
    assert c.areEqual(res_s, h1 + x + y)

    z = c.reg('z', 16)
    c0 = c.const(0, 8)
    c1 = c.const(1, 8)
    cmax = c.const(255, 8)

    f = c.fun('foo', 8, [8, 16])
    r = ila.appfun(f, x, z)
    t = ila.appfun(f, y, z)
    eq = x == y
    req = r == t
    assert c.areEqual(ila.implies(eq, req), top)

    assert c.areEqual(r <= cmax, top)

    up = c.const(128, 8)
    down = c.const(120, 16)
    con = ila.implies((x < up) & (z > down), ila.appfun(f, x, z) > up)
    test = ila.implies(con & (x == 125) & (z == 125), ila.appfun(f, x, z) > up)
    assert c.areEqual(test, top)

    x_next = ila.appfun(f, y, z)
    c.set_next('x', x_next)

    exportFile = 'tmp/test_ila_export.txt'
    c.exportAll(exportFile)
    c.importAll(exportFile)

    simFile = 'tmp/test_ila_sim.hpp'
    c.generateSim(simFile)
Example #19
0
def genAbst(state, enable_ps):
    model = ila.Abstraction("oc8051")
    # fetch and decode.
    uc = uc8051()
    model.fetch_expr = uc.op0  # s/hand for uc.rom[uc.pc]
    model.decode_exprs = [uc.op0 == i for i in xrange(0x0, 0x100)]

    # program counter
    pc = model.reg('PC', 16)
    # code memory
    rom = model.mem('ROM', 16, 8)
    # IRAM
    iram = model.mem('IRAM', 8, 8)
    # main SFRs
    acc = model.reg('ACC', 8)
    b = model.reg('B', 8)
    psw = model.reg('PSW', 8)
    sp = model.reg('SP', 8)
    dpl = model.reg('DPL', 8)
    dph = model.reg('DPH', 8)
    # ports
    p0 = model.reg('P0', 8)
    p1 = model.reg('P1', 8)
    p2 = model.reg('P2', 8)
    p3 = model.reg('P3', 8)
    # misc SFRs
    pcon = model.reg('PCON', 8)
    tcon = model.reg('TCON', 8)
    tmod = model.reg('TMOD', 8)
    tl0 = model.reg('TL0', 8)
    tl1 = model.reg('TH0', 8)
    tl1 = model.reg('TL1', 8)
    th1 = model.reg('TH1', 8)
    scon = model.reg('SCON', 8)
    sbuf = model.reg('SBUF', 8)
    ie = model.reg('IE', 8)
    ip = model.reg('IP', 8)

    # XRAM
    #xram_data_in = model.reg('XRAM_DATA_IN', 8)  FIXME
    #xram_data_in = model.inp('XRAM_DATA_IN', 8)
    xram_data_out = model.reg('XRAM_DATA_OUT', 8)
    xram_addr = model.reg('XRAM_ADDR', 16)

    # get synthesized states
    for s in state:
        print 'Import %s from file' % s
        ast = model.importOne('asts/%s_%s' % (s, 'en' if enable_ps else 'dis'))
        model.set_next(s, ast)

    abst_file = 'archive/oc8051.abst'
    if not os.path.isdir('archive'):
        os.mkdir('archive')
    model.exportAll(abst_file)
Example #20
0
def bmc():
  m = ila.Abstraction('alu')
  m.importAll('ALU_moore.ila')

  # Create state for property predicate
  prop = m.bit('prop')
  prop_nxt = prop & (m.getreg('input') == 0x0)
  m.set_next('prop', prop_nxt)

  # Set initial condition
  m.set_init('prop', m.bool(True))
  m.set_init('input', m.const(0x0, 16))

  # Create golden model
  golden = ila.Abstraction('golden')
  g_prop = golden.bit('prop')
  golden.set_next('prop', golden.bool(True))
  golden.set_init('prop', golden.bool(True))

  # Call bmc
  print ila.bmc(10, m, prop, 1, golden, g_prop)
Example #21
0
def test2():
    m1 = ila.Abstraction('t1')
    x1 = m1.reg('x', 8)
    y1 = m1.reg('y', 8)
    f = m1.fun('foo', 8, [8])
    g = m1.fun('goo', 8, [8])

    m1.set_next('x', x1)
    m1.set_next('y', ila.appfun(f, x1))

    assert m1.areEqualUnrolled(1, y1, ila.appfun(f, x1))
    assert not m1.areEqualUnrolled(1, y1, ila.appfun(g, x1))
Example #22
0
def model(paramsyn):
    # create the alu.
    alu = alu_sim()

    sys = ila.Abstraction("alu")
    sys.enable_parameterized_synthesis = paramsyn

    # state elements.
    rom = sys.mem('rom', alu.ROM_ADDR_WIDTH, alu.OPCODE_WIDTH)
    pc = sys.reg('pc', alu.ROM_ADDR_WIDTH)
    opcode = rom[pc]
    regs = [sys.reg('r%d' % i, alu.REG_SIZE) for i in xrange(alu.NUM_REGS)]

    # get the two sources.
    imm = rom[pc + 1]
    rs = ila.choice('rs', regs)
    rt = ila.choice('rt', regs + [imm])
    results = [rs + rt, rs - rt]

    # golden model
    gm_regs_next, pc_next = aluexpr(rom, pc, regs)
    # set next for PC.
    sys.set_next('pc', pc_next)
    # rom never changes.
    sys.set_next('rom', rom)

    regs_next = []
    for i in xrange(alu.NUM_REGS):
        ri_next = ila.choice('result%d' % i, results + [regs[i]])
        sys.set_next('r%d' % i, ri_next)
    # set the fetch expressions.
    sys.fetch_expr = opcode
    # now set the decode expressions.
    sys.decode_exprs = [opcode[5:0] == i for i in xrange(alu.NUM_CARE_OPCODES)]

    # now synthesize.
    st = time.clock()
    #sys.synthesize(lambda s: alu.alusim(s))
    sys.synthesize(lambda s: alu.alusim(s))
    et = time.clock()
    print '%.3f' % (et - st)

    for i in xrange(alu.NUM_REGS):
        rn1 = sys.get_next('r%d' % i)
        rn2 = gm_regs_next[i]
        if not sys.areEqual(rn1, rn2):
            print rn1
            print rn2
            assert False
        print rn1
    sys.generateVerilog("syn.v")
Example #23
0
File: R2.py Project: emzha/IMDb
def selfModel():
    aes = ila.Abstraction('aesr')
    key0 = aes.reg('in_key0',32)
    key1 = aes.reg('in_key1',32)
    key2 = aes.reg('in_key2',32)
    key3 = aes.reg('in_key3',32)

    state0 = aes.reg('state0',32)
    state1 = aes.reg('state1',32)
    state2 = aes.reg('state2',32)
    state3 = aes.reg('state3',32)

    i = aes.reg('i',4)
    return aes
Example #24
0
File: ueqAES.py Project: emzha/IMDb
def readPy():
    um = ila.Abstraction("aes1")

    # init the state var.
    # common state
    state           = um.reg('aes_state', 2)
    opaddr          = um.reg('aes_addr', 16)
    oplen           = um.reg('aes_len', 16)
    keysel          = um.reg('aes_keysel', 1)
    ctr             = um.reg('aes_ctr', 128)
    key0            = um.reg('aes_key0', 128)
    key1            = um.reg('aes_key1', 128)
    xram            = um.mem('XRAM', 16, 8)
    aes             = um.fun('aes', 128, [128, 128, 128])
    # uinst state
    rd_data         = um.reg('rd_data', 128)
    enc_data        = um.reg('enc_data', 128)
    byte_cnt        = um.reg('byte_cnt', 16)

    # state
    state_next = readpyast(um, 'aes_state')
    um.set_init('aes_state', um.const(1, 2))
    um.set_next('aes_state', state_next)
    # byte_cnt
    byte_cnt_next = readpyast(um, 'byte_cnt')
    um.set_next('byte_cnt', byte_cnt_next)
    um.set_init('byte_cnt', um.const(0, 16))
    # rd_data
    rd_data_nxt = readpyast(um, 'rd_data')
    um.set_next('rd_data', rd_data_nxt)
    # enc_data
    aes_key = ila.ite(keysel == 0, key0, key1)
    aes_enc_data = ila.appfun(aes, [ctr, aes_key, rd_data])
    enc_data_nxt = ila.ite(state == 2, aes_enc_data, enc_data)
    um.set_next('enc_data', enc_data_nxt)
    # xram
    uxram_nxt = readpyast(um, 'XRAM')
    um.set_next('XRAM', uxram_nxt)
    # the rest doesn't change.
    um.set_next('aes_addr', opaddr)
    um.set_next('aes_len', oplen)
    um.set_ipred('aes_len', (oplen != 0) & (oplen[3:0] == 0))
    um.set_next('aes_keysel', keysel)
    um.set_next('aes_ctr', ctr)
    um.set_next('aes_key0', key0)
    um.set_next('aes_key1', key1)


    return um
Example #25
0
def main():
    sys = ila.Abstraction("test")
    r0 = sys.reg('r0', 8)
    r1 = sys.reg('r1', 8)

    a = sys.bit('a')
    b = sys.bit('b')

    ex = ila.choice("function", r0 + r1, r0 - r1, r0 + r1 + 1)
    resfoo = sys.syn_elem("sum", ex, foo)
    assert sys.areEqual(resfoo, r0 + r1)

    resbar = sys.syn_elem("diff", ex, bar)
    assert sys.areEqual(resbar, r0 - r1)

    a1 = ila.choice("a1", a, ~a, a & b, a | b)
    b1 = ila.choice("b1", [b, ~b, a & b, a | b, a ^ b])

    a2 = ila.choice("a2", a, ~a)
    b2 = ila.choice("b2", b, ~b)

    t1 = a1 & b1
    t2 = a2 & b2
    y = t1 | t2
    resbaz = sys.syn_elem("baz", y, baz)
    assert sys.areEqual(resbaz, a ^ b)

    resshaz = sys.syn_elem("shaz", y, shaz)
    assert sys.areEqual(resshaz, ~(a ^ b))

    c = ila.inrange("cnst", sys.const(0x00, 8), sys.const(0xff, 8))
    z = ila.choice("func_z", r0 + r1 + c, r0 + r1 - c)
    resdaz = sys.syn_elem("daz", z, daz)
    assert sys.areEqual(resdaz, r0 + r1 + 0x44)

    slc0 = ila.readslice("r0slice", r0, 4)
    slc1 = ila.readchunk("r1chunk", r1, 4)
    res = ila.choice('slice', slc0 + slc1, slc0 - slc1)
    resrmz = sys.syn_elem("razmatazz", res, razmatazz)
    assert sys.areEqual(resrmz, r0[3:0] + r1[7:4])

    nr0 = ila.writeslice("wr0slice", r0, slc0)
    resjazz = sys.syn_elem("jazz", nr0, jazz)
    assert sys.areEqual(resjazz, ila.concat(r0[3:0], r0[3:0]))

    nr1 = ila.writechunk("wr0chunk", r0, slc0)
    resjazy = sys.syn_elem("jazz", nr1, jazz)
    assert sys.areEqual(resjazy, ila.concat(r0[3:0], r0[3:0]))
Example #26
0
def createIla():
    m = ila.Abstraction ('sha')
    m.enable_parameterized_synthesis = 0

    # input ports
    cmd     = m.inp ('cmd', 2)
    cmdaddr = m.inp ('cmdaddr', 16)
    cmddata = m.inp ('cmddata', 8)

    # arch states
    state   = m.reg ('sha_state', 3)
    rd_addr = m.reg ('sha_rdaddr', 16)
    wr_addr = m.reg ('sha_wraddr', 16)
    oplen   = m.reg ('sha_len', 16)
    rd_data = m.reg ('sha_rd_data', 512)
    hs_data = m.reg ('sha_hs_data', 160)
    xram    = m.mem ('XRAM', 16, 8)
    sha     = m.fun ('sha', 160, [512])

    # fetch is just looking at the input command.
    m.fetch_expr  = ila.concat ([state, cmd, cmdaddr, cmddata])
    m.fetch_valid = (cmd == 1) | (cmd == 2)

    # write commands.
    def mb_reg_wr (name, reg):
        # multibyte reg write.
        reg_wr  = ila.writechunk ('wr_' + name, reg, cmddata)
        reg_nxt = ila.choice ('nxt_' + name, [reg_wr, reg])
        m.set_next (name, reg_nxt)
    mb_reg_wr ('sha_rdaddr', rd_addr)
    mb_reg_wr ('sha_wraddr', wr_addr)
    mb_reg_wr ('sha_len', oplen)

    # state (atomic)
    state_nxt = ila.choice ('state_nxt', [
                    m.const (0, 3), m.const (1, 3), m.const (2, 3),
                    m.const (3, 3), m.const (4, 3), state])
    m.set_next ('sha_state', state_nxt)

    # xram
    xram_w_sha_little = ila.storeblk (xram, wr_addr, hs_data)
    xram_w_sha_big = ila.storeblk_big (xram, wr_addr, hs_data)
    xram_cho = ila.choice ('xram_nxt', xram, xram_w_sha_little, xram_w_sha_big)
    xram_nxt = ila.ite ((state == 0) & (cmddata == 1), xram_cho, xram)
    m.set_next ('XRAM', xram_nxt)

    return m
Example #27
0
def main():
    c = ila.Abstraction("test")
    a = c.reg('a', 8)
    b = c.reg('b', 8)

    r = a % b
    for i in xrange(25):
        av = random.randint(0, 0xff)
        bv = random.randint(0, 0xff)

        if bv == 0:
            r = av
        else:
            r = av % bv

        assump = (a == av) & (b == bv)
        assert c.areEqual(assump, a % b, c.const(r, 8))
        print '%02x %% %02x = %02x' % (av, bv, r)
Example #28
0
def createPCRILA(synstates):
    m = ila.Abstraction("sha")

    inp = m.reg("input", 8)
    inp1 = m.reg("input1", 8)

    out = m.reg("output", 8)
    m.set_next("output", ila.choice("out_choice", [inp, out]))

    inp_dec = [inp == i for i in range(0, 512)]
    inp1_dec = [inp1 == i for i in range(0, 512)]
    out_dec = [out == i for i in range(0, 512)]
    m.decode_exprs = inp_dec + inp1_dec + out_dec

    m.synthesize("output", updateFifo)

    ast = m.get_next("output")
    m.exportOne(ast, "ast_out")
def modify():
  # Create the ILA container.
  m = ila.Abstraction('alu')

  # Import the whole ILA from file.
  m.importAll('ALU.ila')

  # Completely define transition relations for unspecified states.
  for i in xrange(0, 8):
    regName = 'reg{}'.format(i)
    m.set_next(regName, m.getreg(regName))

  out_nxt = m.get_next('output')
  inp_nxt = ila.concat(out_nxt, out_nxt)
  m.set_next('input', inp_nxt)

  # Export the result
  m.exportAll('ALU_moore.ila')
Example #30
0
    def __init__(self):
        self.model = ila.Abstraction("oc8051")
        self.createInputs()

        self.op0 = self.rom[self.pc]
        self.op1 = self.rom[self.pc + 1]
        self.op2 = self.rom[self.pc + 2]
        self.opcode = ila.concat(self.op2, ila.concat(self.op1, self.op0))

        self.dptr = ila.concat(self.dph, self.dpl)
        self.cy = self.psw[7:7]
        self.ac = self.psw[6:6]
        self.ov = self.psw[2:2]
        self._Rbank = self.psw[4:3]
        self.rxaddr = [
            ila.concat(self.model.const(0, 3),
                       ila.concat(self._Rbank, self.model.const(i, 3)))
            for i in xrange(8)
        ]
        self.rx = [self.iram[RxAddr_i] for RxAddr_i in self.rxaddr]