diff --git a/ivtest/ivltests/sv_type_identifier_type_lookup.v b/ivtest/ivltests/sv_type_identifier_type_lookup.v new file mode 100644 index 000000000..d938a8b37 --- /dev/null +++ b/ivtest/ivltests/sv_type_identifier_type_lookup.v @@ -0,0 +1,111 @@ +// Check that visible type identifiers can be used as declaration types. + +package p; + typedef logic [3:0] PT; +endpackage + +package q; + typedef logic [12:0] I; +endpackage + +typedef logic [7:0] T; +typedef logic [6:0] L; +typedef logic [8:0] I; + +module test; + + import p::*; + + localparam integer outer_type_width = $bits(L); + typedef logic [10:0] L; + localparam integer local_type_width = $bits(L); + + localparam integer outer_import_width = $bits(I); + import q::I; + localparam integer imported_type_width = $bits(I); + + reg failed; + T value; + T [1:0] packed_value; + PT imported_value; + PT [1:0] imported_packed_value; + + function T inc(input T arg); + inc = arg + 8'd1; + endfunction + + initial begin + p::PT scoped_value; + p::PT [1:0] scoped_packed_value; + + failed = 1'b0; + + if (outer_type_width != 7) begin + $display("FAILED(%0d). Outer typedef width mismatch", `__LINE__); + failed = 1'b1; + end + + if (local_type_width != 11) begin + $display("FAILED(%0d). Local typedef width mismatch", `__LINE__); + failed = 1'b1; + end + + if (outer_import_width != 9) begin + $display("FAILED(%0d). Outer typedef before import width mismatch", + `__LINE__); + failed = 1'b1; + end + + if (imported_type_width != 13) begin + $display("FAILED(%0d). Imported typedef width mismatch", `__LINE__); + failed = 1'b1; + end + + value = 8'h12; + packed_value = 16'h3456; + imported_value = 4'h5; + imported_packed_value = 8'h3c; + scoped_value = 4'ha; + scoped_packed_value = 8'hbc; + + if ($bits(value) != 8 || value !== 8'h12) begin + $display("FAILED(%0d). Typedef declaration mismatch", `__LINE__); + failed = 1'b1; + end + + if ($bits(packed_value) != 16 || packed_value !== 16'h3456) begin + $display("FAILED(%0d). Typedef packed declaration mismatch", `__LINE__); + failed = 1'b1; + end + + if ($bits(imported_value) != 4 || imported_value !== 4'h5) begin + $display("FAILED(%0d). Imported typedef declaration mismatch", `__LINE__); + failed = 1'b1; + end + + if ($bits(imported_packed_value) != 8 || imported_packed_value !== 8'h3c) begin + $display("FAILED(%0d). Imported typedef packed declaration mismatch", `__LINE__); + failed = 1'b1; + end + + if ($bits(scoped_value) != 4 || scoped_value !== 4'ha) begin + $display("FAILED(%0d). Package-scoped typedef declaration mismatch", `__LINE__); + failed = 1'b1; + end + + if ($bits(scoped_packed_value) != 8 || scoped_packed_value !== 8'hbc) begin + $display("FAILED(%0d). Package-scoped typedef packed declaration mismatch", `__LINE__); + failed = 1'b1; + end + + if (inc(value) !== 8'h13) begin + $display("FAILED(%0d). Typedef function type mismatch", `__LINE__); + failed = 1'b1; + end + + if (!failed) begin + $display("PASSED"); + end + end + +endmodule diff --git a/ivtest/regress-vvp.list b/ivtest/regress-vvp.list index 03bf20426..0cf50ff83 100644 --- a/ivtest/regress-vvp.list +++ b/ivtest/regress-vvp.list @@ -560,6 +560,7 @@ sv_type_identifier_task_function_argument_name vvp_tests/sv_type_identifier_task sv_type_identifier_task_name vvp_tests/sv_type_identifier_task_name.json sv_type_identifier_type_dimension_param vvp_tests/sv_type_identifier_type_dimension_param.json sv_type_identifier_type_dimension_sysfunc vvp_tests/sv_type_identifier_type_dimension_sysfunc.json +sv_type_identifier_type_lookup vvp_tests/sv_type_identifier_type_lookup.json sv_type_identifier_type_param_hier_fail vvp_tests/sv_type_identifier_type_param_hier_fail.json sv_type_identifier_typed_expression vvp_tests/sv_type_identifier_typed_expression.json sv_type_identifier_typed_expression_fail vvp_tests/sv_type_identifier_typed_expression_fail.json diff --git a/ivtest/vvp_tests/sv_type_identifier_type_lookup.json b/ivtest/vvp_tests/sv_type_identifier_type_lookup.json new file mode 100644 index 000000000..dcfa9af22 --- /dev/null +++ b/ivtest/vvp_tests/sv_type_identifier_type_lookup.json @@ -0,0 +1,5 @@ +{ + "type" : "normal", + "source" : "sv_type_identifier_type_lookup.v", + "iverilog-args" : [ "-g2005-sv" ] +}