Add byte typespec handling
Signed-off-by: Rafal Kapuscik <rkapuscik@antmicro.com>
diff --git a/systemverilog-plugin/UhdmAst.cc b/systemverilog-plugin/UhdmAst.cc
index ae9ab9c..70dea66 100644
--- a/systemverilog-plugin/UhdmAst.cc
+++ b/systemverilog-plugin/UhdmAst.cc
@@ -1717,6 +1717,18 @@
shared.report.mark_handled(typespec_h);
break;
}
+ case vpiByteTypespec: {
+ current_node->is_signed = true;
+ packed_ranges.push_back(make_range(7, 0));
+ shared.report.mark_handled(typespec_h);
+ break;
+ }
+ case vpiShortIntTypespec: {
+ current_node->is_signed = true;
+ packed_ranges.push_back(make_range(15, 0));
+ shared.report.mark_handled(typespec_h);
+ break;
+ }
case vpiIntTypespec:
case vpiIntegerTypespec: {
current_node->is_signed = true;
@@ -3393,6 +3405,13 @@
std::vector<AST::AstNode *> unpacked_ranges; // comes after wire name
current_node = make_ast_node(AST::AST_WIRE);
packed_ranges.push_back(make_range(16, 0));
+
+void UhdmAst::process_byte_typespec()
+{
+ std::vector<AST::AstNode *> packed_ranges; // comes before wire name
+ std::vector<AST::AstNode *> unpacked_ranges; // comes after wire name
+ current_node = make_ast_node(AST::AST_WIRE);
+ packed_ranges.push_back(make_range(7, 0));
add_multirange_wire(current_node, packed_ranges, unpacked_ranges);
current_node->is_signed = true;
}
@@ -3669,6 +3688,11 @@
shared.report.mark_handled(typespec_h);
break;
}
+ case vpiByteTypespec: {
+ packed_ranges.push_back(make_range(7, 0));
+ shared.report.mark_handled(typespec_h);
+ break;
+ }
case vpiEnumTypespec:
case vpiRealTypespec:
case vpiStringTypespec: {
@@ -3695,6 +3719,7 @@
});
break;
}
+ case vpiPackedArrayTypespec:
case vpiArrayTypespec: {
shared.report.mark_handled(typespec_h);
visit_one_to_one({vpiElemTypespec}, typespec_h, [&](AST::AstNode *node) {
@@ -4049,6 +4074,9 @@
case vpiBitTypespec:
process_bit_typespec();
break;
+ case vpiByteTypespec:
+ process_byte_typespec();
+ break;
case vpiStringVar:
process_string_var();
break;
diff --git a/systemverilog-plugin/UhdmAst.h b/systemverilog-plugin/UhdmAst.h
index 2add851..0314369 100644
--- a/systemverilog-plugin/UhdmAst.h
+++ b/systemverilog-plugin/UhdmAst.h
@@ -133,6 +133,7 @@
void process_string_typespec();
void process_repeat();
void process_byte_var();
+ void process_byte_typespec();
void process_long_int_var();
void process_immediate_cover();
void process_immediate_assume();