aboutsummaryrefslogtreecommitdiffstats
path: root/icebox/tc_rxlat_netnames.py
diff options
context:
space:
mode:
authorRoland Lutz <rlutz@hedmen.org>2017-09-02 14:45:03 +0200
committerRoland Lutz <rlutz@hedmen.org>2017-09-02 14:45:03 +0200
commitc9c181fef21740b45653e23a4989d22530b543f3 (patch)
tree22e3efb6cc24f97f7d64eb81766faee5eb973d72 /icebox/tc_rxlat_netnames.py
parent8354bc6086f11002cc58497f91f43200a09c13a9 (diff)
parentbb2bc7a00cc7117b5e84bf2004cd092c021695f3 (diff)
downloadicestorm-c9c181fef21740b45653e23a4989d22530b543f3.tar.gz
icestorm-c9c181fef21740b45653e23a4989d22530b543f3.tar.bz2
icestorm-c9c181fef21740b45653e23a4989d22530b543f3.zip
icebox: Put .hlc converters under ISC license
Diffstat (limited to 'icebox/tc_rxlat_netnames.py')
-rw-r--r--icebox/tc_rxlat_netnames.py71
1 files changed, 71 insertions, 0 deletions
diff --git a/icebox/tc_rxlat_netnames.py b/icebox/tc_rxlat_netnames.py
new file mode 100644
index 0000000..e8717ed
--- /dev/null
+++ b/icebox/tc_rxlat_netnames.py
@@ -0,0 +1,71 @@
+# Test case for `icebox_hlc2asc': Does net name translation work correctly?
+# Copyright (C) 2017 Roland Lutz
+#
+# 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.
+
+import sys
+import icebox
+from icebox_asc2hlc import translate_netname
+from icebox_hlc2asc import untranslate_netname
+
+def test_netname_translation(ic):
+ sys.stderr.write("testing backward 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
+
+ netname = translate_netname(group[0][0], group[0][1],
+ ic.max_x - 1, ic.max_y - 1, group[0][2])
+ if netname in netnames:
+ failed = True
+ print("duplicate netname: %s" % netname)
+ netnames.add(netname)
+
+ for x, y, net in group:
+ s = untranslate_netname(x, y, ic.max_x - 1, ic.max_y - 1, netname)
+ if s != net:
+ failed = True
+ print("%-20s %s -> %s" % ("%d %d %s" % (x, y, net), netname, 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()