Add regression test for enum compatibility across module boundaries
Check that the compatibility of signals of enum data type across module boundaries. If the enum data type is declared at a higher level scope or imported from a package the signals are compatible between different module instances. If the enum data type is declared within the module itself though the signals are not compatible. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
This commit is contained in:
parent
fabff5ef5f
commit
83da384df3
|
|
@ -0,0 +1,25 @@
|
|||
// Check that enum types declared in a higher level scope are compatible between
|
||||
// different instances of a module.
|
||||
|
||||
typedef enum integer {
|
||||
A
|
||||
} T;
|
||||
|
||||
module M;
|
||||
T e;
|
||||
endmodule
|
||||
|
||||
module test;
|
||||
M m1();
|
||||
M m2();
|
||||
|
||||
initial begin
|
||||
m1.e = A;
|
||||
m2.e = m1.e;
|
||||
if (m2.e === A) begin
|
||||
$display("PASSED");
|
||||
end else begin
|
||||
$display("FAILED");
|
||||
end
|
||||
end
|
||||
endmodule
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
// Check that enum types explicitly imported from a package are compatible
|
||||
// between different instances of a module.
|
||||
|
||||
package P;
|
||||
typedef enum integer {
|
||||
A
|
||||
} T;
|
||||
endpackage
|
||||
|
||||
module M;
|
||||
import P::T;
|
||||
T e;
|
||||
endmodule
|
||||
|
||||
module test;
|
||||
import P::A;
|
||||
|
||||
M m1();
|
||||
M m2();
|
||||
|
||||
initial begin
|
||||
m1.e = A;
|
||||
m2.e = m1.e;
|
||||
if (m2.e === A) begin
|
||||
$display("PASSED");
|
||||
end else begin
|
||||
$display("FAILED");
|
||||
end
|
||||
end
|
||||
endmodule
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
// Check that enum types implicitly imported from a package are compatible
|
||||
// between different instances of a module.
|
||||
|
||||
package P;
|
||||
typedef enum integer {
|
||||
A
|
||||
} T;
|
||||
endpackage
|
||||
|
||||
module M;
|
||||
import P::*;
|
||||
T e;
|
||||
endmodule
|
||||
|
||||
module test;
|
||||
import P::*;
|
||||
|
||||
M m1();
|
||||
M m2();
|
||||
|
||||
initial begin
|
||||
m1.e = A;
|
||||
m2.e = m1.e;
|
||||
if (m2.e === A) begin
|
||||
$display("PASSED");
|
||||
end else begin
|
||||
$display("FAILED");
|
||||
end
|
||||
end
|
||||
endmodule
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
// Check that enums declared within a module are not compatible between
|
||||
// different instances of a module
|
||||
|
||||
module M;
|
||||
|
||||
enum integer {
|
||||
A
|
||||
} e;
|
||||
|
||||
endmodule
|
||||
|
||||
module test;
|
||||
M m1();
|
||||
M m2();
|
||||
|
||||
initial begin
|
||||
// These are different types and not compatible
|
||||
m1.e = m2.e;
|
||||
$display("FAILED");
|
||||
end
|
||||
endmodule
|
||||
|
|
@ -232,6 +232,10 @@ disable_fork_cmd normal,-g2009 ivltests
|
|||
display_bug normal,-g2009 ivltests gold=display_bug.gold
|
||||
edge normal,-g2009 ivltests
|
||||
enum_base_range normal,-g2005-sv ivltests
|
||||
enum_compatibility1 normal,-g2005-sv ivltests
|
||||
enum_compatibility2 normal,-g2005-sv ivltests
|
||||
enum_compatibility3 normal,-g2005-sv ivltests
|
||||
enum_compatibility_fail CE,-g2005-sv ivltests
|
||||
enum_elem_ranges normal,-g2005-sv ivltests
|
||||
enum_dims_invalid CE,-g2005-sv ivltests
|
||||
enum_in_struct normal,-g2005-sv ivltests
|
||||
|
|
|
|||
Loading…
Reference in New Issue