Updated nexus DSP rules, added more tests for registers that include control signals

Signed-off-by: Maciej Kurc <mkurc@antmicro.com>
diff --git a/dsp-ff-plugin/nexus-dsp_rules.txt b/dsp-ff-plugin/nexus-dsp_rules.txt
index 9093182..0ed8947 100644
--- a/dsp-ff-plugin/nexus-dsp_rules.txt
+++ b/dsp-ff-plugin/nexus-dsp_rules.txt
@@ -7,7 +7,7 @@
 # SPDX-License-Identifier:ISC
 
 dsp MULT9X9 MULT18X18 MULT18X36 MULT36X36
-  port A
+  port A SIGNEDA
     clk CLK 0
     rst RSTA 0
     ena CEA 1
@@ -15,7 +15,7 @@
     set REGINPUTA=REGISTER
     map GSR=GSR
   endport
-  port B
+  port B SIGNEDB
     clk CLK 0
     rst RSTB 0
     ena CEB 1
@@ -34,7 +34,7 @@
 enddsp
 
 dsp MULTPREADD9X9 MULTPREADD18X18 MULTADDSUB18X18 MULTADDSUB36X36
-  port A
+  port A SIGNEDA
     clk CLK 0
     rst RSTA 0
     ena CEA 1
@@ -42,7 +42,7 @@
     set REGINPUTA=REGISTER
     map GSR=GSR
   endport
-  port B
+  port B SIGNEDB
     clk CLK 0
     rst RSTB 0
     ena CEB 1
@@ -50,7 +50,7 @@
     set REGINPUTB=REGISTER
     map GSR=GSR
   endport
-  port C
+  port C SIGNEDC
     clk CLK 0
     rst RSTC 0
     ena CEC 1
@@ -69,7 +69,7 @@
 enddsp
 
 dsp MULTADDSUB9X9WIDE
-  port A0
+  port A0 SIGNED
     clk CLK 0
     rst RSTA0A1 0
     ena CEA0A1 1
@@ -77,7 +77,7 @@
     set REGINPUTAB0=REGISTER
     map GSR=GSR
   endport
-  port A1
+  port A1 SIGNED
     clk CLK 0
     rst RSTA0A1 0
     ena CEA0A1 1
@@ -85,7 +85,7 @@
     set REGINPUTAB1=REGISTER
     map GSR=GSR
   endport
-  port A2
+  port A2 SIGNED
     clk CLK 0
     rst RSTA2A3 0
     ena CEA2A3 1
@@ -93,7 +93,7 @@
     set REGINPUTAB2=REGISTER
     map GSR=GSR
   endport
-  port A3
+  port A3 SIGNED
     clk CLK 0
     rst RSTA2A3 0
     ena CEA2A3 1
@@ -101,7 +101,7 @@
     set REGINPUTAB3=REGISTER
     map GSR=GSR
   endport
-  port B0
+  port B0 SIGNED
     clk CLK 0
     rst RSTB0B1 0
     ena CEB0B1 1
@@ -109,7 +109,7 @@
     set REGINPUTAB0=REGISTER
     map GSR=GSR
   endport
-  port B1
+  port B1 SIGNED
     clk CLK 0
     rst RSTB0B1 0
     ena CEB0B1 1
@@ -117,7 +117,7 @@
     set REGINPUTAB1=REGISTER
     map GSR=GSR
   endport
-  port B2
+  port B2 SIGNED
     clk CLK 0
     rst RSTB2B3 0
     ena CEB2B3 1
@@ -125,7 +125,7 @@
     set REGINPUTAB2=REGISTER
     map GSR=GSR
   endport
-  port B3
+  port B3 SIGNED
     clk CLK 0
     rst RSTB2B3 0
     ena CEB2B3 1
@@ -133,7 +133,7 @@
     set REGINPUTAB3=REGISTER
     map GSR=GSR
   endport
-  port C
+  port C SIGNED
     clk CLK 0
     rst RSTC 0
     ena CEC 1
diff --git a/dsp-ff-plugin/tests/nexus_conn_conflict/nexus_conn_conflict.tcl b/dsp-ff-plugin/tests/nexus_conn_conflict/nexus_conn_conflict.tcl
index c4cee75..87486f9 100644
--- a/dsp-ff-plugin/tests/nexus_conn_conflict/nexus_conn_conflict.tcl
+++ b/dsp-ff-plugin/tests/nexus_conn_conflict/nexus_conn_conflict.tcl
@@ -46,3 +46,13 @@
 stat
 select -assert-count 1 t:MULT9X9
 select -assert-count 18 t:FD1P3IX
+
+set TOP "conflict_dsp_port"
+design -load read
+hierarchy -top ${TOP}
+synth_nexus -flatten
+techmap -map +/nexus/cells_sim.v t:VLO t:VHI %u ;# Unmap VHI and VLO
+debug dsp_ff -rules ../../nexus-dsp_rules.txt
+stat
+select -assert-count 1 t:MULT9X9
+select -assert-count 9 t:FD1P3IX
diff --git a/dsp-ff-plugin/tests/nexus_conn_conflict/nexus_conn_conflict.v b/dsp-ff-plugin/tests/nexus_conn_conflict/nexus_conn_conflict.v
index 2224690..35856d9 100644
--- a/dsp-ff-plugin/tests/nexus_conn_conflict/nexus_conn_conflict.v
+++ b/dsp-ff-plugin/tests/nexus_conn_conflict/nexus_conn_conflict.v
@@ -125,4 +125,27 @@
 
 endmodule
 
+module conflict_dsp_port (
+    input  wire        CLK_A,
+    input  wire [ 8:0] A,
+    input  wire        SA,
+    input  wire [ 8:0] B,
+    output wire [17:0] Z
+);
 
+    reg [8:0] ra;
+    always @(posedge CLK_A)
+        ra <= A;
+
+    MULT9X9 # (
+        .REGINPUTA("BYPASS"),
+        .REGINPUTB("BYPASS"),
+        .REGOUTPUT("BYPASS")
+    ) mult (
+        .A       (ra),
+        .SIGNEDA (SA),
+        .B       (B),
+        .Z       (Z)
+    );
+
+endmodule
diff --git a/dsp-ff-plugin/tests/nexus_mult/nexus_mult.tcl b/dsp-ff-plugin/tests/nexus_mult/nexus_mult.tcl
index d82ffa8..1eef04a 100644
--- a/dsp-ff-plugin/tests/nexus_mult/nexus_mult.tcl
+++ b/dsp-ff-plugin/tests/nexus_mult/nexus_mult.tcl
@@ -41,3 +41,18 @@
 select -assert-count 1 t:MULT9X9
 select -assert-count 0 t:FD1P3IX
 
+# The test cannot be run because the equivalence check fails at some internal
+# wires of the DSP simulation model which ends up dangling. So that's not a
+# real issue but makes the test fail.
+
+#set TOP "mult_ctrl"
+#design -load read
+#hierarchy -top ${TOP}
+#synth_nexus -flatten
+#techmap -map +/nexus/cells_sim.v t:VLO t:VHI %u ;# Unmap VHI and VLO
+#equiv_opt -assert -async2sync -map +/nexus/cells_sim.v debug dsp_ff -rules ../../nexus-dsp_rules.txt
+#design -load postopt
+#yosys cd ${TOP}
+#stat
+#select -assert-count 1 t:MULT9X9
+#select -assert-count 0 t:FD1P3IX
diff --git a/dsp-ff-plugin/tests/nexus_mult/nexus_mult.v b/dsp-ff-plugin/tests/nexus_mult/nexus_mult.v
index 1ca806d..9836f7f 100644
--- a/dsp-ff-plugin/tests/nexus_mult/nexus_mult.v
+++ b/dsp-ff-plugin/tests/nexus_mult/nexus_mult.v
@@ -82,3 +82,33 @@
     );
 
 endmodule
+
+module mult_ctrl (
+    input  wire        CLK,
+    input  wire [ 8:0] A,
+    input  wire        SA,
+    input  wire [ 8:0] B,
+    output wire [17:0] Z
+);
+
+    reg [8:0] ra;
+    reg       rsa;
+
+    always @(posedge CLK) begin
+        ra  <= A;
+        rsa <= SA;
+    end
+
+    MULT9X9 # (
+        .REGINPUTA("BYPASS"),
+        .REGINPUTB("BYPASS"),
+        .REGOUTPUT("BYPASS")
+    ) mult (
+        .A          (ra),
+        .SIGNEDA    (rsa),
+        .B          (B),
+        .Z          (Z)
+    );
+
+endmodule
+