Fix GitHub issue #231 - support packed array indexing in foreach statement.
(cherry picked from commit 6309674a8d)
This commit is contained in:
parent
e834302875
commit
a01b7054fc
14
elaborate.cc
14
elaborate.cc
|
|
@ -4799,14 +4799,18 @@ NetProc* PForeach::elaborate(Design*des, NetScope*scope) const
|
|||
<< " packed dimensions." << endl;
|
||||
}
|
||||
|
||||
std::vector<netrange_t>dims = array_sig->unpacked_dims();
|
||||
if (array_sig->packed_dimensions() > 0) {
|
||||
dims.insert(dims.end(), array_sig->packed_dims().begin(), array_sig->packed_dims().end());
|
||||
}
|
||||
|
||||
// Classic arrays are processed this way.
|
||||
if (array_sig->data_type()==IVL_VT_BOOL)
|
||||
return elaborate_static_array_(des, scope, array_sig->unpacked_dims());
|
||||
return elaborate_static_array_(des, scope, dims);
|
||||
if (array_sig->data_type()==IVL_VT_LOGIC)
|
||||
return elaborate_static_array_(des, scope, array_sig->unpacked_dims());
|
||||
return elaborate_static_array_(des, scope, dims);
|
||||
if (array_sig->unpacked_dimensions() >= index_vars_.size())
|
||||
return elaborate_static_array_(des, scope, array_sig->unpacked_dims());
|
||||
|
||||
return elaborate_static_array_(des, scope, dims);
|
||||
|
||||
// At this point, we know that the array is dynamic so we
|
||||
// handle that slightly differently, using run-time tests.
|
||||
|
|
@ -4877,7 +4881,7 @@ NetProc* PForeach::elaborate_static_array_(Design*des, NetScope*scope,
|
|||
}
|
||||
|
||||
ivl_assert(*this, index_vars_.size() > 0);
|
||||
ivl_assert(*this, dims.size() == index_vars_.size());
|
||||
ivl_assert(*this, dims.size() >= index_vars_.size());
|
||||
|
||||
NetProc*sub;
|
||||
if (statement_)
|
||||
|
|
|
|||
Loading…
Reference in New Issue