コード例 #1
0
ファイル: interactive_tester.py プロジェクト: silky/fault
def _process_port(port):
    scope = Scope()
    if isinstance(port, PortWrapper):
        port = port.select_path
    if isinstance(port, SelectPath):
        for i in port[1:-1]:
            scope = Scope(parent=scope, instance=i.instance)
        port = port[-1]
    return port, scope
コード例 #2
0
 def process_port(self, port):
     scope = Scope()
     if isinstance(port, fault.actions.Peek):
         port = port.port
     if isinstance(port, PortWrapper):
         port = port.select_path
     if isinstance(port, SelectPath):
         for i in port[1:-1]:
             scope = Scope(parent=scope, instance=i.instance)
         port = port[-1]
     return port, scope
コード例 #3
0
def test_up_parallel():
    width = 5
    numOut = 2
    testVal = 3
    scope = Scope()
    inType = Array[width, In(BitIn)]
    outType = Array[numOut, Out(inType)]
    args = ['I', inType, 'O', outType] + ClockInterface(False, False)

    testcircuit = DefineCircuit('Test', *args)

    upParallel = UpsampleParallel(numOut, inType)
    wire(upParallel.I, testcircuit.I)
    wire(testcircuit.O, upParallel.O)

    EndCircuit()

    sim = CoreIRSimulator(testcircuit, testcircuit.CLK)

    sim.set_value(testcircuit.I, int2seq(testVal, width), scope)
    sim.evaluate()
    sim.advance_cycle()
    sim.evaluate()
    for i in range(numOut):
        assert seq2int(sim.get_value(testcircuit.O[i], scope)) == testVal
コード例 #4
0
ファイル: test_coreir_mux.py プロジェクト: akeley98/mantle
def test_two_coreir_muxes():
    width = 2
    c = coreir.Context()
    cirb = CoreIRBackend(c)
    scope = Scope()
    inType = Array(width, In(BitIn))
    outType = Array(width, Out(Bit))
    args = ['I', inType, 'S', In(Bit), 'O', outType] + ClockInterface(
        False, False)

    testcircuit = DefineCircuit('test_partition', *args)
    coreir_mux = DefineCoreirMux(None)()
    coreir_mux(testcircuit.I[0], testcircuit.I[1], testcircuit.S)
    wire(coreir_mux.out, testcircuit.O[0])
    cmux = CommonlibMuxN(cirb, 2, 1)
    wire(cmux.I.data[0][0], testcircuit.I[0])
    wire(cmux.I.data[1][0], testcircuit.I[1])
    wire(cmux.I.sel[0], testcircuit.S)
    wire(cmux.out[0], testcircuit.O[1])

    EndCircuit()

    sim = CoreIRSimulator(
        testcircuit,
        testcircuit.CLK,
        context=c,
        namespaces=["commonlib", "mantle", "coreir", "global"])
コード例 #5
0
ファイル: test_serializer.py プロジェクト: adamdai/aetherling
def test_deserializer():
    width = 11
    numIn = 13
    c = coreir.Context()
    cirb = CoreIRBackend(c)
    scope = Scope()
    inType = In(Array(width, Bit))
    outType = Out(Array(numIn, Array(width, BitIn)))
    args = ['I', inType, 'O', outType, 'valid',
            Out(Bit)] + ClockInterface(False, False)

    testcircuit = DefineCircuit('Test_Deserializer', *args)

    deserializer = Deserializer(cirb, inType, numIn)
    wire(deserializer.I, testcircuit.I)
    wire(testcircuit.O, deserializer.out)
    wire(testcircuit.valid, deserializer.valid)

    EndCircuit()

    sim = CoreIRSimulator(testcircuit,
                          testcircuit.CLK,
                          context=cirb.context,
                          namespaces=[
                              "aetherlinglib", "commonlib", "mantle", "coreir",
                              "global"
                          ])

    for i in range(numIn):
        sim.set_value(testcircuit.I, int2seq(i, width), scope)
        assert sim.get_value(testcircuit.valid, scope) == (i == numIn - 1)
        sim.evaluate()
        sim.advance_cycle()
        sim.evaluate()
    assert sim.get_value(testcircuit.valid, scope) == False
コード例 #6
0
def test_1dlb_flicker_ce_with_2_stride():
    scope = Scope()
    c = coreir.Context()
    cirb = CoreIRBackend(c)

    testcircuit = DefineOneDimensionalLineBuffer(cirb, Array[8, In(Bit)], 1, 2,
                                                 8, 2, 0, True)

    sim = CoreIRSimulator(testcircuit,
                          testcircuit.CLK,
                          context=c,
                          namespaces=[
                              "aetherlinglib", "commonlib", "mantle", "coreir",
                              "global"
                          ])

    for i in range(50):
        if i % 2 == 0:
            sim.set_value(testcircuit.I[0], int2seq(1, 8), scope)
            sim.set_value(testcircuit.CE, 1, scope)
        else:
            sim.set_value(testcircuit.I[0], int2seq(2, 8), scope)
            sim.set_value(testcircuit.CE, 0, scope)
        sim.evaluate()
        sim.advance_cycle()
        sim.evaluate()
        print([
            seq2int(sim.get_value(testcircuit.O[0][r], scope))
            for r in range(2)
        ])
        print(sim.get_value(testcircuit.valid, scope))
        # for some reason, lb going to 0 when flickering valid on and off for ce
        for r in range(2):
            assert (sim.get_value(testcircuit.valid, scope) == 0
                    or seq2int(sim.get_value(testcircuit.O[0][r], scope)) != 0)
コード例 #7
0
def test_shift_s():
    num_in = 4
    test_vals = [2, 5, 3, 8]
    shift_amount = 2
    in_type = ST_SSeq(num_in, ST_Int())
    scope = Scope()
    args = ['I', In(in_type.magma_repr()), 'O',
            Out(in_type.magma_repr())] + ClockInterface(False, False)

    testcircuit = DefineCircuit('Test', *args)

    rshift = DefineShift_S(num_in, shift_amount, in_type.t)()
    wire(rshift.I, testcircuit.I)
    wire(testcircuit.O, rshift.O)

    EndCircuit()

    sim = CoreIRSimulator(testcircuit, testcircuit.CLK)

    for i, val in enumerate(test_vals):
        sim.set_value(testcircuit.I[i], int2seq(val, 8), scope)
    sim.evaluate()
    for i, val in enumerate(test_vals[shift_amount:]):
        assert seq2int(sim.get_value(
            testcircuit.O[i + shift_amount])) == test_vals[i]
コード例 #8
0
def test_db_flicker_ce():
    scope = Scope()
    c = coreir.Context()
    cirb = CoreIRBackend(c)

    testcircuit = DefineDelayedBuffer(cirb, Array[8, Bit], 4, 1, 16, 1)

    sim = CoreIRSimulator(testcircuit,
                          testcircuit.CLK,
                          context=c,
                          namespaces=[
                              "aetherlinglib", "commonlib", "mantle", "coreir",
                              "global"
                          ])

    for i in range(100000):
        if i % 2 == 0 and i > 20:
            sim.set_value(testcircuit.I[0], int2seq(1, 8), scope)
            sim.set_value(testcircuit.CE, 1, scope)
        else:
            sim.set_value(testcircuit.I[0], int2seq(2, 8), scope)
            sim.set_value(testcircuit.CE, 0, scope)
        if i % 2 == 0 and i > 20:  #(not i % 16 == 0 or i == 0):
            sim.set_value(testcircuit.WE, 1, scope)
        else:
            sim.set_value(testcircuit.WE, 0, scope)
        sim.evaluate()
        print(seq2int(sim.get_value(testcircuit.O[0], scope)))
        print(sim.get_value(testcircuit.valid, scope))

        # for some reason, lb going to 0 when flickering valid on and off for ce
        assert (sim.get_value(testcircuit.valid, scope) == 0
                or seq2int(sim.get_value(testcircuit.O[0], scope)) != 0)
        sim.advance_cycle()
コード例 #9
0
def test_ram_flicker_we():
    scope = Scope()
    c = coreir.Context()
    cirb = CoreIRBackend(c)

    testcircuit = DefineRAM(8, 1)

    sim = CoreIRSimulator(testcircuit,
                          testcircuit.CLK,
                          context=c,
                          namespaces=[
                              "aetherlinglib", "commonlib", "mantle", "coreir",
                              "global"
                          ])

    sim.set_value(testcircuit.WADDR[0], 0, scope)
    sim.set_value(testcircuit.RADDR[0], 0, scope)
    sim.set_value(testcircuit.WDATA[0], 1, scope)
    for i in range(20):
        sim.set_value(testcircuit.WE, 0, scope)
        sim.evaluate()
        sim.advance_cycle()
    sim.set_value(testcircuit.WE, 1, scope)
    sim.evaluate()
    sim.advance_cycle()
    sim.set_value(testcircuit.WE, 0, scope)
    sim.evaluate()
    sim.advance_cycle()
    print(sim.get_value(testcircuit.RDATA, scope))
コード例 #10
0
ファイル: test_tuple.py プロジェクト: David-Durst/aetherling
def test_sseqTupleCreator():
    width = 8
    scope = Scope()
    testvals = [1, 2]
    T = ST_TSeq(2, 0, ST_Int())
    T_magma = T.magma_repr()
    args = ['I0',
            In(T_magma), 'I1',
            In(T_magma), 'O',
            Out(Array[2, T_magma])] + ClockInterface(False, False)

    testcircuit = DefineCircuit('Test', *args)

    sseqTupleCreator = SSeqTupleCreator(T)

    wire(testcircuit.I0, sseqTupleCreator.I0)
    wire(testcircuit.I1, sseqTupleCreator.I1)
    wire(testcircuit.O, sseqTupleCreator.O)

    EndCircuit()

    sim = CoreIRSimulator(testcircuit, testcircuit.CLK)

    sim.set_value(testcircuit.I0, int2seq(testvals[0], width), scope)
    sim.set_value(testcircuit.I1, int2seq(testvals[1], width), scope)
    sim.evaluate()
    for i in range(len(testvals)):
        assert seq2int(sim.get_value(testcircuit.O[i], scope)) == testvals[i]
コード例 #11
0
ファイル: test_tuple.py プロジェクト: David-Durst/aetherling
def test_atomTupleCreator():
    width = 8
    scope = Scope()
    T0 = ST_Int()
    T1 = ST_Bit()
    T_outer_output = ST_Atom_Tuple(T0, T1)
    args = ['I0', In(T0.magma_repr()), 'I1', In(T1.magma_repr()), \
            'O', Out(T_outer_output.magma_repr())] + ClockInterface(False, False)

    testcircuit = DefineCircuit('Test', *args)

    atomTupleAppender = AtomTupleCreator(T0, T1)

    wire(testcircuit.I0, atomTupleAppender.I0)
    wire(testcircuit.I1, atomTupleAppender.I1)
    wire(testcircuit.O, atomTupleAppender.O)

    EndCircuit()

    sim = CoreIRSimulator(testcircuit, testcircuit.CLK)

    sim.set_value(testcircuit.I0, int2seq(4, width), scope)
    sim.set_value(testcircuit.I1, True, scope)
    sim.evaluate()
    assert seq2int(sim.get_value(testcircuit.O[0], scope)) == 4
    assert sim.get_value(testcircuit.O[1], scope) == True
コード例 #12
0
ファイル: test_tuple.py プロジェクト: David-Durst/aetherling
def test_sseqTupleAppender():
    width = 8
    scope = Scope()
    testvals = [1, 2, 3]
    T_inner = ST_TSeq(2, 0, ST_Int())
    T_outer_input = ST_SSeq_Tuple(2, ST_Int())
    T_outer_output = ST_SSeq_Tuple(3, ST_Int())
    args = ['I0', In(T_outer_input.magma_repr()), 'I1', In(T_inner.magma_repr()), \
            'O', Out(T_outer_output.magma_repr())] + ClockInterface(False, False)

    testcircuit = DefineCircuit('Test', *args)

    sseqTupleAppender = SSeqTupleAppender(T_inner, 2)

    wire(testcircuit.I0, sseqTupleAppender.I0)
    wire(testcircuit.I1, sseqTupleAppender.I1)
    wire(testcircuit.O, sseqTupleAppender.O)

    EndCircuit()

    sim = CoreIRSimulator(testcircuit, testcircuit.CLK)

    sim.set_value(testcircuit.I0[0], int2seq(testvals[0], width), scope)
    sim.set_value(testcircuit.I0[1], int2seq(testvals[1], width), scope)
    sim.set_value(testcircuit.I1, int2seq(testvals[2], width), scope)
    sim.evaluate()
    for i in range(len(testvals)):
        assert seq2int(sim.get_value(testcircuit.O[i], scope)) == testvals[i]
コード例 #13
0
def test_reduce_parallel():
    width = 11
    numIn = 13
    scope = Scope()
    inType = In(Array[numIn, Array[width, BitIn]])
    outType = Out(Array[width, Bit])
    args = ['I', inType, 'O', outType] + ClockInterface(False, False)

    testcircuit = DefineCircuit('Test_Reduce_Parallel', *args)

    reducePar = ReduceParallel(numIn, DefineAdd(width))
    wire(reducePar.I, testcircuit.I)
    wire(testcircuit.O, reducePar.O)

    EndCircuit()

    sim = CoreIRSimulator(testcircuit,
                          testcircuit.CLK,
                          namespaces=[
                              "aetherlinglib", "commonlib", "mantle", "coreir",
                              "global"
                          ])

    for i in range(numIn):
        sim.set_value(testcircuit.I[i], int2seq(i, width), scope)
    sim.evaluate()
    assert seq2int(sim.get_value(testcircuit.O, scope)) == sum(range(numIn))
コード例 #14
0
def test_up_sequential():
    width = 5
    numOut = 2
    testVal = 3
    c = coreir.Context()
    scope = Scope()
    inType = Array(width, In(BitIn))
    outType = Out(inType)
    args = ['I', inType, 'O', outType, 'READY',
            Out(Bit)] + ClockInterface(False, False)

    testcircuit = DefineCircuit('TestUpSequential', *args)

    coreir_backend = CoreIRBackend(c)
    upSequential = UpsampleSequential(coreir_backend, numOut, inType)
    wire(upSequential.I, testcircuit.I)
    wire(testcircuit.O, upSequential.O)
    wire(testcircuit.READY, upSequential.READY)

    EndCircuit()

    sim = CoreIRSimulator(testcircuit,
                          testcircuit.CLK,
                          context=coreir_backend.context)

    sim.set_value(testcircuit.I, int2seq(testVal, width), scope)
    sim.evaluate()

    for i in range(numOut):
        assert seq2int(sim.get_value(testcircuit.O, scope)) == testVal
        sim.advance_cycle()
        sim.evaluate()
        assert sim.get_value(testcircuit.READY, scope) == (i == numOut - 1)
コード例 #15
0
def test_delayed_buffer_parallel():
    scope = Scope()
    testcircuit = DefineDelayedBuffer(Array[8, Bit], 4, 2, 16)

    sim = CoreIRSimulator(testcircuit, testcircuit.CLK)

    sim.set_value(testcircuit.CE, True, scope)
    last_output = 2
    last_input = 2
    # do two cycles
    for clock_index in range(32):
        # for each cycle, input every other of first half
        if clock_index % 16 < 4 and clock_index % 2 == 0:
            sim.set_value(testcircuit.WE, True, scope)
            sim.set_value(testcircuit.I[0], int2seq(last_input, 8), scope)
            sim.set_value(testcircuit.I[1], int2seq(last_input + 1, 8), scope)
            last_input += 2
        else:
            sim.set_value(testcircuit.WE, False, scope)
        sim.evaluate()

        if clock_index % 4 == 0:
            assert sim.get_value(testcircuit.valid, scope) == True
            assert seq2int(sim.get_value(testcircuit.O, scope)[0]) == last_output
            last_output += 1
        else:
            assert sim.get_value(testcircuit.valid, scope) == False
        sim.advance_cycle()
        sim.evaluate()
コード例 #16
0
def create_dict_recurse(circ, cur_scope, values):
    scope_dict = {}
    values[cur_scope.value()] = scope_dict
    scope_dict['_instances'] = []
    scope_dict['_top'] = {}
    scope_dict['_top']['inputs'] = {}
    scope_dict['_top']['outputs'] = {}

    for name, bit in circ.interface.ports.items():
        if bit.isoutput():
            scope_dict['_top']['inputs'][name] = []
        else:
            scope_dict['_top']['outputs'][name] = []

    for inst in circ.instances:
        scope_dict['_instances'].append(get_inst_name(inst))
        scope_dict[get_inst_name(inst)] = {}
        scope_dict[get_inst_name(inst)]['inputs'] = {}
        scope_dict[get_inst_name(inst)]['outputs'] = {}

        for name, bit in inst.interface.ports.items():
            if bit.isinput():
                scope_dict[get_inst_name(inst)]['inputs'][name] = []
            else:
                scope_dict[get_inst_name(inst)]['outputs'][name] = []

        if not isprimitive(inst):
            create_dict_recurse(type(inst),
                                Scope(instance=inst, parent=cur_scope), values)
コード例 #17
0
def test_downsample_parallel_non_zero_idx():
    width = 5
    numIn = 4
    scope = Scope()
    outType = Array[width, Out(BitIn)]
    inType = Array[numIn, In(outType)]
    args = ['I', inType, 'O', outType] + ClockInterface(False, False)

    testcircuit = DefineCircuit('Test_Downsample_Parallel', *args)

    downsampleParallel = DownsampleParallel(numIn, 2, inType.T)
    wire(downsampleParallel.I, testcircuit.I)
    wire(testcircuit.O, downsampleParallel.O)

    EndCircuit()

    sim = CoreIRSimulator(testcircuit,
                          testcircuit.CLK,
                          namespaces=[
                              "aetherlinglib", "commonlib", "mantle", "coreir",
                              "global"
                          ])

    for i in range(numIn):
        sim.set_value(testcircuit.I[i], int2seq(i, width), scope)
    sim.evaluate()
    assert seq2int(sim.get_value(testcircuit.O, scope)) == 2
コード例 #18
0
ファイル: test_downsample.py プロジェクト: adamdai/aetherling
def test_downsample_parallel():
    width = 5
    numIn = 2
    testVal = 3
    c = coreir.Context()
    cirb = CoreIRBackend(c)
    scope = Scope()
    outType = Array(width, Out(BitIn))
    inType = Array(numIn, In(outType))
    args = ['I', inType, 'O', outType] + ClockInterface(False, False)

    testcircuit = DefineCircuit('Test_Downsample_Parallel', *args)

    downsampleParallel = DownsampleParallel(cirb, numIn, inType.T)
    wire(downsampleParallel.I, testcircuit.I)
    wire(testcircuit.O, downsampleParallel.O)

    EndCircuit()

    sim = CoreIRSimulator(testcircuit,
                          testcircuit.CLK,
                          context=cirb.context,
                          namespaces=[
                              "aetherlinglib", "commonlib", "mantle", "coreir",
                              "global"
                          ])

    for i in range(numIn):
        sim.set_value(testcircuit.I[i], int2seq(testVal, width), scope)
    sim.evaluate()
    assert seq2int(sim.get_value(testcircuit.O, scope)) == testVal
コード例 #19
0
ファイル: test_reduce.py プロジェクト: adamdai/aetherling
def test_reduce_parallel():
    width = 11
    numIn = 13
    c = coreir.Context()
    cirb = CoreIRBackend(c)
    scope = Scope()
    inType = In(Array(numIn, Array(width, BitIn)))
    outType = Out(Array(width, Bit))
    args = ['I', inType, 'O', outType] + ClockInterface(False, False)

    testcircuit = DefineCircuit('Test_Reduce_Parallel', *args)

    reducePar = ReduceParallel(cirb, numIn,
                               renameCircuitForReduce(DefineAdd(width)))
    coreirConst = DefineCoreirConst(width, 0)()
    wire(reducePar.I.data, testcircuit.I)
    wire(reducePar.I.identity, coreirConst.out)
    wire(testcircuit.O, reducePar.out)

    EndCircuit()

    sim = CoreIRSimulator(testcircuit,
                          testcircuit.CLK,
                          context=cirb.context,
                          namespaces=[
                              "aetherlinglib", "commonlib", "mantle", "coreir",
                              "global"
                          ])

    for i in range(numIn):
        sim.set_value(testcircuit.I[i], int2seq(i, width), scope)
    sim.evaluate()
    assert seq2int(sim.get_value(testcircuit.O, scope)) == sum(range(numIn))
コード例 #20
0
ファイル: test_tuple.py プロジェクト: standanley/magma
def test_simulator_tuple():
    width = 8
    testValInt = 80
    c = coreir.Context()
    cirb = CoreIRBackend(c)
    scope = Scope()
    inDims = [2, width]
    tupleEl = Array[inDims[1], Bit]
    nestedTuples = Array[inDims[0], Tuple(sel=tupleEl, data=tupleEl)]
    tupleValues = {'sel':int2seq(testValInt, width), 'data':int2seq(testValInt+20, width)}
    inType = In(nestedTuples)
    outType = Out(Array[2*inDims[0], tupleEl])
    args = ['I', inType, 'O', outType] + ClockInterface(False, False)

    testcircuit = DefineCircuit('test_simulator_tuple', *args)

    wire(testcircuit.I[0].data, testcircuit.O[0])
    wire(testcircuit.I[0].sel, testcircuit.O[1])
    wire(testcircuit.I[1].data, testcircuit.O[2])
    wire(testcircuit.I[1].sel, testcircuit.O[3])

    EndCircuit()

    sim = CoreIRSimulator(testcircuit, testcircuit.CLK, context=cirb.context,
                          namespaces=["aetherlinglib", "commonlib", "mantle", "coreir", "global"])

    sim.set_value(testcircuit.I, [tupleValues, tupleValues], scope)
    getArrayInTuple = sim.get_value(testcircuit.I[0].data, scope)
    getTuples = sim.get_value(testcircuit.I, scope)
    assert getArrayInTuple == tupleValues['data']
    assert getTuples[0] == tupleValues
    assert getTuples[1] == tupleValues
コード例 #21
0
def test_partition():
    width = 8
    parallelism = 2
    testValInt = 210
    testValBits = int2seq(testValInt)
    scope = Scope()
    inType = Array[width, In(BitIn)]
    outType = Array[parallelism, Out(Bit)]
    args = ['I', inType, 'O', outType] + ClockInterface(False, False)

    testcircuit = DefineCircuit('test_partition', *args)

    part = Partition(inType, parallelism)
    wire(part.I, testcircuit.I)
    wire(testcircuit.O, part.O)

    EndCircuit()

    sim = CoreIRSimulator(testcircuit,
                          testcircuit.CLK,
                          namespaces=[
                              "aetherlinglib", "commonlib", "mantle", "coreir",
                              "global"
                          ])

    sim.set_value(testcircuit.I, int2seq(testValInt, width), scope)
    sim.evaluate()
    for i in range(int(width / parallelism)):
        assert seq2int(sim.get_value(testcircuit.O, scope)) == \
               seq2int(testValBits[i*parallelism:(i+1)*parallelism])
        sim.advance_cycle()
        sim.evaluate()
コード例 #22
0
def test_serializer_multi_clock_elements():
    width = 5
    num_in = 3
    time_per_element = 2
    num_iterations = 2
    scope = Scope()
    inType = In(Array[num_in, Array[width, BitIn]])
    outType = Out(Array[width, Bit])
    args = ['I', inType, 'O', outType, 'ready_up', Out(Bit), 'valid_up', In(Bit), 'ready_down', In(Bit),
            'valid_down', Out(Bit)] + ClockInterface(True, False)

    testcircuit = DefineCircuit('TestUpSequential', *args)

    serializer = Serializer(num_in, time_per_element, inType.T, has_ce=True)
    wire(serializer.I, testcircuit.I)
    wire(testcircuit.O, serializer.O)
    wire(testcircuit.ready_up, serializer.ready_up)
    wire(testcircuit.valid_up, serializer.valid_up)
    wire(testcircuit.ready_down, serializer.ready_down)
    wire(testcircuit.valid_down, serializer.valid_down)
    wire(testcircuit.CE, serializer.CE)

    EndCircuit()

    sim = CoreIRSimulator(testcircuit, testcircuit.CLK)

    sim.set_value(testcircuit.valid_up, True, scope)
    sim.set_value(testcircuit.ready_down, True, scope)
    sim.set_value(testcircuit.CE, True, scope)
    for i in range(num_iterations):
        parts_of_elements_emitted = 0
        elements_emitted = 0
        clk = -1
        while elements_emitted < num_in:
            clk += 1
            if elements_emitted == 0:
                for j in range(num_in):
                    # note: parts_of_elements_emitted only ever 0 or 1 here as this code only executes if
                    # elements_emitted == 0
                    sim.set_value(testcircuit.I[j], int2seq(i * (num_in + time_per_element) + \
                                                            j * time_per_element + parts_of_elements_emitted, width), scope)
            sim.evaluate()
            assert seq2int(sim.get_value(testcircuit.O, scope)) == i * (num_in + time_per_element) + \
                   elements_emitted * time_per_element + (parts_of_elements_emitted % time_per_element)

            # valid_down and ready_up should always be true since valid_up, ready_down, and CE always true
            assert sim.get_value(testcircuit.valid_down, scope) == True
            if elements_emitted == 0:
                assert sim.get_value(testcircuit.ready_up, scope) == True
            else:
                assert sim.get_value(testcircuit.ready_up, scope) == False

            sim.advance_cycle()
            sim.evaluate()

            # since ready, valid, and CE in always true, always increment elements counters
            parts_of_elements_emitted += 1
            if parts_of_elements_emitted % time_per_element == 0:
                elements_emitted += 1
コード例 #23
0
def test_partial_parallel_2_convolution():
    from .partialParallel2Convolution import partialParallel2Convolution
    scope = Scope()
    sim = CoreIRSimulator(partialParallel2Convolution,
                          partialParallel2Convolution.CLK,
                          namespaces=[
                              "aetherlinglib", "commonlib", "mantle", "coreir",
                              "global"
                          ])

    sim.set_value(partialParallel2Convolution.valid_data_in, 1, scope)
    sim.set_value(partialParallel2Convolution.ready_data_out, 1, scope)
    sim.set_value(partialParallel2Convolution.CE, 1, scope)

    # these check the outputs, as there is a delay between feeding inputs in and getting the results back
    cur_row_to_check = 0
    cur_col_to_check = 0
    successfully_checked_all_valid_outputs = False
    for row in range(num_rows + 3):
        for col in range(0, num_cols, 2):
            # a necessary adjustment as running tests for multiple clocks after inputting full image
            # to get rest of the outputs
            if row < num_rows:
                sim.set_value(partialParallel2Convolution.I0,
                              int2seq(image_matrix[row][col], int_width))
                sim.set_value(partialParallel2Convolution.I1,
                              int2seq(image_matrix[row][col + 1], int_width))
            sim.evaluate()
            assert sim.get_value(partialParallel2Convolution.ready_data_in,
                                 scope) == 1
            if sim.get_value(partialParallel2Convolution.valid_data_out,
                             scope) == 1:
                if cur_row_to_check in valid_rows and cur_col_to_check in valid_cols:
                    if seq2int(
                            sim.get_value(partialParallel2Convolution.O0,
                                          scope)
                    ) != results[cur_row_to_check][cur_col_to_check]:
                        print(cur_col_to_check)
                    assert seq2int(
                        sim.get_value(partialParallel2Convolution.O0, scope)
                    ) == results[cur_row_to_check][cur_col_to_check]
                    if cur_col_to_check + 1 in valid_cols:
                        assert seq2int(
                            sim.get_value(partialParallel2Convolution.O1,
                                          scope)) == results[cur_row_to_check][
                                              cur_col_to_check + 1]
                if not cur_row_to_check in valid_rows:
                    successfully_checked_all_valid_outputs = True
                    break
                cur_col_to_check += 2
                cur_col_to_check = cur_col_to_check % num_cols
                if cur_col_to_check == 0:
                    cur_row_to_check += 1
                    cur_row_to_check = cur_row_to_check % num_rows
            sim.advance_cycle()
        if successfully_checked_all_valid_outputs:
            break
    assert successfully_checked_all_valid_outputs
コード例 #24
0
def test_downsample_stencil_1_per_32():
    from .downsampleStencilChain1Per32 import downsampleStencilChain1Per32
    scope = Scope()
    sim = CoreIRSimulator(downsampleStencilChain1Per32,
                          downsampleStencilChain1Per32.CLK,
                          namespaces=[
                              "aetherlinglib", "commonlib", "mantle", "coreir",
                              "global"
                          ])

    sim.set_value(downsampleStencilChain1Per32.valid_data_in, 1, scope)
    sim.set_value(downsampleStencilChain1Per32.ready_data_out, 1, scope)
    sim.set_value(downsampleStencilChain1Per32.CE, 1, scope)

    # these check the outputs, as there is a delay between feeding inputs in and getting the results back
    cur_row_to_check = 0
    cur_col_to_check = 0
    successfully_checked_all_valid_outputs = False
    for row in range(num_rows + 6):
        for col in range(0, num_cols, 2):
            # a necessary adjustment as running tests for multiple clocks after inputting full image
            # to get rest of the outputs
            if row < num_rows:
                sim.set_value(downsampleStencilChain1Per32.I0,
                              int2seq(image_matrix[row][col], int_width))
                sim.set_value(downsampleStencilChain1Per32.I1,
                              int2seq(image_matrix[row][col + 1], int_width))
            sim.evaluate()
            assert sim.get_value(downsampleStencilChain1Per32.ready_data_in,
                                 scope) == 1
            if sim.get_value(downsampleStencilChain1Per32.valid_data_out,
                             scope) == 1:
                if cur_row_to_check in valid_out_rows and cur_col_to_check in valid_out_cols:
                    if seq2int(
                            sim.get_value(downsampleStencilChain1Per32.O0,
                                          scope)
                    ) != thirdResults[cur_row_to_check][cur_col_to_check]:
                        print(cur_col_to_check)
                    print("Overall row and col : ({}, {})".format(row, col))
                    assert seq2int(
                        sim.get_value(downsampleStencilChain1Per32.O0, scope)
                    ) == thirdResults[cur_row_to_check][cur_col_to_check]
                cur_col_to_check += 1
                cur_col_to_check = cur_col_to_check % num_valid_out_cols
                if cur_col_to_check == 0:
                    cur_row_to_check += 1
                    cur_row_to_check = cur_row_to_check
                if not cur_row_to_check in valid_out_rows:
                    successfully_checked_all_valid_outputs = True
                    break
            sim.advance_cycle()
        if successfully_checked_all_valid_outputs:
            break
    assert successfully_checked_all_valid_outputs
コード例 #25
0
ファイル: test_pop.py プロジェクト: mfkiwl/mantle-ice40-IDE
def test_pop_count():
    PopCount8 = DefinePopCount(8)
    m.compile('build/popcount8', PopCount8, output="coreir")
    assert check_files_equal(__file__,
            "build/popcount8.json", "gold/popcount8.json")

    scope = Scope()
    sim = CoreIRSimulator(PopCount8, None)
    for I, expected_O in [(1, 1), (2, 1), (3, 2)]:
        sim.set_value(PopCount8.I, BitVector[8](I), scope)
        sim.evaluate()
        assert BitVector[8](sim.get_value(PopCount8.O, scope)).as_int() == expected_O
コード例 #26
0
ファイル: test_updown.py プロジェクト: adamdai/aetherling
def run_test_updown_npxPerClock(pxPerClock):
    upsampleAmount = 7
    c = coreir.Context()
    cirb = CoreIRBackend(c)
    scope = Scope()
    args = ClockInterface(False, False) + RAMInterface(imgSrc, True, True,
                                                       pxPerClock)

    testcircuit = DefineCircuit(
        'Test_UpsampleDownsample_{}PxPerClock'.format(pxPerClock), *args)

    imgData = loadImage(imgSrc, pxPerClock)
    pixelType = Array(imgData.bitsPerPixel, Bit)
    bitsToPixelHydrate = MapParallel(cirb, pxPerClock,
                                     Hydrate(cirb, pixelType))
    upParallel = MapParallel(cirb, pxPerClock,
                             UpsampleParallel(upsampleAmount, pixelType))
    downParallel = MapParallel(
        cirb, pxPerClock, DownsampleParallel(cirb, upsampleAmount, pixelType))
    pixelToBitsDehydrate = MapParallel(cirb, pxPerClock,
                                       Dehydrate(cirb, pixelType))

    # Note: input image RAM will send data to hydrate,
    # which converts it to form upsample and downsample can use
    # note that these do wiriring to connect the RAMs to edge of test circuit and
    # adjacent node inside circuit
    InputImageRAM(cirb, testcircuit, bitsToPixelHydrate.I, imgSrc, pxPerClock)
    OutputImageRAM(cirb, testcircuit, pixelToBitsDehydrate.out,
                   testcircuit.input_ren, imgSrc, pxPerClock)
    wire(upParallel.I, bitsToPixelHydrate.out)
    wire(upParallel.O, downParallel.I)
    wire(downParallel.O, pixelToBitsDehydrate.I)

    EndCircuit()

    #GetCoreIRModule(cirb, testcircuit).save_to_file("updown_out{}.json".format(pxPerClock))

    sim = CoreIRSimulator(testcircuit,
                          testcircuit.CLK,
                          context=cirb.context,
                          namespaces=[
                              "aetherlinglib", "commonlib", "mantle", "coreir",
                              "global"
                          ])

    LoadImageRAMForSimulation(sim, testcircuit, scope, imgSrc, pxPerClock)
    # run the simulation for all the rows
    for i in range(imgData.numRows):
        sim.evaluate()
        sim.advance_cycle()
        sim.evaluate()
    DumpImageRAMForSimulation(sim, testcircuit, scope, imgSrc, pxPerClock,
                              validIfEqual)
コード例 #27
0
def test_downsample_sequential_ce_and_rv_always_true():
    width = 5
    num_elements = 6
    active_idx = 3
    time_per_element = 1
    scope = Scope()
    out_type = Array[width, Out(BitIn)]
    in_type = In(out_type)
    args = [
        'I', in_type, 'O', out_type, 'ready_up',
        Out(Bit), 'valid_up',
        In(Bit), 'ready_down',
        In(Bit), 'valid_down',
        Out(Bit)
    ] + ClockInterface(has_ce=True)

    testcircuit = DefineCircuit('Test_Downsample_Sequential', *args)

    downsampleSequential = DownsampleSequential(num_elements,
                                                time_per_element,
                                                active_idx,
                                                in_type,
                                                has_ce=True)
    wire(downsampleSequential.I, testcircuit.I)
    wire(testcircuit.O, downsampleSequential.O)
    wire(testcircuit.ready_up, downsampleSequential.ready_up)
    wire(testcircuit.valid_up, downsampleSequential.valid_up)
    wire(testcircuit.ready_down, downsampleSequential.ready_down)
    wire(testcircuit.valid_down, downsampleSequential.valid_down)
    wire(testcircuit.CE, downsampleSequential.CE)
    EndCircuit()

    sim = CoreIRSimulator(testcircuit,
                          testcircuit.CLK,
                          namespaces=[
                              "aetherlinglib", "commonlib", "mantle", "coreir",
                              "global"
                          ])

    for clk in range(num_elements):
        sim.set_value(testcircuit.valid_up, True, scope)
        sim.set_value(testcircuit.ready_down, True, scope)
        sim.set_value(testcircuit.CE, True, scope)
        sim.set_value(testcircuit.I, int2seq(clk, width), scope)
        sim.evaluate()
        if clk == active_idx:
            assert seq2int(sim.get_value(testcircuit.O, scope)) == clk
        assert sim.get_value(testcircuit.valid_down,
                             scope) == (active_idx == clk // time_per_element)
        assert sim.get_value(testcircuit.ready_up, scope) == True
        sim.advance_cycle()
        sim.evaluate()
コード例 #28
0
def impl_test_1D_line_buffer(magma_type, pixels_per_clock: int,
                             window_width: int, image_size: int,
                             output_stride: int, origin: int):
    """Run tests for the 1D line buffer with given token type (magma_type)
and parameters."""

    scope = Scope()

    # Test line buffer for each combination of parameters and test data.
    for in_arrays in generate_test_data_sets_1D(magma_type, pixels_per_clock,
                                                image_size):
        a_1D_line_buffer_test(scope, in_arrays, magma_type, pixels_per_clock,
                              window_width, image_size, output_stride, origin)
コード例 #29
0
def test_downsample_parallel_rv():
    width = 5
    num_in_per_clk = 4
    num_clocks = 5
    scope = Scope()
    outType = Array[width, Out(BitIn)]
    inType = Array[num_in_per_clk, In(outType)]
    args = [
        'I', inType, 'O', outType, 'ready_up',
        Out(Bit), 'valid_up',
        In(Bit), 'ready_down',
        In(Bit), 'valid_down',
        Out(Bit)
    ] + ClockInterface(False, False)

    testcircuit = DefineCircuit('Test_Downsample_Parallel', *args)

    downsampleParallel = DownsampleParallel(num_in_per_clk,
                                            2,
                                            inType.T,
                                            has_ready_valid=True)
    wire(downsampleParallel.I, testcircuit.I)
    wire(testcircuit.O, downsampleParallel.O)
    wire(testcircuit.ready_up, downsampleParallel.ready_up)
    wire(testcircuit.valid_up, downsampleParallel.valid_up)
    wire(testcircuit.ready_down, downsampleParallel.ready_down)
    wire(testcircuit.valid_down, downsampleParallel.valid_down)

    EndCircuit()

    sim = CoreIRSimulator(testcircuit,
                          testcircuit.CLK,
                          namespaces=[
                              "aetherlinglib", "commonlib", "mantle", "coreir",
                              "global"
                          ])

    for clk in range(num_clocks):
        sim.set_value(testcircuit.valid_up, clk % 4 == 0, scope)
        sim.set_value(testcircuit.ready_down, clk % 2 == 0, scope)
        for i in range(num_in_per_clk):
            sim.set_value(testcircuit.I[i],
                          int2seq(i + clk * num_in_per_clk, width), scope)
        sim.evaluate()
        assert seq2int(sim.get_value(testcircuit.O,
                                     scope)) == 2 + clk * num_in_per_clk
        assert sim.get_value(testcircuit.valid_down, scope) == (clk % 4 == 0)
        assert sim.get_value(testcircuit.ready_up, scope) == (clk % 2 == 0)
        sim.advance_cycle()
        sim.evaluate()
コード例 #30
0
def test_reduce_partially_parallel():
    width = 11
    numIn = 12
    parallelism = 3
    scope = Scope()
    inType = In(Array[width, BitIn])
    outType = Out(Array[width, Bit])
    args = [
        'I', Array[parallelism, inType], 'O', outType, 'ready',
        Out(Bit), 'valid',
        Out(Bit)
    ] + ClockInterface(False, False)

    testcircuit = DefineCircuit('Test_Reduce_Parallel', *args)

    reduce_op = ReducePartiallyParallel(numIn, parallelism, DefineAdd(width))
    wire(reduce_op.I, testcircuit.I)
    wire(testcircuit.O, reduce_op.O)
    wire(testcircuit.ready, reduce_op.ready)
    wire(testcircuit.valid, reduce_op.valid)

    EndCircuit()

    sim = CoreIRSimulator(testcircuit,
                          testcircuit.CLK,
                          namespaces=[
                              "aetherlinglib", "commonlib", "mantle", "coreir",
                              "global"
                          ])

    reduce_result = 0
    for i in range(numIn * 2 // parallelism):
        reduce_result += i + i * 5 + i * 10
        sim.set_value(testcircuit.I[0], int2seq(i, width), scope)
        sim.set_value(testcircuit.I[1], int2seq(i * 5, width), scope)
        sim.set_value(testcircuit.I[2], int2seq(i * 10, width), scope)
        sim.evaluate()
        # exit last time of loop without going to next iteration, time to check results then
        if i % (numIn // parallelism) == (numIn // parallelism) - 1:
            assert seq2int(sim.get_value(testcircuit.O,
                                         scope)) == reduce_result
            assert sim.get_value(testcircuit.ready, scope) == True
            assert sim.get_value(testcircuit.valid, scope) == True
            reduce_result = 0
        else:
            assert sim.get_value(testcircuit.ready, scope) == True
            assert sim.get_value(testcircuit.valid, scope) == False
        sim.advance_cycle()
        sim.evaluate()