fuzzers: Add IDDR/ODDR fuzzer

Signed-off-by: David Shah <davey1576@gmail.com>
diff --git a/fuzzers/061-basic_ddr/fuzzer.py b/fuzzers/061-basic_ddr/fuzzer.py
index c987bd0..fd5d0f8 100644
--- a/fuzzers/061-basic_ddr/fuzzer.py
+++ b/fuzzers/061-basic_ddr/fuzzer.py
@@ -82,18 +82,22 @@
     pytrellis.load_database("../../database")
 
     def per_job(job):
-        def get_substs(mode="IREG_OREG", program=[]):
-            if mode == "NONE":
-                comment = "//"
-                program = ""
+        def get_substs(ddrtype="", ddren="OFF", gsr="ENABLED", lsrimux="0", clkimux="CLK", lsromux="0", clkomux="CLK", lsrmux="LSR"):
+            if ddren == "ON":
+                ddr = "{}:#ON ".format(ddrtype)
             else:
-                comment = ""
-                program = "program " + "\n\t\t\t".join(['"' + _ + ' "' for _ in program])
+                ddr = ""
+            if clkimux == "INV":
+                clkimux = "CLK:::CLK=#INV"
+            if clkomux == "INV":
+                clkomux = "CLK:::CLK=#INV"
+            if lsrmux == "INV":
+                lsrmux = "LSR:::LSR=#INV"
             if side in ("T, B"):
                 s = "S"
             else:
                 s = ""
-            return dict(loc=loc, mode=mode, program=program, comment=comment, s=s)
+            return dict(loc=loc, ddr=ddr, gsr=gsr, lsrimux=lsrimux, clkimux=clkimux, lsromux=lsromux, clkomux=clkomux, lsrmux=lsrmux, s=s)
 
         cfg = job["cfg"]
         loc = job["site"]
@@ -103,13 +107,23 @@
         cfg.setup()
         empty_bitfile = cfg.build_design(cfg.ncl, {})
         cfg.ncl = "iologic.ncl"
-        modes = ["NONE", "IREG_OREG", "IDDRX1_ODDRX1"]
-        if side in ("L", "R"):
-            modes += ["IDDRXN", "ODDRXN", "MIDDRX_MODDRX"]
-        tie_program = ["LSRIMUX:0", "LSROMUX:0"]
-        nonrouting.fuzz_enum_setting(cfg, "IOLOGIC{}.MODE".format(iol), modes,
-                                     lambda x: get_substs(mode=x, program=["MODE:" + x] + tie_program), empty_bitfile, False)
 
+        nonrouting.fuzz_enum_setting(cfg, "IOLOGIC{}.IDDRX1".format(iol), ["OFF", "ON"],
+                                     lambda x: get_substs(ddrtype="IDDRX1", ddren=x), empty_bitfile, False)
+        nonrouting.fuzz_enum_setting(cfg, "IOLOGIC{}.ODDRX1".format(iol), ["OFF", "ON"],
+                                     lambda x: get_substs(ddrtype="ODDRX1", ddren=x), empty_bitfile, False)
+        nonrouting.fuzz_enum_setting(cfg, "IOLOGIC{}.GSR".format(iol), ["ENABLED", "DISABLED"],
+                                     lambda x: get_substs(gsr=x), empty_bitfile, False)
+        nonrouting.fuzz_enum_setting(cfg, "IOLOGIC{}.LSRIMUX".format(iol), ["LSRMUX", "0"],
+                                     lambda x: get_substs(lsrimux=x), empty_bitfile, False)
+        nonrouting.fuzz_enum_setting(cfg, "IOLOGIC{}.LSROMUX".format(iol), ["LSRMUX", "0"],
+                                     lambda x: get_substs(lsromux=x), empty_bitfile, False)
+        nonrouting.fuzz_enum_setting(cfg, "IOLOGIC{}.CLKIMUX".format(iol), ["CLK", "INV"],
+                                     lambda x: get_substs(clkimux=x), empty_bitfile, False)
+        nonrouting.fuzz_enum_setting(cfg, "IOLOGIC{}.CLKOMUX".format(iol), ["CLK", "INV"],
+                                     lambda x: get_substs(clkomux=x), empty_bitfile, False)
+        nonrouting.fuzz_enum_setting(cfg, "IOLOGIC{}.LSRMUX".format(iol), ["LSR", "INV"],
+                                     lambda x: get_substs(lsrmux=x), empty_bitfile, False)
     fuzzloops.parallel_foreach(jobs, per_job)
 
 
diff --git a/fuzzers/061-basic_ddr/iologic.ncl b/fuzzers/061-basic_ddr/iologic.ncl
index 582283c..7842c11 100644
--- a/fuzzers/061-basic_ddr/iologic.ncl
+++ b/fuzzers/061-basic_ddr/iologic.ncl
@@ -9,13 +9,20 @@
       performance "8";
    }
 
-   ${comment} comp Q_MGIOL
-   ${comment} {
-   ${comment}   logical
-   ${comment}   {
-   ${comment}      cellmodel-name ${s}IOLOGIC;
-   ${comment}      ${program};
-   ${comment}   }
-   ${comment}   site ${loc};
-   ${comment} }
+    comp Q_MGIOL
+    {
+      logical
+      {
+         cellmodel-name ${s}IOLOGIC;
+         program "GSR:${gsr} "
+                 "MODE:IDDRX1_ODDRX1 "
+                 "CLKIMUX:${clkimux} "
+                 "LSRIMUX:${lsrimux} "
+                 "CLKOMUX:${clkomux} "
+                 "LSROMUX:${lsromux} "
+                 "LSRMUX:${lsrmux} "
+                 "${ddr}";
+      }
+      site ${loc};
+    }
 }