mirror of
https://github.com/verilator/verilator.git
synced 2025-01-05 22:27:35 +00:00
80b08b71aa
For NBAs that might execute a dynamic number of times in a single evaluation (specifically: those that assign to array elements inside loops), we introduce a new run-time VlNBACommitQueue data-structure (currently a vector), which stores all pending updates and the necessary info to reconstruct the LHS reference of the AstAssignDly at run-time. All variables needing a commit queue has their corresponding unique commit queue. All NBAs to a variable that requires a commit queue go through the commit queue. This is necessary to preserve update order in sequential code, e.g.: a[7] <= 10 for (int i = 1 ; i < 10; ++i) a[i] <= i; a[2] <= 10 needs to end with array elements 1..9 being 1, 10, 3, 4, 5, 6, 7, 8, 9. This enables supporting common forms of NBAs to arrays on the left hand side of <= in non-suspendable/non-fork code. (Suspendable/fork implementation is unclear to me so I left it unchanged, see #5084). Any NBA that does not need a commit queue (i.e.: those that were supported before), use the same scheme as before, and this patch should have no effect on the generated code for those NBAs.
19 lines
1.3 KiB
Plaintext
19 lines
1.3 KiB
Plaintext
%Error-BLKLOOPINIT: t/t_order_blkloopinit_bad.v:26:20: Unsupported: Non-blocking assignment to array inside loop in suspendable process or fork
|
|
: ... note: In instance 't'
|
|
26 | array1[i] <= 0;
|
|
| ^~
|
|
... For error description see https://verilator.org/warn/BLKLOOPINIT?v=latest
|
|
%Error-BLKLOOPINIT: t/t_order_blkloopinit_bad.v:36:20: Unsupported: Non-blocking assignment to array with compound element type inside loop
|
|
: ... note: In instance 't'
|
|
36 | array2[i] <= null;
|
|
| ^~
|
|
%Error-BLKLOOPINIT: t/t_order_blkloopinit_bad.v:45:20: Unsupported: Non-blocking assignment to array in both loop and suspendable process/fork
|
|
: ... note: In instance 't'
|
|
t/t_order_blkloopinit_bad.v:50:20: ... Location of non-blocking assignment in suspendable process/fork
|
|
50 | #1 array3[0] <= 0;
|
|
| ^~
|
|
t/t_order_blkloopinit_bad.v:45:20: ... Location of non-blocking assignment inside loop
|
|
45 | array3[i] <= 0;
|
|
| ^~
|
|
%Error: Exiting due to
|