mirror of https://github.com/openXC7/prjxray.git
95 lines
2.9 KiB
Python
95 lines
2.9 KiB
Python
import json
|
|
|
|
|
|
def load_speed(fin):
|
|
speed_models = {}
|
|
speed_types = {}
|
|
for l in fin:
|
|
delay = {}
|
|
l = l.strip()
|
|
for kvs in l.split():
|
|
name, value = kvs.split(':')
|
|
name = name.lower()
|
|
if name in ('class', ):
|
|
continue
|
|
if name in ('speed_index', ):
|
|
value = int(value)
|
|
if name == 'type':
|
|
speed_types.setdefault(value, {})
|
|
delay[name] = value
|
|
delayk = delay['name']
|
|
if delayk in delay:
|
|
raise Exception("Duplicate name")
|
|
|
|
if "name" in delay and "name_logical" in delay:
|
|
# Always true
|
|
if delay['name'] != delay['name_logical']:
|
|
raise Exception("nope!")
|
|
# Found a counter example
|
|
if 0 and delay['name'] != delay['forward']:
|
|
# ('BSW_NONTLFW_TLRV', '_BSW_LONG_NONTLFORWARD')
|
|
print(delay['name'], delay['forward'])
|
|
raise Exception("nope!")
|
|
# Found a counter example
|
|
if 0 and delay['forward'] != delay['reverse']:
|
|
# _BSW_LONG_NONTLFORWARD _BSW_LONG_TLREVERSE
|
|
print(delay['forward'], delay['reverse'])
|
|
raise Exception("nope!")
|
|
|
|
speed_models[delayk] = delay
|
|
return speed_models, speed_types
|
|
|
|
|
|
def load_cost_code(fin):
|
|
# COST_CODE:4 COST_CODE_NAME:SLOWSINGLE
|
|
cost_codes = {}
|
|
for l in fin:
|
|
lj = {}
|
|
l = l.strip()
|
|
for kvs in l.split():
|
|
name, value = kvs.split(':')
|
|
name = name.lower()
|
|
lj[name] = value
|
|
cost_code = {
|
|
'name': lj['cost_code_name'],
|
|
'code': int(lj['cost_code']),
|
|
# Hmm is this unique per type?
|
|
#'speed_class': int(lj['speed_class']),
|
|
}
|
|
|
|
cost_codes[cost_code['name']] = cost_code
|
|
return cost_codes
|
|
|
|
|
|
def run(speed_fin, node_fin, fout, verbose=0):
|
|
print('Loading data')
|
|
speed_models, speed_types = load_speed(speed_fin)
|
|
cost_codes = load_cost_code(node_fin)
|
|
|
|
j = {
|
|
'speed_model': speed_models,
|
|
'speed_type': speed_types,
|
|
'cost_code': cost_codes,
|
|
}
|
|
json.dump(j, fout, sort_keys=True, indent=4, separators=(',', ': '))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
import argparse
|
|
|
|
parser = argparse.ArgumentParser(description='Timing fuzzer')
|
|
|
|
parser.add_argument('--verbose', type=int, help='')
|
|
parser.add_argument(
|
|
'speed_fn_in', default='/dev/stdin', nargs='?', help='Input file')
|
|
parser.add_argument(
|
|
'node_fn_in', default='/dev/stdin', nargs='?', help='Input file')
|
|
parser.add_argument(
|
|
'fn_out', default='/dev/stdout', nargs='?', help='Output file')
|
|
args = parser.parse_args()
|
|
run(
|
|
open(args.speed_fn_in, 'r'),
|
|
open(args.node_fn_in, 'r'),
|
|
open(args.fn_out, 'w'),
|
|
verbose=args.verbose)
|