Fix for pr3452808.
The tran island rework included an optimisation that meant that an island port would only be resolved once the initial value for the net attached to that port had propagated to the port. However, v0.9 does not propagate initial values in some cases, so this optimisation cannot be used.
This commit is contained in:
parent
0fa7764eac
commit
c96619527a
|
|
@ -152,9 +152,24 @@ static void push_value_through_branch(const vvp_vector8_t&val,
|
|||
if (dst_port->value.size() == 0)
|
||||
dst_port->value = island_get_value(dst_net);
|
||||
|
||||
// If we don't yet have an initial value for the port, skip.
|
||||
if (dst_port->value.size() == 0)
|
||||
// If we don't yet have an initial value for this port, simply
|
||||
// derive the port value from the pushed value. This does not
|
||||
// need to be pushed back into the network.
|
||||
if (dst_port->value.size() == 0) {
|
||||
if (branch->width == 0) {
|
||||
// There are no part selects.
|
||||
dst_port->value = val;
|
||||
} else if (dst_ab == 1) {
|
||||
// The other side is a strict subset (part select)
|
||||
// of this side.
|
||||
dst_port->value = val.subvalue(branch->offset, branch->part);
|
||||
} else {
|
||||
// The other side is a superset of this side.
|
||||
dst_port->value = part_expand(val, branch->width,
|
||||
branch->offset);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Now resolve the pushed value with whatever values we have
|
||||
// previously collected (and resolved) for the port.
|
||||
|
|
|
|||
Loading…
Reference in New Issue