Exemple #1
0
def test_lut_unary(op):
    pe = PE()
    inst = getattr(asm, f"lut_{op.name}")()
    for _ in range(NTESTS):
        b0 = Bit(random.choice([0,1]))
        b1 = Bit(random.choice([0,1]))
        b2 = Bit(random.choice([0,1]))
        data0 = UIntVector.random(DATAWIDTH)
        _, res_p,_ = pe(inst, data0=data0,bit0=b0,bit1=b1,bit2=b2)
        assert res_p==op.func(b1)
Exemple #2
0
def test_lut_ternary(op):
    pe = PE()
    inst = getattr(asm, f"lut_{op.name}")()
    for _ in range(NTESTS):
        sel = Bit(random.choice([0,1]))
        d0 = Bit(random.choice([0,1]))
        d1 = Bit(random.choice([0,1]))
        data0 = UIntVector.random(DATAWIDTH)
        _, res_p,_ = pe(inst, data0=data0,bit0=d0,bit1=d1,bit2=sel)
        assert res_p==op.func(sel,d0,d1)
Exemple #3
0
def test_stall(args):
    data0, data1 = args
    inst = asm.add(ra_mode=Mode_t.BYPASS, rb_mode=Mode_t.DELAY)
    data1_delay_values = [UIntVector.random(DATAWIDTH)]
    rtl_tester(inst,
               data0,
               data1,
               res=data0,
               clk_en=0,
               data1_delay_values=data1_delay_values)
Exemple #4
0
def test_reg_delay(args):
    data0, data1 = args
    inst = asm.add(ra_mode=Mode_t.DELAY, rb_mode=Mode_t.DELAY)
    data1_delay_values = [UIntVector.random(DATAWIDTH)]
    rtl_tester(inst,
               data0,
               data1,
               res=data0 + data1,
               delay=1,
               data1_delay_values=data1_delay_values)
Exemple #5
0
def test_lut():
    pe = PE()
    for _ in range(NTESTS):
        lut_val = BitVector.random(8)
        inst = asm.lut(lut_val)
        b0 = Bit(random.choice([0,1]))
        b1 = Bit(random.choice([0,1]))
        b2 = Bit(random.choice([0,1]))
        data0 = UIntVector.random(DATAWIDTH)
        _, res_p,_ = pe(inst, data0=data0,bit0=b0,bit1=b1,bit2=b2)
        assert res_p== lut_val[int(BitVector[3]([b0,b1,b2]))]
Exemple #6
0
def test_operator_int_shift(op, reference, width):
    for _ in range(NTESTS):
        I0, I1 = SIntVector.random(width), UIntVector.random(width)
        expected = signed(reference(int(I0), int(I1)), width)
        assert expected == int(op(I0, I1))
Exemple #7
0
def test_operator_comparison(op, reference, width):
    for _ in range(NTESTS):
        I0, I1 = UIntVector.random(width), UIntVector.random(width)
        expected = Bit(reference(int(I0), int(I1)))
        assert expected == bool(op(I0, I1))
Exemple #8
0
def test_operator_uint1(op, reference, width):
    for _ in range(NTESTS):
        I = UIntVector.random(width)
        expected = unsigned(reference(int(I)), width)
        assert expected == int(op(I))
Exemple #9
0
def test_reg_const(args):
    data0, const1 = args
    data1 = UIntVector.random(DATAWIDTH)
    inst = asm.add(rb_mode=Mode_t.CONST, rb_const=const1)
    rtl_tester(inst, data0, data1, res=data0 + const1)
Exemple #10
0
NTESTS = 4


@pytest.mark.parametrize("op", [
    op(asm.and_(), lambda x, y: x & y),
    op(asm.or_(), lambda x, y: x | y),
    op(asm.xor(), lambda x, y: x ^ y),
    op(asm.add(), lambda x, y: x + y),
    op(asm.sub(), lambda x, y: x - y),
    op(asm.lsl(), lambda x, y: x << y),
    op(asm.lsr(), lambda x, y: x >> y),
    op(asm.umin(), lambda x, y: (x < y).ite(x, y)),
    op(asm.umax(), lambda x, y: (x > y).ite(x, y))
])
@pytest.mark.parametrize(
    "args", [(UIntVector.random(DATAWIDTH), UIntVector.random(DATAWIDTH))
             for _ in range(NTESTS)])
def test_unsigned_binary(op, args):
    x, y = args
    res, _, _ = pe(op.inst, Data(x), Data(y))
    assert res == op.func(x, y)
    rtl_tester(op, x, y, res=res)


@pytest.mark.parametrize("op", [
    op(asm.lsl(), lambda x, y: x << y),
    op(asm.asr(), lambda x, y: x >> y),
    op(asm.smin(), lambda x, y: (x < y).ite(x, y)),
    op(asm.smax(), lambda x, y: (x > y).ite(x, y)),
])
@pytest.mark.parametrize(