[icestorm] 28/75: Added icebox_colbuf

Ruben Undheim rubund-guest at moszumanska.debian.org
Wed Oct 7 15:52:06 UTC 2015


This is an automated email from the git hooks/post-receive script.

rubund-guest pushed a commit to branch master
in repository icestorm.

commit 0ee4b9f99b818dbfbb9215359baae9edb9310acf
Author: Clifford Wolf <clifford at clifford.at>
Date:   Sun Aug 2 16:34:42 2015 +0200

    Added icebox_colbuf
---
 icebox/Makefile         |   2 +
 icebox/icebox_colbuf.py | 140 ++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 142 insertions(+)

diff --git a/icebox/Makefile b/icebox/Makefile
index 5cd9b76..cc78073 100644
--- a/icebox/Makefile
+++ b/icebox/Makefile
@@ -23,6 +23,7 @@ install: all
 	cp icebox_chipdb.py  $(DESTDIR)/bin/icebox_chipdb
 	cp icebox_diff.py    $(DESTDIR)/bin/icebox_diff
 	cp icebox_explain.py $(DESTDIR)/bin/icebox_explain
+	cp icebox_colbuf.py  $(DESTDIR)/bin/icebox_colbuf
 	cp icebox_html.py    $(DESTDIR)/bin/icebox_html
 	cp icebox_maps.py    $(DESTDIR)/bin/icebox_maps
 	cp icebox_vlog.py    $(DESTDIR)/bin/icebox_vlog
@@ -33,6 +34,7 @@ uninstall:
 	rm -f $(DESTDIR)/bin/icebox_chipdb
 	rm -f $(DESTDIR)/bin/icebox_diff
 	rm -f $(DESTDIR)/bin/icebox_explain
+	rm -f $(DESTDIR)/bin/icebox_colbuf
 	rm -f $(DESTDIR)/bin/icebox_html
 	rm -f $(DESTDIR)/bin/icebox_maps
 	rm -f $(DESTDIR)/bin/icebox_vlog
diff --git a/icebox/icebox_colbuf.py b/icebox/icebox_colbuf.py
new file mode 100755
index 0000000..8d1ac3b
--- /dev/null
+++ b/icebox/icebox_colbuf.py
@@ -0,0 +1,140 @@
+#!/usr/bin/python2
+#
+#  Copyright (C) 2015  Clifford Wolf <clifford at clifford.at>
+#
+#  Permission to use, copy, modify, and/or distribute this software for any
+#  purpose with or without fee is hereby granted, provided that the above
+#  copyright notice and this permission notice appear in all copies.
+#
+#  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+#  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+#  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+#  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+#  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+#  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+#  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+
+from __future__ import division
+from __future__ import print_function
+
+import icebox
+import getopt, sys, re
+
+check_mode = False
+fixup_mode = False
+
+def usage():
+    print("""
+Usage: icebox_colbuf [options] [bitmap.txt]
+
+    -c
+        check colbuf bits
+
+    -f
+        fix colbuf bits
+""")
+    sys.exit(1)
+
+try:
+    opts, args = getopt.getopt(sys.argv[1:], "cf")
+except:
+    usage()
+
+for o, a in opts:
+    if o == "-c":
+        check_mode = True
+    elif o == "-f":
+        fixup_mode = True
+    else:
+        usage()
+
+if len(args) == 0:
+    args.append("/dev/stdin")
+
+if len(args) != 1:
+    usage()
+
+if check_mode == fixup_mode:
+    print("Error: Use either -c or -f!")
+    sys.exit(1)
+
+print("Reading file '%s'.." % args[0])
+ic = icebox.iceconfig()
+ic.read_file(args[0])
+
+def make_cache(stmt, raw_db):
+    cache = list()
+    for entry in raw_db:
+        if entry[1] == stmt and entry[2].startswith("glb_netwk_"):
+            cache_entry = [int(entry[2][-1]), []]
+            for bit in entry[0]:
+                value = "1"
+                if bit.startswith("!"):
+                    value = "0"
+                    bit = bit[1:]
+                match = re.match("B([0-9]+)\[([0-9]+)\]", bit)
+                cache_entry[1].append((int(match.group(1)), int(match.group(2)), value))
+            cache.append(cache_entry)
+    return cache
+
+def match_cache_entry(cache_entry, tile_dat):
+    for entry in cache_entry[1]:
+        if tile_dat[entry[0]][entry[1]] != entry[2]:
+            return False
+    return True
+
+def analyze_tile(ic, cache, tile_pos):
+    glbs = set()
+    tile_dat = ic.tile(tile_pos[0], tile_pos[1])
+    for cache_entry in cache:
+        if match_cache_entry(cache_entry, tile_dat):
+            glbs.add(cache_entry[0])
+    return glbs
+
+colbuf_map = dict()
+used_glbs_map = dict()
+driven_glbs_map = dict()
+
+for entry in ic.colbuf_db():
+    colbuf_map[(entry[2], entry[3])] = (entry[0], entry[1])
+
+for tiles in [ic.io_tiles, ic.logic_tiles, ic.ramb_tiles, ic.ramt_tiles]:
+    cache = None
+    for tile in tiles:
+        if cache is None:
+            cache = make_cache("buffer", ic.tile_db(tile[0], tile[1]))
+        glbs = analyze_tile(ic, cache, tile)
+        if len(glbs):
+            assert tile in colbuf_map
+            used_glbs_map[colbuf_map[tile]] = glbs
+
+    cache = None
+    for tile in tiles:
+        if cache is None:
+            cache = make_cache("ColBufCtrl", ic.tile_db(tile[0], tile[1]))
+        glbs = analyze_tile(ic, cache, tile)
+        if len(glbs):
+            driven_glbs_map[tile] = glbs
+
+if check_mode:
+    error_count = 0
+    for tile, bits in used_glbs_map.items():
+        for bit in bits:
+            if tile not in driven_glbs_map or bit not in driven_glbs_map[tile]:
+                print("Missing driver for glb_netwk_%d in tile %s" % (bit, tile))
+                error_count += 1
+    for tile, bits in driven_glbs_map.items():
+        for bit in bits:
+            if tile not in used_glbs_map or bit not in used_glbs_map[tile]:
+                print("Unused driver for glb_netwk_%d in tile %s" % (bit, tile))
+                error_count += 1
+    if error_count != 0:
+        print("Found %d errors!" % error_count)
+        sys.exit(1)
+    print("No errors found.")
+
+if fixup_mode:
+    print("Error: Fixup mode is not implemented yet!")
+    sys.exit(1)
+

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/icestorm.git



More information about the debian-science-commits mailing list