aboutsummaryrefslogtreecommitdiffstats
path: root/ice40/chipdb.py
diff options
context:
space:
mode:
authorMiodrag Milanovic <mmicko@gmail.com>2018-07-03 20:14:49 +0200
committerMiodrag Milanovic <mmicko@gmail.com>2018-07-03 20:14:49 +0200
commitec9a9de6d3db22de27b40d69d2acbdd4f29c3af3 (patch)
tree652dd8181fb4f1b124d14c42b8051dd79d1c20be /ice40/chipdb.py
parent5ca76461da3498b16f871f8ee50794fe67ce8394 (diff)
downloadnextpnr-ec9a9de6d3db22de27b40d69d2acbdd4f29c3af3.tar.gz
nextpnr-ec9a9de6d3db22de27b40d69d2acbdd4f29c3af3.tar.bz2
nextpnr-ec9a9de6d3db22de27b40d69d2acbdd4f29c3af3.zip
Make chibdb.py able to generate pure binary output
Diffstat (limited to 'ice40/chipdb.py')
-rw-r--r--ice40/chipdb.py32
1 files changed, 27 insertions, 5 deletions
diff --git a/ice40/chipdb.py b/ice40/chipdb.py
index 623cdfce..8a1c9ce2 100644
--- a/ice40/chipdb.py
+++ b/ice40/chipdb.py
@@ -3,6 +3,14 @@
import sys
import re
import textwrap
+import argparse
+
+parser = argparse.ArgumentParser(description="convert ICE40 chip database")
+group = parser.add_mutually_exclusive_group()
+group.add_argument("-b", "--binary", action="store_true")
+group.add_argument("-c", "--c_file", action="store_true")
+parser.add_argument("filename", type=str, help="chipdb input filename")
+args = parser.parse_args()
endianness = "le"
nodebug = True
@@ -212,7 +220,7 @@ def init_tiletypes(device):
tile_sizes = {i: (0, 0) for i in range(num_tile_types)}
tile_bits = [[] for _ in range(num_tile_types)]
-with open(sys.argv[1], "r") as f:
+with open(args.filename, "r") as f:
mode = None
for line in f:
@@ -855,6 +863,11 @@ class BinaryBlobAssembler:
column = 0
print("\";", file=f)
+ def write_binary(self, f):
+ assert self.finalized
+ assert self.data[len(self.data)-1] == 0
+ f.buffer.write(self.data)
+
bba = BinaryBlobAssembler("chipdb_blob_%s" % dev_name, endianness)
bba.r("chip_info_%s" % dev_name, "chip_info")
@@ -1131,12 +1144,21 @@ bba.r("package_info_%s" % dev_name, "packages_data")
bba.finalize()
-print('#include "nextpnr.h"')
-print('NEXTPNR_NAMESPACE_BEGIN')
+if args.c_file:
+ print('#include "nextpnr.h"')
+ print('NEXTPNR_NAMESPACE_BEGIN')
+
+
+if args.binary:
+ bba.write_binary(sys.stdout)
+
+if args.c_file:
+ bba.write_string_c(sys.stdout)
-bba.write_string_c(sys.stdout)
# bba.write_uint64_c(sys.stdout)
# bba.write_compact_c(sys.stdout, "uint8_t")
# bba.write_verbose_c(sys.stdout, "uint8_t")
-print('NEXTPNR_NAMESPACE_END')
+if args.c_file:
+ print('NEXTPNR_NAMESPACE_END')
+