Esempio n. 1
0
def _run_sim_for_stats(asm_file: str, tmpdir: str) -> ExecutionStats:
    """ Run the OTBN simulator, collect statistics, and return them. """

    assert os.path.exists(asm_file)
    elf_file = testutil.asm_and_link_one_file(asm_file, tmpdir)

    sim = OTBNSim()
    load_elf(sim, elf_file)

    sim.state.start(0)
    sim.run(verbose=False, collect_stats=True)

    return sim.stats
Esempio n. 2
0
def on_run(sim: OTBNSim, args: List[str]) -> None:
    '''Run until ecall or error'''
    if len(args):
        raise ValueError('run expects zero arguments. Got {}.'.format(args))

    num_cycles = sim.run(verbose=False)
    print(' ran for {} cycles'.format(num_cycles))
Esempio n. 3
0
def main() -> int:
    parser = argparse.ArgumentParser()
    parser.add_argument("imem_words", type=int)
    parser.add_argument("imem_file")
    parser.add_argument("dmem_words", type=int)
    parser.add_argument("dmem_file")
    parser.add_argument("cycles_file")
    parser.add_argument("trace_file")
    parser.add_argument("start_addr", type=int)

    args = parser.parse_args()
    sim = OTBNSim(OTBNModel(verbose=args.trace_file))

    sim.load_program(decode_file(args.imem_file))
    with open(args.dmem_file, "rb") as f:
        sim.load_data(f.read())

    cycles = sim.run(start_addr=args.start_addr)

    with open(args.dmem_file, "wb") as f:
        f.write(sim.dump_data())

    with open(args.cycles_file, "wb") as f:
        f.write(struct.pack("<L", cycles))

    return 0
Esempio n. 4
0
def main() -> int:
    parser = argparse.ArgumentParser()
    parser.add_argument('elf')
    parser.add_argument('-v', '--verbose', action='store_true')
    parser.add_argument(
        '--dump-dmem',
        metavar="FILE",
        type=argparse.FileType('wb'),
        help=("after execution, write the data memory contents to this file. "
              "Use '-' to write to STDOUT."))
    parser.add_argument(
        '--dump-regs',
        metavar="FILE",
        type=argparse.FileType('w'),
        help=("after execution, write the GPR and WDR contents to this file. "
              "Use '-' to write to STDOUT."))
    parser.add_argument(
        '--dump-stats',
        metavar="FILE",
        type=argparse.FileType('w'),
        help=("after execution, write execution statistics to this file. "
              "Use '-' to write to STDOUT."))

    args = parser.parse_args()

    collect_stats = args.dump_stats is not None

    sim = OTBNSim()
    load_elf(sim, args.elf)

    sim.state.start(0)
    sim.run(verbose=args.verbose, collect_stats=collect_stats)

    if args.dump_dmem is not None:
        args.dump_dmem.write(sim.dump_data())

    if args.dump_regs is not None:
        for idx, value in enumerate(sim.state.gprs.peek_unsigned_values()):
            args.dump_regs.write(' x{:<2} = 0x{:08x}\n'.format(idx, value))
        for idx, value in enumerate(sim.state.wdrs.peek_unsigned_values()):
            args.dump_regs.write(' w{:<2} = 0x{:064x}\n'.format(idx, value))

    if collect_stats:
        stat_analyzer = ExecutionStatAnalyzer(sim.stats, args.elf)
        args.dump_stats.write(stat_analyzer.dump())

    return 0
Esempio n. 5
0
def main() -> int:
    parser = argparse.ArgumentParser()
    parser.add_argument('elf')
    parser.add_argument('-v', '--verbose', action='store_true')
    parser.add_argument(
        '--dump-dmem',
        metavar="FILE",
        type=argparse.FileType('wb'),
        help="after execution, write the data memory contents to this file")
    parser.add_argument(
        '--dump-regs',
        metavar="FILE",
        type=argparse.FileType('w'),
        default=sys.stdout,
        help=
        "after execution, write the GPR and WDR contents to this file (default: STDOUT)"
    )

    args = parser.parse_args()

    sim = OTBNSim()
    load_elf(sim, args.elf)

    sim.state.pc = 0
    sim.state.start()
    sim.run(verbose=args.verbose)

    if args.dump_dmem is not None:
        args.dump_dmem.write(sim.dump_data())

    if args.dump_regs is not None:
        for idx, value in enumerate(sim.state.gprs.peek_unsigned_values()):
            args.dump_regs.write(' x{:<2} = 0x{:08x}\n'.format(idx, value))
        for idx, value in enumerate(sim.state.wdrs.peek_unsigned_values()):
            args.dump_regs.write(' w{:<2} = 0x{:064x}\n'.format(idx, value))

    return 0
Esempio n. 6
0
def main() -> int:
    parser = argparse.ArgumentParser()
    parser.add_argument('elf')
    parser.add_argument('-v', '--verbose', action='store_true')
    parser.add_argument('--dmem-dump')

    args = parser.parse_args()

    model = OTBNModel(verbose=args.verbose)
    sim = OTBNSim(model)
    load_elf(sim, args.elf)

    sim.run(start_addr=0)

    if args.dmem_dump is not None:
        try:
            with open(args.dmem_dump, 'wb') as dmem_file:
                dmem_file.write(sim.dump_data())
        except OSError as err:
            sys.stderr.write('Failed to write DMEM to {!r}: {}.'.format(
                args.dmem_dump, err))
            return 1

    return 0