Add regression tests for type parameters
Check that all sorts of variations of type parameters are supported. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
This commit is contained in:
parent
5ef847ea87
commit
aec1ee5a42
|
|
@ -0,0 +1,25 @@
|
|||
// Check that basic type parameter syntax is supported
|
||||
|
||||
bit failed = 1'b0;
|
||||
|
||||
`define check(expr, val) \
|
||||
if (expr != val) begin \
|
||||
$display("failed: %s, expected %0d, got %0d", `"expr`", val, expr); \
|
||||
failed = 1'b1; \
|
||||
end
|
||||
|
||||
module test #(
|
||||
parameter type T1 = integer
|
||||
);
|
||||
T1 x;
|
||||
|
||||
initial begin
|
||||
`check($bits(x), $bits(integer))
|
||||
`check($bits(T1), $bits(integer))
|
||||
|
||||
if (!failed) begin
|
||||
$display("PASSED");
|
||||
end
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
// Check that it is possible to declare multiple type parameters as a list with
|
||||
// a single type keyword.
|
||||
|
||||
bit failed = 1'b0;
|
||||
|
||||
`define check(expr, val) \
|
||||
if (expr != val) begin \
|
||||
$display("failed: %s, expected %0d, got %0d", `"expr`", val, expr); \
|
||||
failed = 1'b1; \
|
||||
end
|
||||
|
||||
module test #(
|
||||
parameter type T1 = integer, T2 = real
|
||||
);
|
||||
T1 x;
|
||||
T2 y = 1.23;
|
||||
|
||||
initial begin
|
||||
`check($bits(x), $bits(integer))
|
||||
`check($bits(T1), $bits(integer))
|
||||
`check(y, 1.23)
|
||||
|
||||
if (!failed) begin
|
||||
$display("PASSED");
|
||||
end
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
// Check that it is possible to declare type parameters when omitting the
|
||||
// parameter keyword.
|
||||
|
||||
bit failed = 1'b0;
|
||||
|
||||
`define check(expr, val) \
|
||||
if (expr != val) begin \
|
||||
$display("failed: %s, expected %0d, got %0d", `"expr`", val, expr); \
|
||||
failed = 1'b1; \
|
||||
end
|
||||
|
||||
module test #(
|
||||
type T1 = integer
|
||||
);
|
||||
T1 x;
|
||||
|
||||
initial begin
|
||||
`check($bits(x), $bits(integer))
|
||||
`check($bits(T1), $bits(integer))
|
||||
|
||||
if (!failed) begin
|
||||
$display("PASSED");
|
||||
end
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
// Check that it is possible to reference other parameters in the default value
|
||||
// of a type parameter.
|
||||
|
||||
bit failed = 1'b0;
|
||||
|
||||
`define check(expr, val) \
|
||||
if (expr != val) begin \
|
||||
$display("failed: %s, expected %0d, got %0d", `"expr`", val, expr); \
|
||||
failed = 1'b1; \
|
||||
end
|
||||
|
||||
module test #(
|
||||
parameter A = 10,
|
||||
parameter type T1 = logic [A-1:0]
|
||||
);
|
||||
T1 x;
|
||||
|
||||
initial begin
|
||||
`check($bits(x), A)
|
||||
`check($bits(T1), A)
|
||||
|
||||
if (!failed) begin
|
||||
$display("PASSED");
|
||||
end
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
// Check that it is possible to declare local type parameters.
|
||||
|
||||
bit failed = 1'b0;
|
||||
|
||||
`define check(expr, val) \
|
||||
if (expr != val) begin \
|
||||
$display("failed: %s, expected %0d, got %0d", `"expr`", val, expr); \
|
||||
failed = 1'b1; \
|
||||
end
|
||||
|
||||
module test;
|
||||
|
||||
parameter A = 10;
|
||||
localparam type T1 = logic [A-1:0];
|
||||
|
||||
T1 x;
|
||||
|
||||
initial begin
|
||||
`check($bits(x), A)
|
||||
`check($bits(T1), A)
|
||||
|
||||
if (!failed) begin
|
||||
$display("PASSED");
|
||||
end
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
|
@ -0,0 +1,91 @@
|
|||
// Check that various syntax variations for type parameters without a default
|
||||
// value are supported.
|
||||
|
||||
bit failed = 1'b0;
|
||||
|
||||
`define check(expr, val) \
|
||||
if (expr != val) begin \
|
||||
$display("failed: %s, expected %0d, got %0d", `"expr`", val, expr); \
|
||||
failed = 1'b1; \
|
||||
end
|
||||
|
||||
module M1 #(
|
||||
parameter type T1
|
||||
);
|
||||
T1 x;
|
||||
|
||||
initial begin
|
||||
`check($bits(x), $bits(integer))
|
||||
`check($bits(T1), $bits(integer))
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
||||
module M2 #(
|
||||
type T1
|
||||
);
|
||||
T1 x;
|
||||
|
||||
initial begin
|
||||
`check($bits(x), $bits(integer))
|
||||
`check($bits(T1), $bits(integer))
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
||||
module M3 #(
|
||||
parameter type T1, T2
|
||||
);
|
||||
T1 x;
|
||||
T2 y = 1.23;
|
||||
|
||||
initial begin
|
||||
`check($bits(x), $bits(integer))
|
||||
`check($bits(T1), $bits(integer))
|
||||
`check(y, 1.23)
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
||||
module M4 #(
|
||||
type T1, T2
|
||||
);
|
||||
T1 x;
|
||||
T2 y = 1.23;
|
||||
|
||||
initial begin
|
||||
`check($bits(x), $bits(integer))
|
||||
`check($bits(T1), $bits(integer))
|
||||
`check(y, 1.23)
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
||||
module test;
|
||||
|
||||
M1 #(
|
||||
.T1 (integer)
|
||||
) i_m1 ();
|
||||
|
||||
M2 #(
|
||||
.T1 (integer)
|
||||
) i_m2 ();
|
||||
|
||||
M3 #(
|
||||
.T1 (integer),
|
||||
.T2 (real)
|
||||
) i_m3();
|
||||
|
||||
M4 #(
|
||||
.T1 (integer),
|
||||
.T2 (real)
|
||||
) i_m4 ();
|
||||
|
||||
initial begin
|
||||
#1
|
||||
if (!failed) begin
|
||||
$display("PASSED");
|
||||
end
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
// Check that it is possible to overwrite type parameters and that the provided
|
||||
// type is evaluated in the scope instantiating the module.
|
||||
|
||||
bit failed = 1'b0;
|
||||
|
||||
`define check(expr, val) \
|
||||
if (expr != val) begin \
|
||||
$display("failed: %s, expected %0d, got %0d", `"expr`", val, expr); \
|
||||
failed = 1'b1; \
|
||||
end
|
||||
|
||||
module M #(
|
||||
parameter type T1 = integer,
|
||||
parameter WIDTH = 0
|
||||
);
|
||||
typedef logic [1:0] T2;
|
||||
localparam A = 2;
|
||||
T1 x;
|
||||
|
||||
initial begin
|
||||
`check($bits(x), WIDTH)
|
||||
`check($bits(T1), WIDTH)
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
||||
module test;
|
||||
localparam A = 4;
|
||||
typedef logic [A-1:0] T2;
|
||||
|
||||
M #(
|
||||
.WIDTH ($bits(integer))
|
||||
) i_m1 ();
|
||||
|
||||
M #(
|
||||
.T1 (logic [15:0]),
|
||||
.WIDTH (16)
|
||||
) i_m2 ();
|
||||
|
||||
// `A` must be evauluated in this context
|
||||
M #(
|
||||
.T1 (logic [A-1:0]),
|
||||
.WIDTH (4)
|
||||
) i_m3 ();
|
||||
|
||||
// `T2` must be evauluated in this context
|
||||
M #(
|
||||
.T1 (T2),
|
||||
.WIDTH (4)
|
||||
) i_m4 ();
|
||||
|
||||
initial begin
|
||||
#1
|
||||
if (!failed) begin
|
||||
$display("PASSED");
|
||||
end
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
// Check that overrideing a type parameter with an expression that is not a type
|
||||
// generates an error.
|
||||
|
||||
module M #(
|
||||
type T = int
|
||||
);
|
||||
|
||||
T x;
|
||||
|
||||
initial begin
|
||||
$display("FAILED");
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
||||
module test;
|
||||
|
||||
M #(
|
||||
.T(10)
|
||||
) m();
|
||||
|
||||
endmodule
|
||||
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
// Check that trying to override a type parameter using a defparam statement
|
||||
// generates an error.
|
||||
|
||||
module M #(
|
||||
type T = int
|
||||
);
|
||||
|
||||
T x;
|
||||
|
||||
initial begin
|
||||
$display("FAILED");
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
||||
module test;
|
||||
|
||||
M m();
|
||||
defparam m.T = real; // Error, this is illegal
|
||||
|
||||
endmodule
|
||||
|
|
@ -711,6 +711,15 @@ sv_timeunit_prec_fail2 CE,-g2009,-u,\
|
|||
./ivltests/sv_timeunit_prec_fail2a.v,\
|
||||
./ivltests/sv_timeunit_prec_fail2b.v,\
|
||||
./ivltests/sv_timeunit_prec_fail2c.v, ivltests gold=sv_timeunit_prec_fail2.gold
|
||||
sv_type_param1 normal,-g2005-sv ivltests
|
||||
sv_type_param2 normal,-g2005-sv ivltests
|
||||
sv_type_param3 normal,-g2005-sv ivltests
|
||||
sv_type_param4 normal,-g2005-sv ivltests
|
||||
sv_type_param5 normal,-g2005-sv ivltests
|
||||
sv_type_param6 normal,-g2005-sv ivltests
|
||||
sv_type_param7 normal,-g2005-sv ivltests
|
||||
sv_type_param_fail1 CE,-g2005-sv ivltests
|
||||
sv_type_param_fail2 CE,-g2005-sv ivltests
|
||||
sv_typedef_array_base1 normal,-g2009 ivltests
|
||||
sv_typedef_array_base2 normal,-g2009 ivltests
|
||||
sv_typedef_array_base3 normal,-g2009 ivltests
|
||||
|
|
|
|||
Loading…
Reference in New Issue