b2eabf4a9f
A step towards moving the tracegen scripts from rocket-chip to groundtest. I will raise an issue requesting that the scripts are now removed from rocket-chip by someone with write access. I have updated the README to account for the move. This commit includes a bugfix from @mwachs5 (with slight mods by me) relating to potential division by zero in toaxe.py.
63 lines
1.6 KiB
Python
Executable File
63 lines
1.6 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
# This file was originally written by Matthew Naylor, University of
|
|
# Cambridge.
|
|
#
|
|
# This software was partly developed by the University of Cambridge
|
|
# Computer Laboratory under DARPA/AFRL contract FA8750-10-C-0237
|
|
# ("CTSRD"), as part of the DARPA CRASH research programme.
|
|
#
|
|
# This software was partly developed by the University of Cambridge
|
|
# Computer Laboratory under DARPA/AFRL contract FA8750-11-C-0249
|
|
# ("MRC2"), as part of the DARPA MRC research programme.
|
|
#
|
|
# This software was partly developed by the University of Cambridge
|
|
# Computer Laboratory as part of the Rigorous Engineering of
|
|
# Mainstream Systems (REMS) project, funded by EPSRC grant
|
|
# EP/K008528/1.
|
|
|
|
# -------
|
|
# Outline
|
|
# -------
|
|
|
|
# Usage:
|
|
#
|
|
# tracegen.py EMULATOR SEED
|
|
#
|
|
# This script generates a trace using the given emulator (built
|
|
# with CONFIG=TraceGenConfig). It waits until all cores have
|
|
# completed trace generation before terminating the emulator.
|
|
|
|
import sys
|
|
import subprocess
|
|
import re
|
|
|
|
def main():
|
|
if len(sys.argv) != 3:
|
|
sys.stderr.write("Usage: tracegen.py EMULATOR SEED\n")
|
|
sys.exit(-1)
|
|
|
|
p = subprocess.Popen([sys.argv[1], "+verbose", "-s" + sys.argv[2]],
|
|
stderr=subprocess.PIPE, stdout=subprocess.PIPE)
|
|
if p == None:
|
|
sys.stderr.write("File not found: " + sys.argv[1] + "\n")
|
|
sys.exit(-1)
|
|
|
|
numFinished = 0
|
|
while True:
|
|
line = p.stderr.readline()
|
|
if line[0:9] == "FINISHED ":
|
|
total = int(line[9:-1])
|
|
numFinished = numFinished + 1
|
|
if numFinished == total:
|
|
break
|
|
else:
|
|
print line,
|
|
|
|
p.terminate()
|
|
|
|
try:
|
|
main()
|
|
except KeyboardInterrupt:
|
|
sys.exit(-1)
|