Merge pull request #319 from antmicro/function-ranges
Fix logic var ranges access
diff --git a/systemverilog-plugin/UhdmAst.cc b/systemverilog-plugin/UhdmAst.cc
index be3d3c0..978fde5 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;
@@ -3398,7 +3410,17 @@
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(16, 0));
+ packed_ranges.push_back(make_range(15, 0));
+ add_multirange_wire(current_node, packed_ranges, unpacked_ranges);
+ current_node->is_signed = true;
+}
+
+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;
}
@@ -3408,7 +3430,7 @@
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(64, 0));
+ packed_ranges.push_back(make_range(63, 0));
add_multirange_wire(current_node, packed_ranges, unpacked_ranges);
current_node->is_signed = false;
}
@@ -3675,6 +3697,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: {
@@ -3701,6 +3728,7 @@
});
break;
}
+ case vpiPackedArrayTypespec:
case vpiArrayTypespec: {
shared.report.mark_handled(typespec_h);
visit_one_to_one({vpiElemTypespec}, typespec_h, [&](AST::AstNode *node) {
@@ -4055,6 +4083,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();