fuzzers: Add DCU routing fuzzer
Signed-off-by: David Shah <davey1576@gmail.com>
diff --git a/fuzzers/110-dcu_routing/dcuroute.ncl b/fuzzers/110-dcu_routing/dcuroute.ncl
new file mode 100644
index 0000000..1825919
--- /dev/null
+++ b/fuzzers/110-dcu_routing/dcuroute.ncl
@@ -0,0 +1,30 @@
+::FROM-WRITER;
+design top
+{
+ device
+ {
+ architecture sa5p00g;
+ device LFE5UM5G-45F;
+ package CABGA381;
+ performance "8";
+ }
+
+ comp DCU
+ {
+ logical {
+ cellmodel-name DCU;
+ program "MODE:DCUA ";
+ }
+ site DCU0;
+ }
+
+ signal q_c
+ {
+ signal-pins
+ // drivers
+ (DCU, CH0_FF_RX_D_0),
+ // loads
+ (DCU, CH0_FF_TX_D_0);
+ ${route}
+ }
+}
diff --git a/fuzzers/110-dcu_routing/fuzzer.py b/fuzzers/110-dcu_routing/fuzzer.py
new file mode 100644
index 0000000..290a7c9
--- /dev/null
+++ b/fuzzers/110-dcu_routing/fuzzer.py
@@ -0,0 +1,32 @@
+from fuzzconfig import FuzzConfig
+import interconnect
+import nets
+import pytrellis
+import re
+
+jobs = [
+ ((71, 42), FuzzConfig(job="DCUROUTE0", family="ECP5", device="LFE5UM5G-45F", ncl="dcuroute.ncl",
+ tiles=["MIB_R71C42:DCU0", "MIB_R71C43:DCU1", "MIB_R71C44:DCU2", "MIB_R71C45:DCU3",
+ "MIB_R71C46:DCU4", "MIB_R71C47:DCU5", "MIB_R71C48:DCU6", "MIB_R71C49:DCU7",
+ "MIB_R71C50:DCU8"]))
+
+]
+
+
+def main():
+ pytrellis.load_database("../../database")
+ for job in jobs:
+ loc, cfg = job
+ cfg.setup()
+
+ def nn_filter(net, netnames):
+ return "DCU" in net or "PCS" in net
+
+ interconnect.fuzz_interconnect(config=cfg, location=loc,
+ netname_predicate=nn_filter,
+ netname_filter_union=False,
+ func_cib=True)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/util/common/nets.py b/util/common/nets.py
index 401959d..a0213a8 100644
--- a/util/common/nets.py
+++ b/util/common/nets.py
@@ -23,6 +23,10 @@
# SED clock output
sed_clk_re = re.compile(r'R\d+C\d+_J?SEDCLKOUT')
+# SERDES reference clocks
+pcs_clk_re = re.compile(r'R\d+C\d+_J?PCS[AB][TR]XCLK\d')
+
+
# DDRDEL delay signals
ddr_delay_re = re.compile(r'R\d+C\d+_[UL][LR]DDRDEL')
@@ -61,6 +65,7 @@
dcc_clki_re.match(wire) or
dcs_sig_re.match(wire) or
dcs_clk_re.match(wire) or
+ pcs_clk_re.match(wire) or
center_clk_re.match(wire))