Add a test for interfaces on modules loaded on-demand
authorRupert Swarbrick <rswarbrick@gmail.com>
Wed, 14 Jul 2021 16:27:13 +0000 (17:27 +0100)
committerZachary Snow <zachary.j.snow@gmail.com>
Thu, 15 Jul 2021 02:54:50 +0000 (22:54 -0400)
tests/svinterfaces/load_and_derive.sv [new file with mode: 0644]
tests/svinterfaces/load_and_derive.ys [new file with mode: 0644]
tests/svinterfaces/ondemand.sv [new file with mode: 0644]
tests/svinterfaces/run-test.sh
tests/svinterfaces/run_simple.sh [new file with mode: 0755]

diff --git a/tests/svinterfaces/load_and_derive.sv b/tests/svinterfaces/load_and_derive.sv
new file mode 100644 (file)
index 0000000..0de0de3
--- /dev/null
@@ -0,0 +1,20 @@
+// This test checks that we correctly elaborate interfaces in modules, even if they are loaded on
+// demand. The "ondemand" module is defined in ondemand.sv in this directory and will be read as
+// part of the hierarchy pass.
+
+interface iface;
+  logic [7:0] x;
+  logic [7:0] y;
+endinterface
+
+module dut (input logic [7:0] x, output logic [7:0] y);
+  iface intf();
+  assign intf.x = x;
+  assign y = intf.y;
+
+  ondemand u(.intf);
+endmodule
+
+module ref (input logic [7:0] x, output logic [7:0] y);
+  assign y = ~x;
+endmodule
diff --git a/tests/svinterfaces/load_and_derive.ys b/tests/svinterfaces/load_and_derive.ys
new file mode 100644 (file)
index 0000000..067235e
--- /dev/null
@@ -0,0 +1,6 @@
+read_verilog -sv load_and_derive.sv
+hierarchy -libdir . -check
+flatten
+equiv_make ref dut equiv
+equiv_simple
+equiv_status -assert
diff --git a/tests/svinterfaces/ondemand.sv b/tests/svinterfaces/ondemand.sv
new file mode 100644 (file)
index 0000000..70d6048
--- /dev/null
@@ -0,0 +1,5 @@
+// This is used by the load_and_derive test.
+
+module ondemand (iface intf);
+  assign intf.y = ~intf.x;
+endmodule
index 86567d1c1aa9f68207581037361e8208de1b18de..9ef53926c3c4b8ddeccbd48c57ab391e9c1949e5 100755 (executable)
@@ -1,6 +1,6 @@
 #/bin/bash -e
 
-
-
 ./runone.sh  svinterface1
 ./runone.sh  svinterface_at_top
+
+./run_simple.sh load_and_derive
diff --git a/tests/svinterfaces/run_simple.sh b/tests/svinterfaces/run_simple.sh
new file mode 100755 (executable)
index 0000000..bce9944
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+# Run a simple test with a .ys file
+
+if [ $# != 1 ]; then
+    echo >&2 "Expected 1 argument"
+    exit 1
+fi
+
+echo -n "Test: $1 ->"
+../../yosys $1.ys >$1.log_stdout 2>$1.log_stderr || {
+    echo "ERROR!"
+    exit 1
+}
+echo "ok"