Add a test for interfaces on modules loaded on-demand

This commit is contained in:
Rupert Swarbrick 2021-07-14 17:27:13 +01:00 committed by Zachary Snow
parent 7d50b83322
commit 1aab608cff
5 changed files with 48 additions and 2 deletions

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,5 @@
// This is used by the load_and_derive test.
module ondemand (iface intf);
assign intf.y = ~intf.x;
endmodule

View File

@ -1,6 +1,6 @@
#/bin/bash -e
./runone.sh svinterface1
./runone.sh svinterface_at_top
./run_simple.sh load_and_derive

View File

@ -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"