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
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))
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
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
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
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