示例#1
0
        def reader():
            payload_aa = payload_a
            for i in range(32 * 12 // 64):
                self.assertEqual((yield from read_from_stream(dut.output, extract=("payload", "last"))), (payload_aa & 0xffff_ffff_ffff_ffff, 0 if i < 5 else 1))
                payload_aa = payload_aa >> 64

            payload_bb = payload_b
            for i in range(32 * 12 // 64):
                print(i)
                self.assertEqual((yield from read_from_stream(dut.output, extract=("payload", "last"))), (payload_bb & 0xffff_ffff_ffff_ffff, 0))
                payload_bb = payload_bb >> 64
示例#2
0
 def reader():
     for i in range(100):
         got = (yield from read_from_stream(dut.output, extract="payload"))
         print(got)
         self.assertEqual(got, i)
         if i % 3 == 0:
             yield from do_nothing()
示例#3
0
def axil_write(axi, addr, data, timeout=100):
    yield from write_to_stream(axi.write_address, payload=addr)
    yield from write_to_stream(axi.write_data, payload=data)
    response = (yield from read_from_stream(axi.write_response,
                                            extract="resp",
                                            timeout=timeout))
    assert AxiResponse.OKAY.value == response
示例#4
0
def axil_read(axi, addr, timeout=100):
    yield from write_to_stream(axi.read_address, payload=addr)
    value, response = (yield from read_from_stream(axi.read_data,
                                                   extract=("payload", "resp"),
                                                   timeout=timeout))
    assert AxiResponse.OKAY.value == response
    return value
示例#5
0
 def reader():
     last_count = 0
     for i in range(200):
         last_count += (yield from read_from_stream(dut.output, extract="last"))
         if i % 10 == 0:
             yield from do_nothing()
     self.assertEqual(last_count, 10)
示例#6
0
 def reader():
     self.assertEqual((yield from read_from_stream(dut.output, extract=("payload", "last"))), (0b100000000000, 0))
     self.assertEqual((yield from read_from_stream(dut.output, extract=("payload", "last"))), (0b000000000001, 0))
     self.assertEqual((yield from read_from_stream(dut.output, extract=("payload", "last"))), (0b000000000010, 0))
     self.assertEqual((yield from read_from_stream(dut.output, extract=("payload", "last"))), (0b000000000100, 1))
     self.assertEqual((yield from read_from_stream(dut.output, extract=("payload", "last"))), (0b000000001000, 0))
     self.assertEqual((yield from read_from_stream(dut.output, extract=("payload", "last"))), (0b000000010000, 0))
     self.assertEqual((yield from read_from_stream(dut.output, extract=("payload", "last"))), (0b000000100000, 0))
     self.assertEqual((yield from read_from_stream(dut.output, extract=("payload", "last"))), (0b000001000000, 0))
示例#7
0
 def read_process():
     for i in range(128):
         data, last = (yield from
                       read_from_stream(reader.output,
                                        extract=("payload", "last")))
         assert data == i + 2
         assert last == ((i % 8) == 0)
     yield Passive()
示例#8
0
 def reader():
     self.assertEqual((yield from read_from_stream(dut.output)), 0b001)
     self.assertEqual((yield from read_from_stream(dut.output)), 0b010)
     self.assertEqual((yield from read_from_stream(dut.output)), 0b100)
     self.assertEqual((yield from read_from_stream(dut.output)), 0b011)
     self.assertEqual((yield from read_from_stream(dut.output)), 0b110)
     self.assertEqual((yield from read_from_stream(dut.output)), 0b111)
     self.assertEqual((yield from read_from_stream(dut.output)), 0b000)
示例#9
0
 def reader():
     last_count = 0
     for i in range(100):
         last = (yield from read_from_stream(dut.output, extract="last"))
         last_count += last
         if i % 10 == 1:
             assert last
         else:
             assert not last
         if i % 3 == 0:
             yield from do_nothing()
     self.assertEqual(last_count, 10)
示例#10
0
def answer_write_burst(axi: AxiEndpoint, timeout=100):
    memory = {}
    addr, burst_len, burst_type, beat_size_bytes = yield from read_from_stream(
        axi.write_address,
        ("payload", "burst_len", "burst_type", "beat_size_bytes"), timeout)
    assert 2**beat_size_bytes == axi.data_bytes
    assert burst_type == AxiBurstType.INCR.value
    accepted = 0
    for i in range(burst_len + 1):
        value, last, byte_strobe = yield from read_from_stream(
            axi.write_data, ("payload", "last", "byte_strobe"), timeout)
        if i == burst_len:
            assert last
        else:
            pass
            assert not last
        if byte_strobe != 0:
            memory[addr + i * axi.data_bytes] = value
            accepted += 1
    write_to_stream(axi.write_response, resp=AxiResponse.OKAY)
    print("wrote", memory)

    return memory, accepted
示例#11
0
def answer_read_burst(axi: AxiEndpoint, memory: Dict[int, int], timeout=100):
    addr, burst_len, burst_type, beat_size_bytes = yield from read_from_stream(
        axi.read_address,
        ("payload", "burst_len", "burst_type", "beat_size_bytes"), timeout)
    assert 2**beat_size_bytes == axi.data_bytes
    assert burst_type == AxiBurstType.INCR.value
    print("read", addr, burst_len)

    for i in range(burst_len + 1):
        yield from write_to_stream(axi.read_data,
                                   payload=memory[addr + (i * axi.data_bytes)],
                                   resp=AxiResponse.OKAY,
                                   last=(i == burst_len),
                                   timeout=timeout)
示例#12
0
def read_frame_from_stream(stream, timeout=100, pause=False):
    random = Random(1)
    frame = [[]]
    while True:
        if (random.random() < 0.3) and pause:
            yield from do_nothing()
        px, line_last, frame_last = (yield from read_from_stream(
            stream,
            timeout=timeout,
            extract=("payload", "line_last", "frame_last")))
        frame[-1].append(px)
        if frame_last:
            return frame
        if line_last:
            frame.append([])
示例#13
0
 def read_process():
     read = []
     while True:
         payload, last = (yield from
                          read_from_stream(bit_stuffing.output,
                                           extract=("payload", "last")))
         read.append("{:08b}".format(payload))
         if last:
             break
     read_bitarray = "".join(x[::-1] for x in read)
     print(read_bitarray)
     decode_iter = bitarray(read_bitarray).iterdecode(
         {k: bitarray(v[::-1])
          for k, v in huffman.table.items()})
     for c, expected in zip(decode_iter, input_data):
         self.assertEqual(chr(c), expected)
示例#14
0
 def read_process():
     read = ""
     while True:
         data, length, last = (yield from read_from_stream(
             huffman.output,
             extract=("payload", "current_width", "last")))
         bitstring = "{:0255b}".format(data)[::-1][:length]
         read += bitstring
         if last:
             break
     print(read)
     decode_iter = bitarray(read).iterdecode(
         {k: bitarray(v[::-1])
          for k, v in huffman.table.items()})
     decoded = ""
     try:
         for c in decode_iter:
             decoded += chr(c)
     except ValueError:  # Decoding may not finish with the byte boundary
         pass
     self.assertEqual(input_data, decoded)
示例#15
0
 def reader():
     for _ in range(100):
         a = yield from read_from_stream(gear_12_to_64.output)
         b = yield from read_from_stream(gear_48_to_64.output)
         print(f"{a:064b}")
         self.assertEqual(a, b)
示例#16
0
 def read_data_process():
     read_result = []
     while len(read_result) < len(golden_read_result):
         read = yield from read_from_stream(dut.output)
         read_result.append(read)
     self.assertEqual(read_result, golden_read_result)
示例#17
0
 def reader():
     for i, v in enumerate(output_data):
         read = (yield from read_from_stream(fifo_out.output))
         self.assertEqual(read, v)