Merge 6a9bd84ce1 into c7530dbcc1
This commit is contained in:
commit
4bfdf301cf
|
|
@ -0,0 +1,40 @@
|
||||||
|
// Check that multi-dimensional packed vector class properties are supported.
|
||||||
|
|
||||||
|
module test;
|
||||||
|
|
||||||
|
bit failed = 1'b0;
|
||||||
|
|
||||||
|
`define check(val, exp) do begin \
|
||||||
|
if (val !== exp) begin \
|
||||||
|
$display("FAILED(%0d). '%s' expected %0h, got %0h", `__LINE__, \
|
||||||
|
`"val`", exp, val); \
|
||||||
|
failed = 1'b1; \
|
||||||
|
end \
|
||||||
|
end while (0)
|
||||||
|
|
||||||
|
class C;
|
||||||
|
logic [1:0][3:0] x;
|
||||||
|
bit [0:1][0:3] y;
|
||||||
|
endclass
|
||||||
|
|
||||||
|
C c;
|
||||||
|
|
||||||
|
initial begin
|
||||||
|
c = new;
|
||||||
|
|
||||||
|
c.x = 8'h5a;
|
||||||
|
c.y = 8'hc3;
|
||||||
|
`check(c.x, 8'h5a);
|
||||||
|
`check(c.y, 8'hc3);
|
||||||
|
|
||||||
|
c.x += 8'h01;
|
||||||
|
c.y ^= 8'hff;
|
||||||
|
`check(c.x, 8'h5b);
|
||||||
|
`check(c.y, 8'h3c);
|
||||||
|
|
||||||
|
if (!failed) begin
|
||||||
|
$display("PASSED");
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
endmodule
|
||||||
|
|
@ -264,6 +264,7 @@ sv_chained_constructor5 vvp_tests/sv_chained_constructor5.json
|
||||||
sv_class_prop_assign_op1 vvp_tests/sv_class_prop_assign_op1.json
|
sv_class_prop_assign_op1 vvp_tests/sv_class_prop_assign_op1.json
|
||||||
sv_class_prop_assign_op2 vvp_tests/sv_class_prop_assign_op2.json
|
sv_class_prop_assign_op2 vvp_tests/sv_class_prop_assign_op2.json
|
||||||
sv_class_prop_logic vvp_tests/sv_class_prop_logic.json
|
sv_class_prop_logic vvp_tests/sv_class_prop_logic.json
|
||||||
|
sv_class_prop_packed_dims vvp_tests/sv_class_prop_packed_dims.json
|
||||||
sv_class_prop_nest_darray1 vvp_tests/sv_class_prop_nest_darray1.json
|
sv_class_prop_nest_darray1 vvp_tests/sv_class_prop_nest_darray1.json
|
||||||
sv_class_prop_nest_obj1 vvp_tests/sv_class_prop_nest_obj1.json
|
sv_class_prop_nest_obj1 vvp_tests/sv_class_prop_nest_obj1.json
|
||||||
sv_class_prop_nest_real1 vvp_tests/sv_class_prop_nest_real1.json
|
sv_class_prop_nest_real1 vvp_tests/sv_class_prop_nest_real1.json
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"type" : "normal",
|
||||||
|
"source" : "sv_class_prop_packed_dims.v",
|
||||||
|
"iverilog-args" : [ "-g2005-sv" ],
|
||||||
|
"vlog95" : {
|
||||||
|
"__comment" : "Classes are not supported",
|
||||||
|
"type" : "CE"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2012 Stephen Williams (steve@icarus.com)
|
* Copyright (c) 2012-2026 Stephen Williams (steve@icarus.com)
|
||||||
*
|
*
|
||||||
* This source code is free software; you can redistribute it
|
* This source code is free software; you can redistribute it
|
||||||
* and/or modify it in source code form under the terms of the GNU
|
* and/or modify it in source code form under the terms of the GNU
|
||||||
|
|
@ -28,7 +28,6 @@ static void show_prop_type_vector(ivl_type_t ptype)
|
||||||
{
|
{
|
||||||
ivl_variable_type_t data_type = ivl_type_base(ptype);
|
ivl_variable_type_t data_type = ivl_type_base(ptype);
|
||||||
unsigned packed_dimensions = ivl_type_packed_dimensions(ptype);
|
unsigned packed_dimensions = ivl_type_packed_dimensions(ptype);
|
||||||
assert(packed_dimensions < 2);
|
|
||||||
|
|
||||||
const char*signed_flag = ivl_type_signed(ptype)? "s" : "";
|
const char*signed_flag = ivl_type_signed(ptype)? "s" : "";
|
||||||
char code = data_type==IVL_VT_BOOL? 'b' : 'L';
|
char code = data_type==IVL_VT_BOOL? 'b' : 'L';
|
||||||
|
|
@ -37,12 +36,8 @@ static void show_prop_type_vector(ivl_type_t ptype)
|
||||||
fprintf(vvp_out, "\"%s%c1\"", signed_flag, code);
|
fprintf(vvp_out, "\"%s%c1\"", signed_flag, code);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
assert(packed_dimensions == 1);
|
|
||||||
assert(ivl_type_packed_lsb(ptype,0) == 0);
|
|
||||||
assert(ivl_type_packed_msb(ptype,0) >= 0);
|
|
||||||
|
|
||||||
fprintf(vvp_out, "\"%s%c%d\"", signed_flag, code,
|
fprintf(vvp_out, "\"%s%c%d\"", signed_flag, code,
|
||||||
ivl_type_packed_msb(ptype,0)+1);
|
ivl_type_packed_width(ptype));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011-2025 Stephen Williams (steve@icarus.com)
|
* Copyright (c) 2011-2026 Stephen Williams (steve@icarus.com)
|
||||||
*
|
*
|
||||||
* This source code is free software; you can redistribute it
|
* This source code is free software; you can redistribute it
|
||||||
* and/or modify it in source code form under the terms of the GNU
|
* and/or modify it in source code form under the terms of the GNU
|
||||||
|
|
@ -1319,10 +1319,6 @@ static int show_stmt_assign_sig_cobject(ivl_statement_t net)
|
||||||
|
|
||||||
if (ivl_type_base(prop_type) == IVL_VT_BOOL ||
|
if (ivl_type_base(prop_type) == IVL_VT_BOOL ||
|
||||||
ivl_type_base(prop_type) == IVL_VT_LOGIC) {
|
ivl_type_base(prop_type) == IVL_VT_LOGIC) {
|
||||||
assert(ivl_type_packed_dimensions(prop_type) == 0 ||
|
|
||||||
(ivl_type_packed_dimensions(prop_type) == 1 &&
|
|
||||||
ivl_type_packed_msb(prop_type,0) >= ivl_type_packed_lsb(prop_type, 0)));
|
|
||||||
|
|
||||||
if (ivl_stmt_opcode(net) != 0) {
|
if (ivl_stmt_opcode(net) != 0) {
|
||||||
fprintf(vvp_out, " %%prop/v %d;\n", prop_idx);
|
fprintf(vvp_out, " %%prop/v %d;\n", prop_idx);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue