Merge pull request #67 from EnJens/bootaddr-meta-fuzz

fuzzers: Add meta fuzzer to add BOOTADDR config word
diff --git a/fuzzers/ECP5/144-bootaddr/fuzzer.py b/fuzzers/ECP5/144-bootaddr/fuzzer.py
new file mode 100644
index 0000000..c42eb7d
--- /dev/null
+++ b/fuzzers/ECP5/144-bootaddr/fuzzer.py
@@ -0,0 +1,45 @@
+import pytrellis
+
+# BOOTADDR is bit 23..16 of the address for the next image to boot
+# when PROGRAMN is asserted.
+# This Config word is as far as I can tell never generated by
+# Diamond itself, but instead by the Deployment tool
+# For this reason, I have manually "fuzzed" the info for it.
+# The name is arbitrarily chosen.
+
+
+def main():
+    pytrellis.load_database("../../../database")
+
+    config = [
+        (46, 1, 0),
+        (48, 1, 0),
+        (50, 1, 0),
+        (54, 1, 0),
+        (56, 1, 0),
+        (58, 1, 0),
+        (60, 1, 0),
+        (62, 1, 0),
+    ]
+
+    tile = pytrellis.get_tile_bitdata(
+        pytrellis.TileLocator("ECP5", "LFE5U-25F", "EFB1_PICB1"))
+    wsb = pytrellis.WordSettingBits()
+    wsb.name = "BOOTADDR"
+
+    for bframe, bbit, inv in config:
+        bg = pytrellis.BitGroup()
+        cb = pytrellis.ConfigBit()
+        cb.frame = bframe
+        cb.bit = bbit
+        cb.inv = inv
+        bg.bits.add(cb)
+        wsb.bits.append(bg)
+        wsb.defval.append(False)
+
+    tile.add_setting_word(wsb)
+    tile.save()
+
+
+if __name__ == "__main__":
+    main()