From 3e72713971639328f94d033b66d4e7b3c541fb69 Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Wed, 27 Dec 2023 08:57:20 -0800 Subject: [PATCH] Support multi-dimensional packed vectors as class properties Currently multi-dimensional packed vector class properties will cause an assert and only single dimensional or scalar vectors will pass. But just as for regular vectors there is nothing special about class property multi-dimensional vectors as they will be represented in vector form in vvp. Removing the asserts allows multi-dimensional packed vectors to be used for class properties. Indexed access to these properties is not supported yet; that requires follow-up work to elaborate packed property selects and to support partial stores to vector class properties. Signed-off-by: Lars-Peter Clausen --- tgt-vvp/draw_class.c | 9 ++------- tgt-vvp/stmt_assign.c | 6 +----- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/tgt-vvp/draw_class.c b/tgt-vvp/draw_class.c index afbc26d5c..69431d7b6 100644 --- a/tgt-vvp/draw_class.c +++ b/tgt-vvp/draw_class.c @@ -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 * 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); unsigned packed_dimensions = ivl_type_packed_dimensions(ptype); - assert(packed_dimensions < 2); const char*signed_flag = ivl_type_signed(ptype)? "s" : ""; 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); } 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, - ivl_type_packed_msb(ptype,0)+1); + ivl_type_packed_width(ptype)); } } diff --git a/tgt-vvp/stmt_assign.c b/tgt-vvp/stmt_assign.c index ac0a92dd3..d8c2aefec 100644 --- a/tgt-vvp/stmt_assign.c +++ b/tgt-vvp/stmt_assign.c @@ -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 * 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 || 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) { fprintf(vvp_out, " %%prop/v %d;\n", prop_idx); }