Add BLKLOOPINIT error code, and describe --unroll-count.
This commit is contained in:
parent
02e6005fa9
commit
ec0947ef7e
4
Changes
4
Changes
|
|
@ -3,6 +3,10 @@ Revision history for Verilator
|
||||||
The contributors that suggested a given feature are shown in []. [by ...]
|
The contributors that suggested a given feature are shown in []. [by ...]
|
||||||
indicates the contributor was also the author of the fix; Thanks!
|
indicates the contributor was also the author of the fix; Thanks!
|
||||||
|
|
||||||
|
* Verilator 3.711 2009/**
|
||||||
|
|
||||||
|
**** Add BLKLOOPINIT error code, and describe --unroll-count. [Jeff Winston]
|
||||||
|
|
||||||
* Verilator 3.711 2009/06/23
|
* Verilator 3.711 2009/06/23
|
||||||
|
|
||||||
**** Support decimal constants of arbitrary widths. [Mark Marshall]
|
**** Support decimal constants of arbitrary widths. [Mark Marshall]
|
||||||
|
|
|
||||||
|
|
@ -1617,17 +1617,9 @@ All specify blocks and timing checks are ignored.
|
||||||
|
|
||||||
=head2 Array Initialization
|
=head2 Array Initialization
|
||||||
|
|
||||||
When initializing an array, you need to use non-delayed assignments. This
|
When initializing a large array, you need to use non-delayed assignments.
|
||||||
is done in the interest of speed; if delayed assignments were used, the
|
Verilator will tell you when this needs to be fixed; see the BLKLOOPINIT
|
||||||
simulator would have to copy large arrays every cycle. (In smaller loops,
|
error for more information.
|
||||||
loop unrolling allows the delayed assignment to work, though it's a bit
|
|
||||||
slower than a non-delayed assignment.) Here's an example
|
|
||||||
|
|
||||||
always @ (posedge clk)
|
|
||||||
if (~reset_l) begin
|
|
||||||
for (i=0; i<`ARRAY_SIZE; i++) begin
|
|
||||||
array[i] = 0; // Non-delayed for verilator
|
|
||||||
end
|
|
||||||
|
|
||||||
=head2 Array Out of Bounds
|
=head2 Array Out of Bounds
|
||||||
|
|
||||||
|
|
@ -1795,6 +1787,24 @@ inside a public task.
|
||||||
Ignoring this warning may make Verilator simulations differ from other
|
Ignoring this warning may make Verilator simulations differ from other
|
||||||
simulators.
|
simulators.
|
||||||
|
|
||||||
|
=item BLKLOOPINIT
|
||||||
|
|
||||||
|
This indicates that the initialization of an array needs to use non-delayed
|
||||||
|
assignments. This is done in the interest of speed; if delayed assignments
|
||||||
|
were used, the simulator would have to copy large arrays every cycle. (In
|
||||||
|
smaller loops, loop unrolling allows the delayed assignment to work, though
|
||||||
|
it's a bit slower than a non-delayed assignment.) Here's an example
|
||||||
|
|
||||||
|
always @ (posedge clk)
|
||||||
|
if (~reset_l) begin
|
||||||
|
for (i=0; i<`ARRAY_SIZE; i++) begin
|
||||||
|
array[i] = 0; // Non-delayed for verilator
|
||||||
|
end
|
||||||
|
|
||||||
|
This message is only seen on large or complicated loops because Verilator
|
||||||
|
generally unrolls small loops. You may want to try increasing
|
||||||
|
--unroll-count which will raise the small loop bar to avoid this error.
|
||||||
|
|
||||||
=item CASEINCOMPLETE
|
=item CASEINCOMPLETE
|
||||||
|
|
||||||
Warns that inside a case statement there is a stimulus pattern for which
|
Warns that inside a case statement there is a stimulus pattern for which
|
||||||
|
|
|
||||||
|
|
@ -335,7 +335,7 @@ private:
|
||||||
&& nodep->lhsp()->castSel()->fromp()->castArraySel())) {
|
&& nodep->lhsp()->castSel()->fromp()->castArraySel())) {
|
||||||
AstNode* lhsp = nodep->lhsp()->unlinkFrBack();
|
AstNode* lhsp = nodep->lhsp()->unlinkFrBack();
|
||||||
AstNode* newlhsp = createDlyArray(nodep, lhsp);
|
AstNode* newlhsp = createDlyArray(nodep, lhsp);
|
||||||
if (m_inLoop) nodep->v3error("Unsupported: Delayed assignment to array inside for loops (non-delayed is ok - see docs)");
|
if (m_inLoop) nodep->v3warn(BLKLOOPINIT,"Unsupported: Delayed assignment to array inside for loops (non-delayed is ok - see docs)");
|
||||||
if (newlhsp) {
|
if (newlhsp) {
|
||||||
nodep->lhsp(newlhsp);
|
nodep->lhsp(newlhsp);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,7 @@ public:
|
||||||
// Error codes:
|
// Error codes:
|
||||||
MULTITOP, // Error: Multiple top level modules
|
MULTITOP, // Error: Multiple top level modules
|
||||||
TASKNSVAR, // Error: Task I/O not simple
|
TASKNSVAR, // Error: Task I/O not simple
|
||||||
|
BLKLOOPINIT, // Error: Delayed assignment to array inside for loops
|
||||||
// Warning codes:
|
// Warning codes:
|
||||||
FIRST_WARN, // Just a code so the program knows where to start warnings
|
FIRST_WARN, // Just a code so the program knows where to start warnings
|
||||||
//
|
//
|
||||||
|
|
@ -88,7 +89,7 @@ public:
|
||||||
// Boolean
|
// Boolean
|
||||||
" I_COVERAGE", " I_TRACING",
|
" I_COVERAGE", " I_TRACING",
|
||||||
// Errors
|
// Errors
|
||||||
"MULTITOP", "TASKNSVAR",
|
"MULTITOP", "TASKNSVAR", "BLKLOOPINIT",
|
||||||
// Warnings
|
// Warnings
|
||||||
" FIRST_WARN",
|
" FIRST_WARN",
|
||||||
"BLKANDNBLK",
|
"BLKANDNBLK",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue