aboutsummaryrefslogtreecommitdiff
path: root/fw/8b10b_test_vector_gen.py
diff options
context:
space:
mode:
authorjaseg <git@jaseg.net>2018-12-20 22:42:17 +0900
committerjaseg <git@jaseg.net>2018-12-20 22:42:17 +0900
commit132fd4f9c0184be033533953cc2c7ae92da311d9 (patch)
tree634c961de6168237d915e459c53fb6d5f1aed8b3 /fw/8b10b_test_vector_gen.py
parent90038f4378b7cdbe98e32ed1e5e3055dbe4776f2 (diff)
download8seg-132fd4f9c0184be033533953cc2c7ae92da311d9.tar.gz
8seg-132fd4f9c0184be033533953cc2c7ae92da311d9.tar.bz2
8seg-132fd4f9c0184be033533953cc2c7ae92da311d9.zip
8b10b encoder and decoder working
Tested on all 24-bit inputs after sync and on ~500M of random input with and without intermediate sync
Diffstat (limited to 'fw/8b10b_test_vector_gen.py')
-rwxr-xr-xfw/8b10b_test_vector_gen.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/fw/8b10b_test_vector_gen.py b/fw/8b10b_test_vector_gen.py
new file mode 100755
index 0000000..12460c1
--- /dev/null
+++ b/fw/8b10b_test_vector_gen.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python3
+
+def parse_size(s):
+ s = s.lower()
+ SUFFIXES = {'k': 1e3, 'm': 1e6, 'g': 1e9}
+ if s[-1] in SUFFIXES:
+ return int(int(s[:-1]) * SUFFIXES[s[-1]])
+ return int(s)
+
+def hexdump(data, byte_per_line=64):
+ for i in range(0, len(data), byte_per_line):
+ out = data[i:i+byte_per_line]
+ print(' '.join(f'{out[k]:02x}' for k in range(len(out)))) # use len(out) to handle partial lines
+
+if __name__ == '__main__':
+ from itertools import product
+ import os
+ import argparse
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument('cmd')
+ parser.add_argument('-l', '--length', default='1M', help='Generate [length} byte test vector. Only applicable to random.')
+ parser.add_argument('-s', '--syncfreq', default=None, help='Emit comma every [syncfreq] bytes. Default: don\'t emit any commas. Only applicable to random.')
+ args = parser.parse_args()
+
+ length = parse_size(args.length)
+ syncfreq = parse_size(args.syncfreq)
+
+
+ if args.cmd == 'exhaustive_separated':
+ for i, j, k in product(range(256), range(256), range(256)):
+ print(f'K.28.1 {i:02x} {j:02x} {k:02x}')
+
+ elif args.cmd == 'exhaustive_block':
+ print('K.28.1')
+ for i, j, k in product(range(256), range(256), range(256)):
+ print(f'{i:02x} {j:02x} {k:02x}')
+
+ elif args.cmd == 'random':
+ for chunk in range(0, length, syncfreq):
+ print('K.28.1')
+ hexdump(os.urandom(min(length-chunk, syncfreq)))
+