The vlog95 code generator collects all the constant assignments to a net within each scope and then emits them. The old code only recorded the ivl_signal_t for each constant assignment, which meant it had to iterate through the nexus pointers in the assicated nexus to find the constant. When there were multiple constant assignments to the same net, it needed to record which assignments had already been emitted, which it did by keeping a count in the nexus private data and skipping that many constants on each successive assignment. However the count did not get reset after emitting all the assignments in that scope, so if there were assignments to the same net made in another scope, the count would already be positive and those assignments would also be skipped. This could probably have been fixed by clearing the nexus private data after processing the constant assignment list for each scope, but it is more efficient to record the ivl_nexus_ptr_t for each constant along with the ivl_signal_t, eliminating the need to search for the associated nexus pointer. |
||
|---|---|---|
| .. | ||
| Makefile.in | ||
| cppcheck.sup | ||
| event.c | ||
| expr.c | ||
| logic_lpm.c | ||
| misc.c | ||
| numbers.c | ||
| scope.c | ||
| stmt.c | ||
| udp.c | ||
| vlog95-s.conf | ||
| vlog95.c | ||
| vlog95.conf | ||
| vlog95_priv.h | ||