Added cast to type support (#4284)

This commit is contained in:
rherveille 2024-09-29 23:03:01 +02:00 committed by GitHub
parent 8e1e2b9a39
commit ce7db661a8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 573 additions and 2 deletions

View File

@ -478,6 +478,10 @@ void AstNode::dumpVlog(FILE *f, std::string indent) const
fprintf(f, ";\n");
break;
case AST_WIRETYPE:
fprintf(f, "%s", id2vl(str).c_str());
break;
case AST_MEMORY:
fprintf(f, "%s" "memory", indent.c_str());
if (is_signed)
@ -694,7 +698,17 @@ void AstNode::dumpVlog(FILE *f, std::string indent) const
break;
case AST_CAST_SIZE:
children[0]->dumpVlog(f, "");
switch (children[0]->type)
{
case AST_WIRE:
if (children[0]->children.size() > 0)
children[0]->children[0]->dumpVlog(f, "");
else
fprintf(f, "%d'", children[0]->range_left - children[0]->range_right + 1);
break;
default:
children[0]->dumpVlog(f, "");
}
fprintf(f, "'(");
children[1]->dumpVlog(f, "");
fprintf(f, ")");

View File

@ -1500,11 +1500,69 @@ bool AstNode::simplify(bool const_fold, int stage, int width_hint, bool sign_hin
}
break;
case AST_CAST_SIZE: {
int width = 1;
AstNode *node;
AstNode *child = children[0];
if (child->type == AST_WIRE) {
if (child->children.size() == 0) {
// Base type (e.g., int)
width = child->range_left - child->range_right +1;
node = mkconst_int(width, child->is_signed);
} else {
// User defined type
log_assert(child->children[0]->type == AST_WIRETYPE);
const std::string &type_name = child->children[0]->str;
if (!current_scope.count(type_name))
input_error("Unknown identifier `%s' used as type name\n", type_name.c_str());
AstNode *resolved_type_node = current_scope.at(type_name);
if (resolved_type_node->type != AST_TYPEDEF)
input_error("`%s' does not name a type\n", type_name.c_str());
log_assert(resolved_type_node->children.size() == 1);
AstNode *template_node = resolved_type_node->children[0];
// Ensure typedef itself is fully simplified
while (template_node->simplify(const_fold, stage, width_hint, sign_hint)) {};
switch (template_node->type)
{
case AST_WIRE: {
if (template_node->children.size() > 0 && template_node->children[0]->type == AST_RANGE)
width = range_width(this, template_node->children[0]);
child->delete_children();
node = mkconst_int(width, true);
break;
}
case AST_STRUCT:
case AST_UNION: {
child->delete_children();
width = size_packed_struct(template_node, 0);
node = mkconst_int(width, false);
break;
}
default:
log_error("Don't know how to translate static cast of type %s\n", type2str(template_node->type).c_str());
}
}
delete child;
children.erase(children.begin());
children.insert(children.begin(), node);
}
detect_width_simple = true;
children_are_self_determined = true;
break;
}
case AST_TO_BITS:
case AST_TO_SIGNED:
case AST_TO_UNSIGNED:
case AST_SELFSZ:
case AST_CAST_SIZE:
case AST_CONCAT:
case AST_REPLICATE:
case AST_REDUCE_AND:

View File

@ -3506,6 +3506,12 @@ basic_expr:
$$ = new AstNode(AST_CAST_SIZE, $1, $4);
SET_AST_NODE_LOC($$, @1, @4);
} |
typedef_base_type OP_CAST '(' expr ')' {
if (!sv_mode)
frontend_verilog_yyerror("Static cast is only supported in SystemVerilog mode.");
$$ = new AstNode(AST_CAST_SIZE, $1, $4);
SET_AST_NODE_LOC($$, @1, @4);
} |
'(' expr '=' expr ')' {
ensureAsgnExprAllowed();
AstNode *node = new AstNode(AST_ASSIGN_EQ, $2, $4);

View File

@ -15,6 +15,18 @@ module top;
logic signed [1:0] L2sb10 = 2;
logic signed [1:0] L2sb11 = 3;
typedef logic u1bit_t;
typedef logic signed s1bit_t;
typedef logic [1:0] u2bit_t;
typedef logic signed [1:0] s2bit_t;
typedef logic [2:0] u3bit_t;
typedef struct packed {
u1bit_t sign;
u3bit_t msbs;
byte lsbs;
} s12bit_packed_struct_t;
logic y = 1;
always @* begin
@ -32,6 +44,19 @@ module top;
assert (1'(L2sb10) == 1'b0);
assert (1'(L2sb11) == 1'b1);
assert (u1bit_t'(L1b0 ) == 1'b0);
assert (u1bit_t'(L1b1 ) == 1'b1);
assert (s1bit_t'(L1sb0 ) == 1'b0);
assert (s1bit_t'(L1sb1 ) == 1'b1);
assert (u1bit_t'(L2b00 ) == 1'b0);
assert (u1bit_t'(L2b01 ) == 1'b1);
assert (u1bit_t'(L2b10 ) == 1'b0);
assert (u1bit_t'(L2b11 ) == 1'b1);
assert (s1bit_t'(L2sb00) == 1'b0);
assert (s1bit_t'(L2sb01) == 1'b1);
assert (s1bit_t'(L2sb10) == 1'b0);
assert (s1bit_t'(L2sb11) == 1'b1);
assert (2'(L1b0 ) == 2'b00);
assert (2'(L1b1 ) == 2'b01);
assert (2'(L1sb0 ) == 2'b00);
@ -45,6 +70,19 @@ module top;
assert (2'(L2sb10) == 2'b10);
assert (2'(L2sb11) == 2'b11);
assert (u2bit_t'(L1b0 ) == 2'b00);
assert (u2bit_t'(L1b1 ) == 2'b01);
assert (s2bit_t'(L1sb0 ) == 2'b00);
assert (s2bit_t'(L1sb1 ) == 2'b11);
assert (u2bit_t'(L2b00 ) == 2'b00);
assert (u2bit_t'(L2b01 ) == 2'b01);
assert (u2bit_t'(L2b10 ) == 2'b10);
assert (u2bit_t'(L2b11 ) == 2'b11);
assert (s2bit_t'(L2sb00) == 2'b00);
assert (s2bit_t'(L2sb01) == 2'b01);
assert (s2bit_t'(L2sb10) == 2'b10);
assert (s2bit_t'(L2sb11) == 2'b11);
assert (3'(L1b0 ) == 3'b000);
assert (3'(L1b1 ) == 3'b001);
assert (3'(L1sb0 ) == 3'b000);
@ -58,6 +96,19 @@ module top;
assert (3'(L2sb10) == 3'b110);
assert (3'(L2sb11) == 3'b111);
assert (u3bit_t'(L1b0 ) == 3'b000);
assert (u3bit_t'(L1b1 ) == 3'b001);
assert (u3bit_t'(L1sb0 ) == 3'b000);
assert (u3bit_t'(L1sb1 ) == 3'b111);
assert (u3bit_t'(L2b00 ) == 3'b000);
assert (u3bit_t'(L2b01 ) == 3'b001);
assert (u3bit_t'(L2b10 ) == 3'b010);
assert (u3bit_t'(L2b11 ) == 3'b011);
assert (u3bit_t'(L2sb00) == 3'b000);
assert (u3bit_t'(L2sb01) == 3'b001);
assert (u3bit_t'(L2sb10) == 3'b110);
assert (u3bit_t'(L2sb11) == 3'b111);
assert (3'(L1b0 | '1) == 3'b111);
assert (3'(L1b1 | '1) == 3'b111);
assert (3'(L1sb0 | '1) == 3'b111);
@ -71,6 +122,58 @@ module top;
assert (3'(L2sb10 | '1) == 3'b111);
assert (3'(L2sb11 | '1) == 3'b111);
assert (u3bit_t'(L1b0 | '1) == 3'b111);
assert (u3bit_t'(L1b1 | '1) == 3'b111);
assert (u3bit_t'(L1sb0 | '1) == 3'b111);
assert (u3bit_t'(L1sb1 | '1) == 3'b111);
assert (u3bit_t'(L2b00 | '1) == 3'b111);
assert (u3bit_t'(L2b01 | '1) == 3'b111);
assert (u3bit_t'(L2b10 | '1) == 3'b111);
assert (u3bit_t'(L2b11 | '1) == 3'b111);
assert (u3bit_t'(L2sb00 | '1) == 3'b111);
assert (u3bit_t'(L2sb01 | '1) == 3'b111);
assert (u3bit_t'(L2sb10 | '1) == 3'b111);
assert (u3bit_t'(L2sb11 | '1) == 3'b111);
assert (byte'(L1b0 | '1) == 8'hff);
assert (byte'(L1b1 | '1) == 8'hff);
assert (byte'(L1sb0 | '1) == 8'hff);
assert (byte'(L1sb1 | '1) == 8'hff);
assert (byte'(L2b00 | '1) == 8'hff);
assert (byte'(L2b01 | '1) == 8'hff);
assert (byte'(L2b10 | '1) == 8'hff);
assert (byte'(L2b11 | '1) == 8'hff);
assert (byte'(L2sb00 | '1) == 8'hff);
assert (byte'(L2sb01 | '1) == 8'hff);
assert (byte'(L2sb10 | '1) == 8'hff);
assert (byte'(L2sb11 | '1) == 8'hff);
assert (int'(L1b0 | '1) == 32'hffff_ffff);
assert (int'(L1b1 | '1) == 32'hffff_ffff);
assert (int'(L1sb0 | '1) == 32'hffff_ffff);
assert (int'(L1sb1 | '1) == 32'hffff_ffff);
assert (int'(L2b00 | '1) == 32'hffff_ffff);
assert (int'(L2b01 | '1) == 32'hffff_ffff);
assert (int'(L2b10 | '1) == 32'hffff_ffff);
assert (int'(L2b11 | '1) == 32'hffff_ffff);
assert (int'(L2sb00 | '1) == 32'hffff_ffff);
assert (int'(L2sb01 | '1) == 32'hffff_ffff);
assert (int'(L2sb10 | '1) == 32'hffff_ffff);
assert (int'(L2sb11 | '1) == 32'hffff_ffff);
assert (s12bit_packed_struct_t'(L1b0 | '1) == 12'hfff);
assert (s12bit_packed_struct_t'(L1b1 | '1) == 12'hfff);
assert (s12bit_packed_struct_t'(L1sb0 | '1) == 12'hfff);
assert (s12bit_packed_struct_t'(L1sb1 | '1) == 12'hfff);
assert (s12bit_packed_struct_t'(L2b00 | '1) == 12'hfff);
assert (s12bit_packed_struct_t'(L2b01 | '1) == 12'hfff);
assert (s12bit_packed_struct_t'(L2b10 | '1) == 12'hfff);
assert (s12bit_packed_struct_t'(L2b11 | '1) == 12'hfff);
assert (s12bit_packed_struct_t'(L2sb00 | '1) == 12'hfff);
assert (s12bit_packed_struct_t'(L2sb01 | '1) == 12'hfff);
assert (s12bit_packed_struct_t'(L2sb10 | '1) == 12'hfff);
assert (s12bit_packed_struct_t'(L2sb11 | '1) == 12'hfff);
assert (3'(L1b0 | '0) == 3'b000);
assert (3'(L1b1 | '0) == 3'b001);
assert (3'(L1sb0 | '0) == 3'b000);
@ -84,6 +187,58 @@ module top;
assert (3'(L2sb10 | '0) == 3'b010);
assert (3'(L2sb11 | '0) == 3'b011);
assert (u3bit_t'(L1b0 | '0) == 3'b000);
assert (u3bit_t'(L1b1 | '0) == 3'b001);
assert (u3bit_t'(L1sb0 | '0) == 3'b000);
assert (u3bit_t'(L1sb1 | '0) == 3'b001);
assert (u3bit_t'(L2b00 | '0) == 3'b000);
assert (u3bit_t'(L2b01 | '0) == 3'b001);
assert (u3bit_t'(L2b10 | '0) == 3'b010);
assert (u3bit_t'(L2b11 | '0) == 3'b011);
assert (u3bit_t'(L2sb00 | '0) == 3'b000);
assert (u3bit_t'(L2sb01 | '0) == 3'b001);
assert (u3bit_t'(L2sb10 | '0) == 3'b010);
assert (u3bit_t'(L2sb11 | '0) == 3'b011);
assert (byte'(L1b0 | '0) == 8'h00);
assert (byte'(L1b1 | '0) == 8'h01);
assert (byte'(L1sb0 | '0) == 8'h00);
assert (byte'(L1sb1 | '0) == 8'h01);
assert (byte'(L2b00 | '0) == 8'h00);
assert (byte'(L2b01 | '0) == 8'h01);
assert (byte'(L2b10 | '0) == 8'h02);
assert (byte'(L2b11 | '0) == 8'h03);
assert (byte'(L2sb00 | '0) == 8'h00);
assert (byte'(L2sb01 | '0) == 8'h01);
assert (byte'(L2sb10 | '0) == 8'h02);
assert (byte'(L2sb11 | '0) == 8'h03);
assert (int'(L1b0 | '0) == 32'h0000_0000);
assert (int'(L1b1 | '0) == 32'h0000_0001);
assert (int'(L1sb0 | '0) == 32'h0000_0000);
assert (int'(L1sb1 | '0) == 32'h0000_0001);
assert (int'(L2b00 | '0) == 32'h0000_0000);
assert (int'(L2b01 | '0) == 32'h0000_0001);
assert (int'(L2b10 | '0) == 32'h0000_0002);
assert (int'(L2b11 | '0) == 32'h0000_0003);
assert (int'(L2sb00 | '0) == 32'h0000_0000);
assert (int'(L2sb01 | '0) == 32'h0000_0001);
assert (int'(L2sb10 | '0) == 32'h0000_0002);
assert (int'(L2sb11 | '0) == 32'h0000_0003);
assert (s12bit_packed_struct_t'(L1b0 | '0) == 12'h000);
assert (s12bit_packed_struct_t'(L1b1 | '0) == 12'h001);
assert (s12bit_packed_struct_t'(L1sb0 | '0) == 12'h000);
assert (s12bit_packed_struct_t'(L1sb1 | '0) == 12'h001);
assert (s12bit_packed_struct_t'(L2b00 | '0) == 12'h000);
assert (s12bit_packed_struct_t'(L2b01 | '0) == 12'h001);
assert (s12bit_packed_struct_t'(L2b10 | '0) == 12'h002);
assert (s12bit_packed_struct_t'(L2b11 | '0) == 12'h003);
assert (s12bit_packed_struct_t'(L2sb00 | '0) == 12'h000);
assert (s12bit_packed_struct_t'(L2sb01 | '0) == 12'h001);
assert (s12bit_packed_struct_t'(L2sb10 | '0) == 12'h002);
assert (s12bit_packed_struct_t'(L2sb11 | '0) == 12'h003);
assert (3'(y ? L1b0 : '1) == 3'b000);
assert (3'(y ? L1b1 : '1) == 3'b001);
assert (3'(y ? L1sb0 : '1) == 3'b000);
@ -97,6 +252,58 @@ module top;
assert (3'(y ? L2sb10 : '1) == 3'b010);
assert (3'(y ? L2sb11 : '1) == 3'b011);
assert (u3bit_t'(y ? L1b0 : '1) == 3'b000);
assert (u3bit_t'(y ? L1b1 : '1) == 3'b001);
assert (u3bit_t'(y ? L1sb0 : '1) == 3'b000);
assert (u3bit_t'(y ? L1sb1 : '1) == 3'b001);
assert (u3bit_t'(y ? L2b00 : '1) == 3'b000);
assert (u3bit_t'(y ? L2b01 : '1) == 3'b001);
assert (u3bit_t'(y ? L2b10 : '1) == 3'b010);
assert (u3bit_t'(y ? L2b11 : '1) == 3'b011);
assert (u3bit_t'(y ? L2sb00 : '1) == 3'b000);
assert (u3bit_t'(y ? L2sb01 : '1) == 3'b001);
assert (u3bit_t'(y ? L2sb10 : '1) == 3'b010);
assert (u3bit_t'(y ? L2sb11 : '1) == 3'b011);
assert (byte'(y ? L1b0 : '1) == 8'h00);
assert (byte'(y ? L1b1 : '1) == 8'h01);
assert (byte'(y ? L1sb0 : '1) == 8'h00);
assert (byte'(y ? L1sb1 : '1) == 8'h01);
assert (byte'(y ? L2b00 : '1) == 8'h00);
assert (byte'(y ? L2b01 : '1) == 8'h01);
assert (byte'(y ? L2b10 : '1) == 8'h02);
assert (byte'(y ? L2b11 : '1) == 8'h03);
assert (byte'(y ? L2sb00 : '1) == 8'h00);
assert (byte'(y ? L2sb01 : '1) == 8'h01);
assert (byte'(y ? L2sb10 : '1) == 8'h02);
assert (byte'(y ? L2sb11 : '1) == 8'h03);
assert (int'(y ? L1b0 : '1) == 32'h0000_0000);
assert (int'(y ? L1b1 : '1) == 32'h0000_0001);
assert (int'(y ? L1sb0 : '1) == 32'h0000_0000);
assert (int'(y ? L1sb1 : '1) == 32'h0000_0001);
assert (int'(y ? L2b00 : '1) == 32'h0000_0000);
assert (int'(y ? L2b01 : '1) == 32'h0000_0001);
assert (int'(y ? L2b10 : '1) == 32'h0000_0002);
assert (int'(y ? L2b11 : '1) == 32'h0000_0003);
assert (int'(y ? L2sb00 : '1) == 32'h0000_0000);
assert (int'(y ? L2sb01 : '1) == 32'h0000_0001);
assert (int'(y ? L2sb10 : '1) == 32'h0000_0002);
assert (int'(y ? L2sb11 : '1) == 32'h0000_0003);
assert (s12bit_packed_struct_t'(y ? L1b0 : '1) == 12'h000);
assert (s12bit_packed_struct_t'(y ? L1b1 : '1) == 12'h001);
assert (s12bit_packed_struct_t'(y ? L1sb0 : '1) == 12'h000);
assert (s12bit_packed_struct_t'(y ? L1sb1 : '1) == 12'h001);
assert (s12bit_packed_struct_t'(y ? L2b00 : '1) == 12'h000);
assert (s12bit_packed_struct_t'(y ? L2b01 : '1) == 12'h001);
assert (s12bit_packed_struct_t'(y ? L2b10 : '1) == 12'h002);
assert (s12bit_packed_struct_t'(y ? L2b11 : '1) == 12'h003);
assert (s12bit_packed_struct_t'(y ? L2sb00 : '1) == 12'h000);
assert (s12bit_packed_struct_t'(y ? L2sb01 : '1) == 12'h001);
assert (s12bit_packed_struct_t'(y ? L2sb10 : '1) == 12'h002);
assert (s12bit_packed_struct_t'(y ? L2sb11 : '1) == 12'h003);
assert (3'(y ? L1b0 : '0) == 3'b000);
assert (3'(y ? L1b1 : '0) == 3'b001);
assert (3'(y ? L1sb0 : '0) == 3'b000);
@ -110,6 +317,58 @@ module top;
assert (3'(y ? L2sb10 : '0) == 3'b010);
assert (3'(y ? L2sb11 : '0) == 3'b011);
assert (u3bit_t'(y ? L1b0 : '0) == 3'b000);
assert (u3bit_t'(y ? L1b1 : '0) == 3'b001);
assert (u3bit_t'(y ? L1sb0 : '0) == 3'b000);
assert (u3bit_t'(y ? L1sb1 : '0) == 3'b001);
assert (u3bit_t'(y ? L2b00 : '0) == 3'b000);
assert (u3bit_t'(y ? L2b01 : '0) == 3'b001);
assert (u3bit_t'(y ? L2b10 : '0) == 3'b010);
assert (u3bit_t'(y ? L2b11 : '0) == 3'b011);
assert (u3bit_t'(y ? L2sb00 : '0) == 3'b000);
assert (u3bit_t'(y ? L2sb01 : '0) == 3'b001);
assert (u3bit_t'(y ? L2sb10 : '0) == 3'b010);
assert (u3bit_t'(y ? L2sb11 : '0) == 3'b011);
assert (byte'(y ? L1b0 : '0) == 8'h00);
assert (byte'(y ? L1b1 : '0) == 8'h01);
assert (byte'(y ? L1sb0 : '0) == 8'h00);
assert (byte'(y ? L1sb1 : '0) == 8'h01);
assert (byte'(y ? L2b00 : '0) == 8'h00);
assert (byte'(y ? L2b01 : '0) == 8'h01);
assert (byte'(y ? L2b10 : '0) == 8'h02);
assert (byte'(y ? L2b11 : '0) == 8'h03);
assert (byte'(y ? L2sb00 : '0) == 8'h00);
assert (byte'(y ? L2sb01 : '0) == 8'h01);
assert (byte'(y ? L2sb10 : '0) == 8'h02);
assert (byte'(y ? L2sb11 : '0) == 8'h03);
assert (int'(y ? L1b0 : '0) == 32'h0000_0000);
assert (int'(y ? L1b1 : '0) == 32'h0000_0001);
assert (int'(y ? L1sb0 : '0) == 32'h0000_0000);
assert (int'(y ? L1sb1 : '0) == 32'h0000_0001);
assert (int'(y ? L2b00 : '0) == 32'h0000_0000);
assert (int'(y ? L2b01 : '0) == 32'h0000_0001);
assert (int'(y ? L2b10 : '0) == 32'h0000_0002);
assert (int'(y ? L2b11 : '0) == 32'h0000_0003);
assert (int'(y ? L2sb00 : '0) == 32'h0000_0000);
assert (int'(y ? L2sb01 : '0) == 32'h0000_0001);
assert (int'(y ? L2sb10 : '0) == 32'h0000_0002);
assert (int'(y ? L2sb11 : '0) == 32'h0000_0003);
assert (s12bit_packed_struct_t'(y ? L1b0 : '0) == 12'h000);
assert (s12bit_packed_struct_t'(y ? L1b1 : '0) == 12'h001);
assert (s12bit_packed_struct_t'(y ? L1sb0 : '0) == 12'h000);
assert (s12bit_packed_struct_t'(y ? L1sb1 : '0) == 12'h001);
assert (s12bit_packed_struct_t'(y ? L2b00 : '0) == 12'h000);
assert (s12bit_packed_struct_t'(y ? L2b01 : '0) == 12'h001);
assert (s12bit_packed_struct_t'(y ? L2b10 : '0) == 12'h002);
assert (s12bit_packed_struct_t'(y ? L2b11 : '0) == 12'h003);
assert (s12bit_packed_struct_t'(y ? L2sb00 : '0) == 12'h000);
assert (s12bit_packed_struct_t'(y ? L2sb01 : '0) == 12'h001);
assert (s12bit_packed_struct_t'(y ? L2sb10 : '0) == 12'h002);
assert (s12bit_packed_struct_t'(y ? L2sb11 : '0) == 12'h003);
assert (3'(y ? L1b0 : 1'sb0) == 3'b000);
assert (3'(y ? L1b1 : 1'sb0) == 3'b001);
assert (3'(y ? L1sb0 : 1'sb0) == 3'b000);
@ -123,6 +382,123 @@ module top;
assert (3'(y ? L2sb10 : 1'sb0) == 3'b110);
assert (3'(y ? L2sb11 : 1'sb0) == 3'b111);
assert (u3bit_t'(y ? L1b0 : 1'sb0) == 3'b000);
assert (u3bit_t'(y ? L1b1 : 1'sb0) == 3'b001);
assert (u3bit_t'(y ? L1sb0 : 1'sb0) == 3'b000);
assert (u3bit_t'(y ? L1sb1 : 1'sb0) == 3'b111);
assert (u3bit_t'(y ? L2b00 : 1'sb0) == 3'b000);
assert (u3bit_t'(y ? L2b01 : 1'sb0) == 3'b001);
assert (u3bit_t'(y ? L2b10 : 1'sb0) == 3'b010);
assert (u3bit_t'(y ? L2b11 : 1'sb0) == 3'b011);
assert (u3bit_t'(y ? L2sb00 : 1'sb0) == 3'b000);
assert (u3bit_t'(y ? L2sb01 : 1'sb0) == 3'b001);
assert (u3bit_t'(y ? L2sb10 : 1'sb0) == 3'b110);
assert (u3bit_t'(y ? L2sb11 : 1'sb0) == 3'b111);
assert (byte'(y ? L1b0 : 1'sb0) == 8'h00);
assert (byte'(y ? L1b1 : 1'sb0) == 8'h01);
assert (byte'(y ? L1sb0 : 1'sb0) == 8'h00);
assert (byte'(y ? L1sb1 : 1'sb0) == 8'hff);
assert (byte'(y ? L2b00 : 1'sb0) == 8'h00);
assert (byte'(y ? L2b01 : 1'sb0) == 8'h01);
assert (byte'(y ? L2b10 : 1'sb0) == 8'h02);
assert (byte'(y ? L2b11 : 1'sb0) == 8'h03);
assert (byte'(y ? L2sb00 : 1'sb0) == 8'h00);
assert (byte'(y ? L2sb01 : 1'sb0) == 8'h01);
assert (byte'(y ? L2sb10 : 1'sb0) == 8'hfe);
assert (byte'(y ? L2sb11 : 1'sb0) == 8'hff);
assert (int'(y ? L1b0 : 1'sb0) == 32'h0000_0000);
assert (int'(y ? L1b1 : 1'sb0) == 32'h0000_0001);
assert (int'(y ? L1sb0 : 1'sb0) == 32'h0000_0000);
assert (int'(y ? L1sb1 : 1'sb0) == 32'hffff_ffff);
assert (int'(y ? L2b00 : 1'sb0) == 32'h0000_0000);
assert (int'(y ? L2b01 : 1'sb0) == 32'h0000_0001);
assert (int'(y ? L2b10 : 1'sb0) == 32'h0000_0002);
assert (int'(y ? L2b11 : 1'sb0) == 32'h0000_0003);
assert (int'(y ? L2sb00 : 1'sb0) == 32'h0000_0000);
assert (int'(y ? L2sb01 : 1'sb0) == 32'h0000_0001);
assert (int'(y ? L2sb10 : 1'sb0) == 32'hffff_fffe);
assert (int'(y ? L2sb11 : 1'sb0) == 32'hffff_ffff);
assert (s12bit_packed_struct_t'(y ? L1b0 : 1'sb0) == 12'h000);
assert (s12bit_packed_struct_t'(y ? L1b1 : 1'sb0) == 12'h001);
assert (s12bit_packed_struct_t'(y ? L1sb0 : 1'sb0) == 12'h000);
assert (s12bit_packed_struct_t'(y ? L1sb1 : 1'sb0) == 12'hfff);
assert (s12bit_packed_struct_t'(y ? L2b00 : 1'sb0) == 12'h000);
assert (s12bit_packed_struct_t'(y ? L2b01 : 1'sb0) == 12'h001);
assert (s12bit_packed_struct_t'(y ? L2b10 : 1'sb0) == 12'h002);
assert (s12bit_packed_struct_t'(y ? L2b11 : 1'sb0) == 12'h003);
assert (s12bit_packed_struct_t'(y ? L2sb00 : 1'sb0) == 12'h000);
assert (s12bit_packed_struct_t'(y ? L2sb01 : 1'sb0) == 12'h001);
assert (s12bit_packed_struct_t'(y ? L2sb10 : 1'sb0) == 12'hffe);
assert (s12bit_packed_struct_t'(y ? L2sb11 : 1'sb0) == 12'hfff);
assert (3'(y ? L1b0 : s1bit_t'(0)) == 3'b000);
assert (3'(y ? L1b1 : s1bit_t'(0)) == 3'b001);
assert (3'(y ? L1sb0 : s1bit_t'(0)) == 3'b000);
assert (3'(y ? L1sb1 : s1bit_t'(0)) == 3'b111);
assert (3'(y ? L2b00 : s1bit_t'(0)) == 3'b000);
assert (3'(y ? L2b01 : s1bit_t'(0)) == 3'b001);
assert (3'(y ? L2b10 : s1bit_t'(0)) == 3'b010);
assert (3'(y ? L2b11 : s1bit_t'(0)) == 3'b011);
assert (3'(y ? L2sb00 : s1bit_t'(0)) == 3'b000);
assert (3'(y ? L2sb01 : s1bit_t'(0)) == 3'b001);
assert (3'(y ? L2sb10 : s1bit_t'(0)) == 3'b110);
assert (3'(y ? L2sb11 : s1bit_t'(0)) == 3'b111);
assert (u3bit_t'(y ? L1b0 : s1bit_t'(0)) == 3'b000);
assert (u3bit_t'(y ? L1b1 : s1bit_t'(0)) == 3'b001);
assert (u3bit_t'(y ? L1sb0 : s1bit_t'(0)) == 3'b000);
assert (u3bit_t'(y ? L1sb1 : s1bit_t'(0)) == 3'b111);
assert (u3bit_t'(y ? L2b00 : s1bit_t'(0)) == 3'b000);
assert (u3bit_t'(y ? L2b01 : s1bit_t'(0)) == 3'b001);
assert (u3bit_t'(y ? L2b10 : s1bit_t'(0)) == 3'b010);
assert (u3bit_t'(y ? L2b11 : s1bit_t'(0)) == 3'b011);
assert (u3bit_t'(y ? L2sb00 : s1bit_t'(0)) == 3'b000);
assert (u3bit_t'(y ? L2sb01 : s1bit_t'(0)) == 3'b001);
assert (u3bit_t'(y ? L2sb10 : s1bit_t'(0)) == 3'b110);
assert (u3bit_t'(y ? L2sb11 : s1bit_t'(0)) == 3'b111);
assert (byte'(y ? L1b0 : s1bit_t'(0)) == 8'h00);
assert (byte'(y ? L1b1 : s1bit_t'(0)) == 8'h01);
assert (byte'(y ? L1sb0 : s1bit_t'(0)) == 8'h00);
assert (byte'(y ? L1sb1 : s1bit_t'(0)) == 8'hff);
assert (byte'(y ? L2b00 : s1bit_t'(0)) == 8'h00);
assert (byte'(y ? L2b01 : s1bit_t'(0)) == 8'h01);
assert (byte'(y ? L2b10 : s1bit_t'(0)) == 8'h02);
assert (byte'(y ? L2b11 : s1bit_t'(0)) == 8'h03);
assert (byte'(y ? L2sb00 : s1bit_t'(0)) == 8'h00);
assert (byte'(y ? L2sb01 : s1bit_t'(0)) == 8'h01);
assert (byte'(y ? L2sb10 : s1bit_t'(0)) == 8'hfe);
assert (byte'(y ? L2sb11 : s1bit_t'(0)) == 8'hff);
assert (int'(y ? L1b0 : s1bit_t'(0)) == 32'h0000_0000);
assert (int'(y ? L1b1 : s1bit_t'(0)) == 32'h0000_0001);
assert (int'(y ? L1sb0 : s1bit_t'(0)) == 32'h0000_0000);
assert (int'(y ? L1sb1 : s1bit_t'(0)) == 32'hffff_ffff);
assert (int'(y ? L2b00 : s1bit_t'(0)) == 32'h0000_0000);
assert (int'(y ? L2b01 : s1bit_t'(0)) == 32'h0000_0001);
assert (int'(y ? L2b10 : s1bit_t'(0)) == 32'h0000_0002);
assert (int'(y ? L2b11 : s1bit_t'(0)) == 32'h0000_0003);
assert (int'(y ? L2sb00 : s1bit_t'(0)) == 32'h0000_0000);
assert (int'(y ? L2sb01 : s1bit_t'(0)) == 32'h0000_0001);
assert (int'(y ? L2sb10 : s1bit_t'(0)) == 32'hffff_fffe);
assert (int'(y ? L2sb11 : s1bit_t'(0)) == 32'hffff_ffff);
assert (s12bit_packed_struct_t'(y ? L1b0 : s1bit_t'(0)) == 12'h000);
assert (s12bit_packed_struct_t'(y ? L1b1 : s1bit_t'(0)) == 12'h001);
assert (s12bit_packed_struct_t'(y ? L1sb0 : s1bit_t'(0)) == 12'h000);
assert (s12bit_packed_struct_t'(y ? L1sb1 : s1bit_t'(0)) == 12'hfff);
assert (s12bit_packed_struct_t'(y ? L2b00 : s1bit_t'(0)) == 12'h000);
assert (s12bit_packed_struct_t'(y ? L2b01 : s1bit_t'(0)) == 12'h001);
assert (s12bit_packed_struct_t'(y ? L2b10 : s1bit_t'(0)) == 12'h002);
assert (s12bit_packed_struct_t'(y ? L2b11 : s1bit_t'(0)) == 12'h003);
assert (s12bit_packed_struct_t'(y ? L2sb00 : s1bit_t'(0)) == 12'h000);
assert (s12bit_packed_struct_t'(y ? L2sb01 : s1bit_t'(0)) == 12'h001);
assert (s12bit_packed_struct_t'(y ? L2sb10 : s1bit_t'(0)) == 12'hffe);
assert (s12bit_packed_struct_t'(y ? L2sb11 : s1bit_t'(0)) == 12'hfff);
assert (3'(y ? L1b0 : 1'sb1) == 3'b000);
assert (3'(y ? L1b1 : 1'sb1) == 3'b001);
assert (3'(y ? L1sb0 : 1'sb1) == 3'b000);
@ -136,5 +512,122 @@ module top;
assert (3'(y ? L2sb10 : 1'sb1) == 3'b110);
assert (3'(y ? L2sb11 : 1'sb1) == 3'b111);
assert (u3bit_t'(y ? L1b0 : 1'sb1) == 3'b000);
assert (u3bit_t'(y ? L1b1 : 1'sb1) == 3'b001);
assert (u3bit_t'(y ? L1sb0 : 1'sb1) == 3'b000);
assert (u3bit_t'(y ? L1sb1 : 1'sb1) == 3'b111);
assert (u3bit_t'(y ? L2b00 : 1'sb1) == 3'b000);
assert (u3bit_t'(y ? L2b01 : 1'sb1) == 3'b001);
assert (u3bit_t'(y ? L2b10 : 1'sb1) == 3'b010);
assert (u3bit_t'(y ? L2b11 : 1'sb1) == 3'b011);
assert (u3bit_t'(y ? L2sb00 : 1'sb1) == 3'b000);
assert (u3bit_t'(y ? L2sb01 : 1'sb1) == 3'b001);
assert (u3bit_t'(y ? L2sb10 : 1'sb1) == 3'b110);
assert (u3bit_t'(y ? L2sb11 : 1'sb1) == 3'b111);
assert (byte'(y ? L1b0 : 1'sb1) == 8'h00);
assert (byte'(y ? L1b1 : 1'sb1) == 8'h01);
assert (byte'(y ? L1sb0 : 1'sb1) == 8'h00);
assert (byte'(y ? L1sb1 : 1'sb1) == 8'hff);
assert (byte'(y ? L2b00 : 1'sb1) == 8'h00);
assert (byte'(y ? L2b01 : 1'sb1) == 8'h01);
assert (byte'(y ? L2b10 : 1'sb1) == 8'h02);
assert (byte'(y ? L2b11 : 1'sb1) == 8'h03);
assert (byte'(y ? L2sb00 : 1'sb1) == 8'h00);
assert (byte'(y ? L2sb01 : 1'sb1) == 8'h01);
assert (byte'(y ? L2sb10 : 1'sb1) == 8'hfe);
assert (byte'(y ? L2sb11 : 1'sb1) == 8'hff);
assert (int'(y ? L1b0 : 1'sb1) == 32'h0000_0000);
assert (int'(y ? L1b1 : 1'sb1) == 32'h0000_0001);
assert (int'(y ? L1sb0 : 1'sb1) == 32'h0000_0000);
assert (int'(y ? L1sb1 : 1'sb1) == 32'hffff_ffff);
assert (int'(y ? L2b00 : 1'sb1) == 32'h0000_0000);
assert (int'(y ? L2b01 : 1'sb1) == 32'h0000_0001);
assert (int'(y ? L2b10 : 1'sb1) == 32'h0000_0002);
assert (int'(y ? L2b11 : 1'sb1) == 32'h0000_0003);
assert (int'(y ? L2sb00 : 1'sb1) == 32'h0000_0000);
assert (int'(y ? L2sb01 : 1'sb1) == 32'h0000_0001);
assert (int'(y ? L2sb10 : 1'sb1) == 32'hffff_fffe);
assert (int'(y ? L2sb11 : 1'sb1) == 32'hffff_ffff);
assert (s12bit_packed_struct_t'(y ? L1b0 : 1'sb1) == 12'h000);
assert (s12bit_packed_struct_t'(y ? L1b1 : 1'sb1) == 12'h001);
assert (s12bit_packed_struct_t'(y ? L1sb0 : 1'sb1) == 12'h000);
assert (s12bit_packed_struct_t'(y ? L1sb1 : 1'sb1) == 12'hfff);
assert (s12bit_packed_struct_t'(y ? L2b00 : 1'sb1) == 12'h000);
assert (s12bit_packed_struct_t'(y ? L2b01 : 1'sb1) == 12'h001);
assert (s12bit_packed_struct_t'(y ? L2b10 : 1'sb1) == 12'h002);
assert (s12bit_packed_struct_t'(y ? L2b11 : 1'sb1) == 12'h003);
assert (s12bit_packed_struct_t'(y ? L2sb00 : 1'sb1) == 12'h000);
assert (s12bit_packed_struct_t'(y ? L2sb01 : 1'sb1) == 12'h001);
assert (s12bit_packed_struct_t'(y ? L2sb10 : 1'sb1) == 12'hffe);
assert (s12bit_packed_struct_t'(y ? L2sb11 : 1'sb1) == 12'hfff);
assert (3'(y ? L1b0 : s1bit_t'(1)) == 3'b000);
assert (3'(y ? L1b1 : s1bit_t'(1)) == 3'b001);
assert (3'(y ? L1sb0 : s1bit_t'(1)) == 3'b000);
assert (3'(y ? L1sb1 : s1bit_t'(1)) == 3'b111);
assert (3'(y ? L2b00 : s1bit_t'(1)) == 3'b000);
assert (3'(y ? L2b01 : s1bit_t'(1)) == 3'b001);
assert (3'(y ? L2b10 : s1bit_t'(1)) == 3'b010);
assert (3'(y ? L2b11 : s1bit_t'(1)) == 3'b011);
assert (3'(y ? L2sb00 : s1bit_t'(1)) == 3'b000);
assert (3'(y ? L2sb01 : s1bit_t'(1)) == 3'b001);
assert (3'(y ? L2sb10 : s1bit_t'(1)) == 3'b110);
assert (3'(y ? L2sb11 : s1bit_t'(1)) == 3'b111);
assert (u3bit_t'(y ? L1b0 : s1bit_t'(1)) == 3'b000);
assert (u3bit_t'(y ? L1b1 : s1bit_t'(1)) == 3'b001);
assert (u3bit_t'(y ? L1sb0 : s1bit_t'(1)) == 3'b000);
assert (u3bit_t'(y ? L1sb1 : s1bit_t'(1)) == 3'b111);
assert (u3bit_t'(y ? L2b00 : s1bit_t'(1)) == 3'b000);
assert (u3bit_t'(y ? L2b01 : s1bit_t'(1)) == 3'b001);
assert (u3bit_t'(y ? L2b10 : s1bit_t'(1)) == 3'b010);
assert (u3bit_t'(y ? L2b11 : s1bit_t'(1)) == 3'b011);
assert (u3bit_t'(y ? L2sb00 : s1bit_t'(1)) == 3'b000);
assert (u3bit_t'(y ? L2sb01 : s1bit_t'(1)) == 3'b001);
assert (u3bit_t'(y ? L2sb10 : s1bit_t'(1)) == 3'b110);
assert (u3bit_t'(y ? L2sb11 : s1bit_t'(1)) == 3'b111);
assert (byte'(y ? L1b0 : s1bit_t'(1)) == 8'h00);
assert (byte'(y ? L1b1 : s1bit_t'(1)) == 8'h01);
assert (byte'(y ? L1sb0 : s1bit_t'(1)) == 8'h00);
assert (byte'(y ? L1sb1 : s1bit_t'(1)) == 8'hff);
assert (byte'(y ? L2b00 : s1bit_t'(1)) == 8'h00);
assert (byte'(y ? L2b01 : s1bit_t'(1)) == 8'h01);
assert (byte'(y ? L2b10 : s1bit_t'(1)) == 8'h02);
assert (byte'(y ? L2b11 : s1bit_t'(1)) == 8'h03);
assert (byte'(y ? L2sb00 : s1bit_t'(1)) == 8'h00);
assert (byte'(y ? L2sb01 : s1bit_t'(1)) == 8'h01);
assert (byte'(y ? L2sb10 : s1bit_t'(1)) == 8'hfe);
assert (byte'(y ? L2sb11 : s1bit_t'(1)) == 8'hff);
assert (int'(y ? L1b0 : s1bit_t'(1)) == 32'h0000_0000);
assert (int'(y ? L1b1 : s1bit_t'(1)) == 32'h0000_0001);
assert (int'(y ? L1sb0 : s1bit_t'(1)) == 32'h0000_0000);
assert (int'(y ? L1sb1 : s1bit_t'(1)) == 32'hffff_ffff);
assert (int'(y ? L2b00 : s1bit_t'(1)) == 32'h0000_0000);
assert (int'(y ? L2b01 : s1bit_t'(1)) == 32'h0000_0001);
assert (int'(y ? L2b10 : s1bit_t'(1)) == 32'h0000_0002);
assert (int'(y ? L2b11 : s1bit_t'(1)) == 32'h0000_0003);
assert (int'(y ? L2sb00 : s1bit_t'(1)) == 32'h0000_0000);
assert (int'(y ? L2sb01 : s1bit_t'(1)) == 32'h0000_0001);
assert (int'(y ? L2sb10 : s1bit_t'(1)) == 32'hffff_fffe);
assert (int'(y ? L2sb11 : s1bit_t'(1)) == 32'hffff_ffff);
assert (s12bit_packed_struct_t'(y ? L1b0 : s1bit_t'(1)) == 12'h000);
assert (s12bit_packed_struct_t'(y ? L1b1 : s1bit_t'(1)) == 12'h001);
assert (s12bit_packed_struct_t'(y ? L1sb0 : s1bit_t'(1)) == 12'h000);
assert (s12bit_packed_struct_t'(y ? L1sb1 : s1bit_t'(1)) == 12'hfff);
assert (s12bit_packed_struct_t'(y ? L2b00 : s1bit_t'(1)) == 12'h000);
assert (s12bit_packed_struct_t'(y ? L2b01 : s1bit_t'(1)) == 12'h001);
assert (s12bit_packed_struct_t'(y ? L2b10 : s1bit_t'(1)) == 12'h002);
assert (s12bit_packed_struct_t'(y ? L2b11 : s1bit_t'(1)) == 12'h003);
assert (s12bit_packed_struct_t'(y ? L2sb00 : s1bit_t'(1)) == 12'h000);
assert (s12bit_packed_struct_t'(y ? L2sb01 : s1bit_t'(1)) == 12'h001);
assert (s12bit_packed_struct_t'(y ? L2sb10 : s1bit_t'(1)) == 12'hffe);
assert (s12bit_packed_struct_t'(y ? L2sb11 : s1bit_t'(1)) == 12'hfff);
end
endmodule