Fix compile errors under Windows MINGW compiler. [Gerald Williams]
git-svn-id: file://localhost/svn/verilator/trunk/verilator@909 77ca24e4-aefa-0310-84f0-b9a241c72d87
This commit is contained in:
parent
749302acb8
commit
78db712438
2
Changes
2
Changes
|
|
@ -9,6 +9,8 @@ indicates the contributor was also the author of the fix; Thanks!
|
||||||
|
|
||||||
*** Support while and do-while loops.
|
*** Support while and do-while loops.
|
||||||
|
|
||||||
|
**** Fix compile errors under Windows MINGW compiler. [Gerald Williams]
|
||||||
|
|
||||||
**** Fix dotted bit reference to local memory. [Eugene Weber]
|
**** Fix dotted bit reference to local memory. [Eugene Weber]
|
||||||
|
|
||||||
**** Fix 3.640 `verilog forcing IEEE 1364-1995 only. [David Hewson]
|
**** Fix 3.640 `verilog forcing IEEE 1364-1995 only. [David Hewson]
|
||||||
|
|
|
||||||
|
|
@ -551,6 +551,7 @@ We'll compile this example into C++.
|
||||||
int main(int argc, char **argv, char **env) {
|
int main(int argc, char **argv, char **env) {
|
||||||
Vour* top = new Vour;
|
Vour* top = new Vour;
|
||||||
while (!Verilated::gotFinish()) { top->eval(); }
|
while (!Verilated::gotFinish()) { top->eval(); }
|
||||||
|
exit(0);
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
|
@ -604,13 +605,13 @@ This is an example similar to the above, but using SystemPerl.
|
||||||
|
|
||||||
cat <<EOF >sc_main.cpp
|
cat <<EOF >sc_main.cpp
|
||||||
#include "Vour.h"
|
#include "Vour.h"
|
||||||
#include "systemperl.h"
|
|
||||||
int sc_main(int argc, char **argv) {
|
int sc_main(int argc, char **argv) {
|
||||||
sc_clock clk ("clk",10, 0.5, 3, true);
|
sc_clock clk ("clk",10, 0.5, 3, true);
|
||||||
Vour* top;
|
Vour* top;
|
||||||
SP_CELL (top, Vour);
|
top = new Vour("top"); // SP_CELL (top, Vour);
|
||||||
SP_PIN (top, clk, clk);
|
top->clk(clk); // SP_PIN (top, clk, clk);
|
||||||
while (!Verilated::gotFinish()) { sc_start(1); }
|
while (!Verilated::gotFinish()) { sc_start(1); }
|
||||||
|
exit(0);
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
|
@ -710,7 +711,10 @@ how Verilator compares, and may be able to suggest additional improvements.
|
||||||
|
|
||||||
=head1 FILES
|
=head1 FILES
|
||||||
|
|
||||||
Verilator creates the following files:
|
All output files are placed in the output directory name specified with the
|
||||||
|
-Mdir option, or "obj_dir" if not specified.
|
||||||
|
|
||||||
|
Verilator creates the following files in the output directory:
|
||||||
|
|
||||||
{prefix}.mk // Make include file for compiling
|
{prefix}.mk // Make include file for compiling
|
||||||
{prefix}_classes.mk // Make include file with class names
|
{prefix}_classes.mk // Make include file with class names
|
||||||
|
|
@ -722,7 +726,7 @@ For -cc and -sc mode, it also creates:
|
||||||
{prefix}{each_verilog_module}.cpp // Lower level internal C++ files
|
{prefix}{each_verilog_module}.cpp // Lower level internal C++ files
|
||||||
{prefix}{each_verilog_module}.h // Lower level internal header files
|
{prefix}{each_verilog_module}.h // Lower level internal header files
|
||||||
|
|
||||||
For -sp mode, it also creates:
|
For -sp mode, instead of .cpp and .h it creates:
|
||||||
|
|
||||||
{prefix}.sp // Top level SystemC file
|
{prefix}.sp // Top level SystemC file
|
||||||
{prefix}{each_verilog_module}.sp // Lower level internal SC files
|
{prefix}{each_verilog_module}.sp // Lower level internal SC files
|
||||||
|
|
@ -744,7 +748,8 @@ It also creates internal files that can be mostly ignored:
|
||||||
{prefix}{misc}.dot // Debugging graph files (--debug)
|
{prefix}{misc}.dot // Debugging graph files (--debug)
|
||||||
{prefix}{misc}.tree // Debugging files (--debug)
|
{prefix}{misc}.tree // Debugging files (--debug)
|
||||||
|
|
||||||
After running Make, the compiler will produce the following:
|
After running Make, the C++ compiler should produce the following:
|
||||||
|
|
||||||
{prefix} // Final executable (w/--exe argument)
|
{prefix} // Final executable (w/--exe argument)
|
||||||
{prefix}__ALL.a // Library of all Verilated objects
|
{prefix}__ALL.a // Library of all Verilated objects
|
||||||
{prefix}{misc}.o // Intermediate objects
|
{prefix}{misc}.o // Intermediate objects
|
||||||
|
|
@ -1253,6 +1258,10 @@ users to use these names, so it should not matter.
|
||||||
If you are having trouble determining where a dotted path goes wrong, note
|
If you are having trouble determining where a dotted path goes wrong, note
|
||||||
that Verilator will print a list of known scopes to help your debugging.
|
that Verilator will print a list of known scopes to help your debugging.
|
||||||
|
|
||||||
|
=head2 Floating Point
|
||||||
|
|
||||||
|
Floating Point numbers are not synthesizable, and so not supported.
|
||||||
|
|
||||||
=head2 Latches
|
=head2 Latches
|
||||||
|
|
||||||
Verilator is optimized for edge sensitive (flop based) designs. It will
|
Verilator is optimized for edge sensitive (flop based) designs. It will
|
||||||
|
|
@ -1309,7 +1318,8 @@ different.)
|
||||||
|
|
||||||
Verilator attempts to deal with generated clocks correctly, however new
|
Verilator attempts to deal with generated clocks correctly, however new
|
||||||
cases may turn up bugs in the scheduling algorithm. The safest option is
|
cases may turn up bugs in the scheduling algorithm. The safest option is
|
||||||
to have all clocks as primary inputs to the model.
|
to have all clocks as primary inputs to the model, or wires directly
|
||||||
|
attached to primary inputs.
|
||||||
|
|
||||||
=head2 Ranges must be big-bit-endian
|
=head2 Ranges must be big-bit-endian
|
||||||
|
|
||||||
|
|
@ -1459,9 +1469,9 @@ List of all warnings:
|
||||||
|
|
||||||
=item BLKANDNBLK
|
=item BLKANDNBLK
|
||||||
|
|
||||||
Error that a variable comes from a mix of blocked and non-blocking
|
BLKANDNBLK is an error that a variable comes from a mix of blocked and
|
||||||
assignments. Generally, this is caused by a register driven by both combo
|
non-blocking assignments. Generally, this is caused by a register driven
|
||||||
logic and a flop:
|
by both combo logic and a flop:
|
||||||
|
|
||||||
always @ (posedge clk) foo[0] <= ...
|
always @ (posedge clk) foo[0] <= ...
|
||||||
always @* foo[1] = ...
|
always @* foo[1] = ...
|
||||||
|
|
@ -1477,6 +1487,9 @@ This is good coding practice anyways.
|
||||||
It is also possible to disable this error when one of the assignments is
|
It is also possible to disable this error when one of the assignments is
|
||||||
inside a public task.
|
inside a public task.
|
||||||
|
|
||||||
|
Ignoring this warning may make Verilator simulations differ from other
|
||||||
|
simulators.
|
||||||
|
|
||||||
=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
|
||||||
|
|
@ -1484,6 +1497,9 @@ there is no case item specified. This is bad style, if a case is
|
||||||
impossible, it's better to have a "default: $stop;" or just "default: ;" so
|
impossible, it's better to have a "default: $stop;" or just "default: ;" so
|
||||||
that any design assumption violations will be discovered in simulation.
|
that any design assumption violations will be discovered in simulation.
|
||||||
|
|
||||||
|
Ignoring this warning will only suppress the lint check, it will simulate
|
||||||
|
correctly.
|
||||||
|
|
||||||
=item CASEOVERLAP
|
=item CASEOVERLAP
|
||||||
|
|
||||||
Warns that inside a case statement you have case values which are detected
|
Warns that inside a case statement you have case values which are detected
|
||||||
|
|
@ -1491,17 +1507,26 @@ to be overlapping. This is bad style, as moving the order of case values
|
||||||
will cause different behavior. Generally the values can be respecified to
|
will cause different behavior. Generally the values can be respecified to
|
||||||
not overlap.
|
not overlap.
|
||||||
|
|
||||||
|
Ignoring this warning will only suppress the lint check, it will simulate
|
||||||
|
correctly.
|
||||||
|
|
||||||
=item CASEX
|
=item CASEX
|
||||||
|
|
||||||
Warns that it is simply better style to use casez, and C<?> in place of
|
Warns that it is simply better style to use casez, and C<?> in place of
|
||||||
C<x>'s. See
|
C<x>'s. See
|
||||||
L<http://www.sunburst-design.com/papers/CummingsSNUG1999Boston_FullParallelCase_rev1_1.pdf>
|
L<http://www.sunburst-design.com/papers/CummingsSNUG1999Boston_FullParallelCase_rev1_1.pdf>
|
||||||
|
|
||||||
|
Ignoring this warning will only suppress the lint check, it will simulate
|
||||||
|
correctly.
|
||||||
|
|
||||||
=item CMPCONST
|
=item CMPCONST
|
||||||
|
|
||||||
Warns that you are comparing a value in a way that will always be constant.
|
Warns that you are comparing a value in a way that will always be constant.
|
||||||
For example "X > 1" will always be true when X is a single bit wide.
|
For example "X > 1" will always be true when X is a single bit wide.
|
||||||
|
|
||||||
|
Ignoring this warning will only suppress the lint check, it will simulate
|
||||||
|
correctly.
|
||||||
|
|
||||||
=item COMBDLY
|
=item COMBDLY
|
||||||
|
|
||||||
Warns that you have a delayed assignment inside of a combinatorial block.
|
Warns that you have a delayed assignment inside of a combinatorial block.
|
||||||
|
|
@ -1511,6 +1536,9 @@ Verilator, like synthesis, will convert this to a non-delayed assignment,
|
||||||
which may result in logic races or other nasties. See
|
which may result in logic races or other nasties. See
|
||||||
L<http://www.sunburst-design.com/papers/CummingsSNUG2000SJ_NBA_rev1_2.pdf>
|
L<http://www.sunburst-design.com/papers/CummingsSNUG2000SJ_NBA_rev1_2.pdf>
|
||||||
|
|
||||||
|
Ignoring this warning may make Verilator simulations differ from other
|
||||||
|
simulators.
|
||||||
|
|
||||||
=item GENCLK
|
=item GENCLK
|
||||||
|
|
||||||
Warns that the specified signal is generated, but is also being used as a
|
Warns that the specified signal is generated, but is also being used as a
|
||||||
|
|
@ -1521,6 +1549,9 @@ generate ALL clocks outside in C++/SystemC and make them primary inputs to
|
||||||
your Verilog model. (However once need to you have even one, don't sweat
|
your Verilog model. (However once need to you have even one, don't sweat
|
||||||
additional ones.)
|
additional ones.)
|
||||||
|
|
||||||
|
Ignoring this warning may make Verilator simulations differ from other
|
||||||
|
simulators.
|
||||||
|
|
||||||
=item IMPLICIT
|
=item IMPLICIT
|
||||||
|
|
||||||
Warns that a wire is being implicitly declared (it is a single bit wide
|
Warns that a wire is being implicitly declared (it is a single bit wide
|
||||||
|
|
@ -1530,18 +1561,27 @@ signal before it is implicitly declared by a cell, and can lead to dangling
|
||||||
nets. A better option is the /*AUTOWIRE*/ feature of Verilog-Mode for
|
nets. A better option is the /*AUTOWIRE*/ feature of Verilog-Mode for
|
||||||
Emacs, available from L<http://www.veripool.com/>
|
Emacs, available from L<http://www.veripool.com/>
|
||||||
|
|
||||||
|
Ignoring this warning will only suppress the lint check, it will simulate
|
||||||
|
correctly.
|
||||||
|
|
||||||
=item IMPURE
|
=item IMPURE
|
||||||
|
|
||||||
Warns that a task or function that has been marked with /*verilator
|
Warns that a task or function that has been marked with /*verilator
|
||||||
no_inline_task*/ references variables that are not local to the task.
|
no_inline_task*/ references variables that are not local to the task.
|
||||||
Verilator cannot schedule these variables correctly.
|
Verilator cannot schedule these variables correctly.
|
||||||
|
|
||||||
|
Ignoring this warning may make Verilator simulations differ from other
|
||||||
|
simulators.
|
||||||
|
|
||||||
=item MULTIDRIVEN
|
=item MULTIDRIVEN
|
||||||
|
|
||||||
Warns that the specified signal comes from multiple always blocks. This is
|
Warns that the specified signal comes from multiple always blocks. This is
|
||||||
often unsupported by synthesis tools, and is considered bad style. It will
|
often unsupported by synthesis tools, and is considered bad style. It will
|
||||||
also cause longer runtimes due to reduced optimizations.
|
also cause longer runtimes due to reduced optimizations.
|
||||||
|
|
||||||
|
Ignoring this warning will only slow simulations, it will simulate
|
||||||
|
correctly.
|
||||||
|
|
||||||
=item MULTITOP
|
=item MULTITOP
|
||||||
|
|
||||||
Error that there are multiple top level modules, that is modules not
|
Error that there are multiple top level modules, that is modules not
|
||||||
|
|
@ -1580,6 +1620,9 @@ cases would result in simulator mismatches.
|
||||||
|
|
||||||
Warns that the specified signal is never sourced.
|
Warns that the specified signal is never sourced.
|
||||||
|
|
||||||
|
Ignoring this warning will only suppress the lint check, it will simulate
|
||||||
|
correctly.
|
||||||
|
|
||||||
=item UNOPT
|
=item UNOPT
|
||||||
|
|
||||||
Warns that due to some construct, optimization of the specified signal or
|
Warns that due to some construct, optimization of the specified signal or
|
||||||
|
|
@ -1593,6 +1636,9 @@ blocks in both submodules, even if they are unrelated always blocks. This
|
||||||
affects performance because Verilator would have to evaluate each submodule
|
affects performance because Verilator would have to evaluate each submodule
|
||||||
multiple times to stabilize the signals crossing between the modules.
|
multiple times to stabilize the signals crossing between the modules.
|
||||||
|
|
||||||
|
Ignoring this warning will only slow simulations, it will simulate
|
||||||
|
correctly.
|
||||||
|
|
||||||
=item UNOPTFLAT
|
=item UNOPTFLAT
|
||||||
|
|
||||||
Warns that due to some construct, optimization of the specified signal is
|
Warns that due to some construct, optimization of the specified signal is
|
||||||
|
|
@ -1644,16 +1690,25 @@ The UNOPTFLAT warning may also occur where outputs from a block of logic
|
||||||
are independent, but occur in the same always block. To fix this, use the
|
are independent, but occur in the same always block. To fix this, use the
|
||||||
isolate_assignments meta comment described above.
|
isolate_assignments meta comment described above.
|
||||||
|
|
||||||
|
Ignoring this warning will only slow simulations, it will simulate
|
||||||
|
correctly.
|
||||||
|
|
||||||
=item UNSIGNED
|
=item UNSIGNED
|
||||||
|
|
||||||
Warns that you are comparing a unsigned value in a way that implies it is
|
Warns that you are comparing a unsigned value in a way that implies it is
|
||||||
signed, for example "X < 0" will always be true when X is unsigned.
|
signed, for example "X < 0" will always be true when X is unsigned.
|
||||||
|
|
||||||
|
Ignoring this warning will only suppress the lint check, it will simulate
|
||||||
|
correctly.
|
||||||
|
|
||||||
=item UNUSED
|
=item UNUSED
|
||||||
|
|
||||||
Warns that the specified signal is never sinked. This is a future message,
|
Warns that the specified signal is never sinked. This is a future message,
|
||||||
currently Verilator will not produce this warning.
|
currently Verilator will not produce this warning.
|
||||||
|
|
||||||
|
Ignoring this warning will only suppress the lint check, it will simulate
|
||||||
|
correctly.
|
||||||
|
|
||||||
=item VARHIDDEN
|
=item VARHIDDEN
|
||||||
|
|
||||||
Warns that a task, function, or begin/end block is declaring a variable by
|
Warns that a task, function, or begin/end block is declaring a variable by
|
||||||
|
|
@ -1661,6 +1716,9 @@ the same name as a variable in the upper level module or begin/end block
|
||||||
(thus hiding the upper variable from being able to be used.) Rename the
|
(thus hiding the upper variable from being able to be used.) Rename the
|
||||||
variable to avoid confusion when reading the code.
|
variable to avoid confusion when reading the code.
|
||||||
|
|
||||||
|
Ignoring this warning will only suppress the lint check, it will simulate
|
||||||
|
correctly.
|
||||||
|
|
||||||
=item WIDTH
|
=item WIDTH
|
||||||
|
|
||||||
Warns that based on width rules of Verilog, two operands have different
|
Warns that based on width rules of Verilog, two operands have different
|
||||||
|
|
@ -1679,6 +1737,9 @@ The best fix, which clarifies intent and will also make all tools happy is:
|
||||||
|
|
||||||
wire [5:0] plus_one = from[5:0] + 6'd1 + {5'd0,carry[0]};
|
wire [5:0] plus_one = from[5:0] + 6'd1 + {5'd0,carry[0]};
|
||||||
|
|
||||||
|
Ignoring this warning will only suppress the lint check, it will simulate
|
||||||
|
correctly.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
The following describes the less obvious errors:
|
The following describes the less obvious errors:
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,8 @@ void vl_fatal (const char* filename, int linenum, const char* hier, const char*
|
||||||
// Random reset -- Only called at init time, so don't inline.
|
// Random reset -- Only called at init time, so don't inline.
|
||||||
|
|
||||||
IData VL_RAND32() {
|
IData VL_RAND32() {
|
||||||
#ifdef _MSC_VER
|
#if defined(_WIN32) && !defined(__CYGWIN__)
|
||||||
|
// Windows doesn't have lrand48(), although Cygwin does.
|
||||||
return (rand()<<16) | rand();
|
return (rand()<<16) | rand();
|
||||||
#else
|
#else
|
||||||
return (lrand48()<<16) | lrand48();
|
return (lrand48()<<16) | lrand48();
|
||||||
|
|
|
||||||
|
|
@ -83,7 +83,7 @@ typedef long vlsint32_t; ///< 32-bit signed type
|
||||||
typedef unsigned long vluint32_t; ///< 32-bit unsigned type
|
typedef unsigned long vluint32_t; ///< 32-bit unsigned type
|
||||||
typedef long long vlsint64_t; ///< 64-bit signed type
|
typedef long long vlsint64_t; ///< 64-bit signed type
|
||||||
typedef unsigned long long vluint64_t; ///< 64-bit unsigned type
|
typedef unsigned long long vluint64_t; ///< 64-bit unsigned type
|
||||||
#elif defined(_WIN32)
|
#elif defined(_WIN32) && !defined(__MINGW32__)
|
||||||
typedef unsigned char uint8_t; ///< 8-bit unsigned type (backward compatibility)
|
typedef unsigned char uint8_t; ///< 8-bit unsigned type (backward compatibility)
|
||||||
typedef unsigned short int uint16_t; ///< 16-bit unsigned type (backward compatibility)
|
typedef unsigned short int uint16_t; ///< 16-bit unsigned type (backward compatibility)
|
||||||
typedef unsigned long uint32_t; ///< 32-bit unsigned type (backward compatibility)
|
typedef unsigned long uint32_t; ///< 32-bit unsigned type (backward compatibility)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue