aboutsummaryrefslogtreecommitdiffstats
path: root/icebox/tc_xlat_netnames.py
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2017-08-25 14:59:59 +0200
committerClifford Wolf <clifford@clifford.at>2017-08-25 14:59:59 +0200
commit1565fdc0eecb24da27c513237b8e8e12dee21325 (patch)
treeee35e1f27a0ac79c5203bca7696ec329f9246dca /icebox/tc_xlat_netnames.py
parent873eb9effaef6f97df24ca8d7b6eae3721303454 (diff)
downloadicestorm-1565fdc0eecb24da27c513237b8e8e12dee21325.tar.gz
icestorm-1565fdc0eecb24da27c513237b8e8e12dee21325.tar.bz2
icestorm-1565fdc0eecb24da27c513237b8e8e12dee21325.zip
Implement high-level configuration format
# Conflicts: # icebox/Makefile
Diffstat (limited to 'icebox/tc_xlat_netnames.py')
-rw-r--r--icebox/tc_xlat_netnames.py79
1 files changed, 79 insertions, 0 deletions
diff --git a/icebox/tc_xlat_netnames.py b/icebox/tc_xlat_netnames.py
new file mode 100644
index 0000000..53b73de
--- /dev/null
+++ b/icebox/tc_xlat_netnames.py
@@ -0,0 +1,79 @@
+# Test case for `icebox_asc2hlc': Does net name translation work correctly?
+# Copyright (C) 2017 Roland Lutz
+#
+# This program is free software: you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 3 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+import sys
+import icebox
+from icebox_asc2hlc import translate_netname
+
+def test_netname_translation(ic):
+ sys.stderr.write("testing forward netname translation "
+ "for the `%s' device...\n" % ic.device)
+ all_tiles = set()
+ for x in range(ic.max_x + 1):
+ for y in range(ic.max_y + 1):
+ if ic.tile(x, y) is not None:
+ all_tiles.add((x, y))
+
+ netnames = set()
+ failed = False
+
+ for group in ic.group_segments(all_tiles, connect_gb = False):
+ is_span = set(net.startswith('sp') for x, y, net in group)
+ assert len(is_span) == 1
+ if True not in is_span:
+ # only span nets are interesting here
+ continue
+
+ s = set()
+ for seg in group:
+ s.add(translate_netname(seg[0], seg[1],
+ ic.max_x - 1, ic.max_y - 1, seg[2]))
+ if len(s) != 1:
+ failed = True
+ print("translated netnames don't match")
+ for seg in group:
+ print("%d %d %s" % seg, "->",
+ translate_netname(seg[0], seg[1],
+ ic.max_x - 1, ic.max_y - 1, seg[2]))
+ print()
+
+ for dulpicate_netname in netnames.intersection(s):
+ failed = True
+ print("duplicate netname: %s" % dulpicate_netname)
+ for seg in group:
+ print("%d %d %s" % seg, "->",
+ translate_netname(seg[0], seg[1],
+ ic.max_x - 1, ic.max_y - 1, seg[2]))
+ print()
+
+ netnames.update(s)
+
+ if failed:
+ sys.stderr.write("ERROR\n")
+ sys.exit(1)
+
+def main():
+ ic = icebox.iceconfig()
+ ic.setup_empty_384()
+ test_netname_translation(ic)
+
+ ic = icebox.iceconfig()
+ ic.setup_empty_1k()
+ test_netname_translation(ic)
+
+ ic = icebox.iceconfig()
+ ic.setup_empty_8k()
+ test_netname_translation(ic)
+
+if __name__ == '__main__':
+ main()