vhdlpp: Basic support for unbounded array types.
Once a signal/variable of unbounded array type becomes limited in its size, it is emitted as a packed array. Therefore currently it works only for bit/logic/reg/wire types.
This commit is contained in:
parent
9031f392ba
commit
c92dea77fc
|
|
@ -684,8 +684,8 @@ composite_type_definition
|
|||
|
||||
/* unbounded_array_definition IEEE 1076-2008 P5.3.2.1 */
|
||||
| K_array '(' index_subtype_definition_list ')' K_of subtype_indication
|
||||
{ sorrymsg(@1, "unbounded_array_definition not supported.\n");
|
||||
std::list<prange_t*> r;
|
||||
{ std::list<prange_t*> r;
|
||||
r.push_back(new prange_t(NULL, NULL, true)); // NULL boundaries indicate unbounded array type
|
||||
VTypeArray*tmp = new VTypeArray($6, &r);
|
||||
$$ = tmp;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -82,6 +82,12 @@ static const VType* calculate_subtype_array(const YYLTYPE&loc, const char*base_n
|
|||
|
||||
assert(array_left==0 || array_right!=0);
|
||||
|
||||
// unfold typedef, if it is the case
|
||||
const VTypeDef*type_def = dynamic_cast<const VTypeDef*> (base_type);
|
||||
if (type_def) {
|
||||
base_type = type_def->peek_definition();
|
||||
}
|
||||
|
||||
const VTypeArray*base_array = dynamic_cast<const VTypeArray*> (base_type);
|
||||
if (base_array) {
|
||||
assert(array_left && array_right);
|
||||
|
|
|
|||
|
|
@ -88,16 +88,14 @@ int VTypeArray::emit_def(ostream&out) const
|
|||
while (! dims.empty()) {
|
||||
cur = dims.front();
|
||||
dims.pop_front();
|
||||
|
||||
out << "[";
|
||||
if (cur->dimension(0).msb())
|
||||
if (cur->dimension(0).msb() && cur->dimension(0).lsb()) {
|
||||
// bounded array, unbounded arrays have msb() & lsb() nullified
|
||||
errors += cur->dimension(0).msb()->emit(out, 0, 0);
|
||||
else
|
||||
out << "?error?";
|
||||
out << ":";
|
||||
if (cur->dimension(0).lsb())
|
||||
out << ":";
|
||||
errors += cur->dimension(0).lsb()->emit(out, 0, 0);
|
||||
else
|
||||
out << "?error?";
|
||||
}
|
||||
out << "]";
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue