mirror of
https://github.com/verilator/verilator.git
synced 2026-10-02 16:13:34 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
470f12ff46 | ||
|
|
4422de0c6c | ||
|
|
8a708f52f7 | ||
|
|
bcefc17631 | ||
|
|
daf19e241e | ||
|
|
b5f5b1fdf9 | ||
|
|
801b718953 | ||
|
|
f571658aa4 | ||
|
|
5d233b8c09 | ||
|
|
00724597f4 | ||
|
|
c659940ea8 | ||
|
|
23539eb55c | ||
|
|
e69bf418de | ||
|
|
0e1fcd38bb | ||
|
|
e74186565d | ||
|
|
7e54281e26 | ||
|
|
15f512bdee | ||
|
|
ecfe0283e2 | ||
|
|
3b874f759c | ||
|
|
9c9b4ed4e0 | ||
|
|
4f6d80c602 | ||
|
|
b50542531d | ||
|
|
8ab28d1d12 | ||
|
|
9567da22f8 | ||
|
|
36814b7681 | ||
|
|
82235e6c6f | ||
|
|
a8310f35f2 | ||
|
|
85989af031 | ||
|
|
cf9ffd16dd | ||
|
|
0602537cce | ||
|
|
24e32420b7 | ||
|
|
39c494260b |
@@ -3,6 +3,47 @@ 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.855 2014-01-18
|
||||||
|
|
||||||
|
*** Support modport import, bug696. [Jeremy Bennett]
|
||||||
|
|
||||||
|
*** Add --trace-structs to show struct names, bug673. [Chris Randall]
|
||||||
|
|
||||||
|
**** Fix tracing of packed structs, bug705. [Jie Xu]
|
||||||
|
|
||||||
|
**** Fix --lint-only with MinGW, msg1283. [HyungKi Jeong]
|
||||||
|
|
||||||
|
**** Fix some delayed assignments of typedefed unpacked arrays.
|
||||||
|
|
||||||
|
**** Fix wire declarations with size and not range, bug466. [Alex Solomatnikov]
|
||||||
|
|
||||||
|
**** Fix parameter pin vs. normal pin error, bug704. [Alex Solomatnikov]
|
||||||
|
|
||||||
|
|
||||||
|
* Verilator 3.854 2013-11-26
|
||||||
|
|
||||||
|
*** Add UNPACKED warning to convert unpacked structs. [Jeremy Bennett]
|
||||||
|
|
||||||
|
*** Add --compiler clang to work around compiler bug, bug694. [Stefan Ludwig]
|
||||||
|
|
||||||
|
**** Support vpi_get of vpiSuppressVal, bug687. [Varun Koyyalagunta]
|
||||||
|
|
||||||
|
**** Support vpi_get_time, bug688. [Varun Koyyalagunta]
|
||||||
|
|
||||||
|
**** Fix evaluation of chained parameter functions, bug684. [Ted Campbell]
|
||||||
|
|
||||||
|
**** Fix enum value extension of '1.
|
||||||
|
|
||||||
|
**** Fix multiple VPI variable callbacks, bug679. [Rich Porter]
|
||||||
|
|
||||||
|
**** Fix vpi_get of vpiSize, bug680. [Rich Porter]
|
||||||
|
|
||||||
|
**** Fix vpi_remove_cb inside callback, bug689. [Varun Koyyalagunta]
|
||||||
|
|
||||||
|
**** Fix crash with coverage of structures, bug691. [Eivind Liland]
|
||||||
|
|
||||||
|
**** Fix array assignment from const var, bug693. [Jie Xu]
|
||||||
|
|
||||||
|
|
||||||
* Verilator 3.853 2013-09-30
|
* Verilator 3.853 2013-09-30
|
||||||
|
|
||||||
@@ -2279,7 +2320,7 @@ of input ports exists for tracing.
|
|||||||
|
|
||||||
This uses outline mode in Emacs. See C-h m [M-x describe-mode].
|
This uses outline mode in Emacs. See C-h m [M-x describe-mode].
|
||||||
|
|
||||||
Copyright 2001-2013 by Wilson Snyder. This program is free software; you
|
Copyright 2001-2014 by Wilson Snyder. This program is free software; you
|
||||||
can redistribute it and/or modify it under the terms of either the GNU
|
can redistribute it and/or modify it under the terms of either the GNU
|
||||||
Lesser General Public License Version 3 or the Perl Artistic License
|
Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
Version 2.0.
|
Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -9,7 +9,7 @@
|
|||||||
#
|
#
|
||||||
#*****************************************************************************
|
#*****************************************************************************
|
||||||
#
|
#
|
||||||
# Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
# Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
# redistribute it and/or modify it under the terms of either the GNU
|
# redistribute it and/or modify it under the terms of either the GNU
|
||||||
# Lesser General Public License Version 3 or the Perl Artistic License
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
# Version 2.0.
|
# Version 2.0.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
// DESCRIPTION: Verilator: List of To Do issues.
|
// DESCRIPTION: Verilator: List of To Do issues.
|
||||||
//
|
//
|
||||||
// Copyright 2004-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2004-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+26
-3
@@ -3,7 +3,7 @@ eval 'exec perl -wS $0 ${1+"$@"}'
|
|||||||
if 0;
|
if 0;
|
||||||
######################################################################
|
######################################################################
|
||||||
#
|
#
|
||||||
# Copyright 2003-2013 by Wilson Snyder. This program is free software; you
|
# Copyright 2003-2014 by Wilson Snyder. This program is free software; you
|
||||||
# can redistribute it and/or modify it under the terms of either the GNU
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
# Lesser General Public License Version 3 or the Perl Artistic License
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
# Version 2.0.
|
# Version 2.0.
|
||||||
@@ -325,6 +325,7 @@ descriptions in the next sections for more information.
|
|||||||
--trace-depth <levels> Depth of tracing
|
--trace-depth <levels> Depth of tracing
|
||||||
--trace-max-array <depth> Maximum bit width for tracing
|
--trace-max-array <depth> Maximum bit width for tracing
|
||||||
--trace-max-width <width> Maximum array depth for tracing
|
--trace-max-width <width> Maximum array depth for tracing
|
||||||
|
--trace-structs Enable tracing structure names
|
||||||
--trace-underscore Enable tracing of _signals
|
--trace-underscore Enable tracing of _signals
|
||||||
-U<var> Undefine preprocessor define
|
-U<var> Undefine preprocessor define
|
||||||
--unroll-count <loops> Tune maximum loop iterations
|
--unroll-count <loops> Tune maximum loop iterations
|
||||||
@@ -469,6 +470,12 @@ Enables tunings and work-arounds for the specified C++ compiler.
|
|||||||
|
|
||||||
=over 4
|
=over 4
|
||||||
|
|
||||||
|
=item clang
|
||||||
|
|
||||||
|
Tune for clang. This may reduce execution speed as it enables several
|
||||||
|
workarounds to avoid silly hardcoded limits in clang. This includes
|
||||||
|
breaking deep structures as for msvc as described below.
|
||||||
|
|
||||||
=item gcc
|
=item gcc
|
||||||
|
|
||||||
Tune for Gnu C++, although generated code should work on almost any
|
Tune for Gnu C++, although generated code should work on almost any
|
||||||
@@ -748,7 +755,9 @@ to gcc -MP option.
|
|||||||
=item --Mdir I<directory>
|
=item --Mdir I<directory>
|
||||||
|
|
||||||
Specifies the name of the Make object directory. All generated files will
|
Specifies the name of the Make object directory. All generated files will
|
||||||
be placed in this directory. If not specified, "obj_dir" is used.
|
be placed in this directory. If not specified, "obj_dir" is used. The
|
||||||
|
directory is created if it does not exist and the parent directories exist;
|
||||||
|
otherwise manually create the Mdir before calling Verilator.
|
||||||
|
|
||||||
=item --mod-prefix I<topname>
|
=item --mod-prefix I<topname>
|
||||||
|
|
||||||
@@ -1013,6 +1022,13 @@ Rarely needed. Specify the maximum bit width of a signal that may be
|
|||||||
traced. Defaults to 256, as tracing large vectors may greatly slow traced
|
traced. Defaults to 256, as tracing large vectors may greatly slow traced
|
||||||
simulations.
|
simulations.
|
||||||
|
|
||||||
|
=item --trace-structs
|
||||||
|
|
||||||
|
Enable tracing to show the name of packed structure, union, and packed
|
||||||
|
array fields, rather than a simgle combined packed bus. Due to VCD file
|
||||||
|
format constraints this may result in significantly slower trace times and
|
||||||
|
larger trace files.
|
||||||
|
|
||||||
=item --trace-underscore
|
=item --trace-underscore
|
||||||
|
|
||||||
Enable tracing of signals that start with an underscore. Normally, these
|
Enable tracing of signals that start with an underscore. Normally, these
|
||||||
@@ -3225,6 +3241,13 @@ section for more details.
|
|||||||
Ignoring this warning will only slow simulations, it will simulate
|
Ignoring this warning will only slow simulations, it will simulate
|
||||||
correctly.
|
correctly.
|
||||||
|
|
||||||
|
=item UNPACKED
|
||||||
|
|
||||||
|
Warns that unpacked structs and unions are not supported.
|
||||||
|
|
||||||
|
Ignoring this warning will make Verilator treat the structure as packed,
|
||||||
|
which may make Verilator simulations differ from other simulators.
|
||||||
|
|
||||||
=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
|
||||||
@@ -3808,7 +3831,7 @@ Thanks to them, and all those we've missed including above.
|
|||||||
|
|
||||||
The latest version is available from L<http://www.veripool.org/>.
|
The latest version is available from L<http://www.veripool.org/>.
|
||||||
|
|
||||||
Copyright 2003-2013 by Wilson Snyder. Verilator is free software; you can
|
Copyright 2003-2014 by Wilson Snyder. Verilator is free software; you can
|
||||||
redistribute it and/or modify the Verilator internals under the terms of
|
redistribute it and/or modify the Verilator internals under the terms of
|
||||||
either the GNU Lesser General Public License Version 3 or the Perl Artistic
|
either the GNU Lesser General Public License Version 3 or the Perl Artistic
|
||||||
License Version 2.0.
|
License Version 2.0.
|
||||||
|
|||||||
@@ -235,7 +235,7 @@ Do not show differences in line numbering.
|
|||||||
|
|
||||||
The latest version is available from L<http://www.veripool.org/verilator>.
|
The latest version is available from L<http://www.veripool.org/verilator>.
|
||||||
|
|
||||||
Copyright 2005-2013 by Wilson Snyder. This package is free software; you can
|
Copyright 2005-2014 by Wilson Snyder. This package is free software; you can
|
||||||
redistribute it and/or modify it under the terms of either the GNU Lesser
|
redistribute it and/or modify it under the terms of either the GNU Lesser
|
||||||
General Public License Version 3 or the Perl Artistic License Version 2.0.
|
General Public License Version 3 or the Perl Artistic License Version 2.0.
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ eval 'exec perl -wS $0 ${1+"$@"}'
|
|||||||
if 0;
|
if 0;
|
||||||
# DESCRIPTION: Print include statements for each ARGV
|
# DESCRIPTION: Print include statements for each ARGV
|
||||||
#
|
#
|
||||||
# Copyright 2003-2013 by Wilson Snyder. This package is free software; you can
|
# Copyright 2003-2014 by Wilson Snyder. This package is free software; you can
|
||||||
# redistribute it and/or modify it under the terms of either the GNU Lesser
|
# redistribute it and/or modify it under the terms of either the GNU Lesser
|
||||||
# General Public License Version 3 or the Perl Artistic License Version 2.0.
|
# General Public License Version 3 or the Perl Artistic License Version 2.0.
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|||||||
@@ -208,7 +208,7 @@ Displays this message and program version and exits.
|
|||||||
|
|
||||||
The latest version is available from L<http://www.veripool.org/>.
|
The latest version is available from L<http://www.veripool.org/>.
|
||||||
|
|
||||||
Copyright 2007-2013 by Wilson Snyder. Verilator is free software; you can
|
Copyright 2007-2014 by Wilson Snyder. Verilator is free software; you can
|
||||||
redistribute it and/or modify it under the terms of either the GNU Lesser
|
redistribute it and/or modify it under the terms of either the GNU Lesser
|
||||||
General Public License Version 3 or the Perl Artistic License Version 2.0.
|
General Public License Version 3 or the Perl Artistic License Version 2.0.
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -1,12 +1,12 @@
|
|||||||
# DESCRIPTION: Process this file with autoconf to produce a configure script.
|
# DESCRIPTION: Process this file with autoconf to produce a configure script.
|
||||||
#
|
#
|
||||||
# Copyright 2003-2013 by Wilson Snyder. Verilator is free software; you can
|
# Copyright 2003-2014 by Wilson Snyder. Verilator is free software; you can
|
||||||
# redistribute it and/or modify it under the terms of either the GNU Lesser
|
# redistribute it and/or modify it under the terms of either the GNU Lesser
|
||||||
# General Public License Version 3 or the Perl Artistic License Version 2.0.
|
# General Public License Version 3 or the Perl Artistic License Version 2.0.
|
||||||
|
|
||||||
#AC_INIT([Verilator],[#.### YYYY-MM-DD])
|
#AC_INIT([Verilator],[#.### YYYY-MM-DD])
|
||||||
#AC_INIT([Verilator],[#.### devel])
|
#AC_INIT([Verilator],[#.### devel])
|
||||||
AC_INIT([Verilator],[3.853 2013-09-30])
|
AC_INIT([Verilator],[3.855 2014-01-18])
|
||||||
AC_CONFIG_HEADER(src/config_build.h)
|
AC_CONFIG_HEADER(src/config_build.h)
|
||||||
AC_CONFIG_FILES(Makefile src/Makefile src/Makefile_obj include/verilated.mk include/verilated_config.h)
|
AC_CONFIG_FILES(Makefile src/Makefile src/Makefile_obj include/verilated.mk include/verilated_config.h)
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License.
|
// Lesser General Public License Version 3 or the Perl Artistic License.
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
@@ -770,6 +770,7 @@ void VL_SFORMAT_X(int obits, void* destp, const char* formatp, ...) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void VL_SFORMAT_X(int obits_ignored, string &output, const char* formatp, ...) {
|
void VL_SFORMAT_X(int obits_ignored, string &output, const char* formatp, ...) {
|
||||||
|
if (obits_ignored) {}
|
||||||
output = "";
|
output = "";
|
||||||
va_list ap;
|
va_list ap;
|
||||||
va_start(ap,formatp);
|
va_start(ap,formatp);
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License.
|
// Lesser General Public License Version 3 or the Perl Artistic License.
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
######################################################################
|
######################################################################
|
||||||
# DESCRIPTION: Makefile commands for all verilated target files
|
# DESCRIPTION: Makefile commands for all verilated target files
|
||||||
#
|
#
|
||||||
# Copyright 2003-2013 by Wilson Snyder. Verilator is free software; you can
|
# Copyright 2003-2014 by Wilson Snyder. Verilator is free software; you can
|
||||||
# redistribute it and/or modify it under the terms of either the GNU Lesser
|
# redistribute it and/or modify it under the terms of either the GNU Lesser
|
||||||
# General Public License Version 3 or the Perl Artistic License Version 2.0.
|
# General Public License Version 3 or the Perl Artistic License Version 2.0.
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License.
|
// Lesser General Public License Version 3 or the Perl Artistic License.
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2012 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License.
|
// Lesser General Public License Version 3 or the Perl Artistic License.
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2009-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2009-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License.
|
// Lesser General Public License Version 3 or the Perl Artistic License.
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License.
|
// Lesser General Public License Version 3 or the Perl Artistic License.
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2010-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2010-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License.
|
// Lesser General Public License Version 3 or the Perl Artistic License.
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2009-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2009-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License.
|
// Lesser General Public License Version 3 or the Perl Artistic License.
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
//
|
//
|
||||||
// THIS MODULE IS PUBLICLY LICENSED
|
// THIS MODULE IS PUBLICLY LICENSED
|
||||||
//
|
//
|
||||||
// Copyright 2001-2013 by Wilson Snyder. This program is free software;
|
// Copyright 2001-2014 by Wilson Snyder. This program is free software;
|
||||||
// you can redistribute it and/or modify it under the terms of either the GNU
|
// you can redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License Version 2.0.
|
// Lesser General Public License Version 3 or the Perl Artistic License Version 2.0.
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
//
|
//
|
||||||
// THIS MODULE IS PUBLICLY LICENSED
|
// THIS MODULE IS PUBLICLY LICENSED
|
||||||
//
|
//
|
||||||
// Copyright 2012-2013 by Wilson Snyder. This program is free software;
|
// Copyright 2012-2014 by Wilson Snyder. This program is free software;
|
||||||
// you can redistribute it and/or modify it under the terms of either the GNU
|
// you can redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License Version 2.0.
|
// Lesser General Public License Version 3 or the Perl Artistic License Version 2.0.
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2009-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2009-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License.
|
// Lesser General Public License Version 3 or the Perl Artistic License.
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License.
|
// Lesser General Public License Version 3 or the Perl Artistic License.
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
//
|
//
|
||||||
// THIS MODULE IS PUBLICLY LICENSED
|
// THIS MODULE IS PUBLICLY LICENSED
|
||||||
//
|
//
|
||||||
// Copyright 2001-2013 by Wilson Snyder. This program is free software;
|
// Copyright 2001-2014 by Wilson Snyder. This program is free software;
|
||||||
// you can redistribute it and/or modify it under the terms of either the GNU
|
// you can redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License Version 2.0.
|
// Lesser General Public License Version 3 or the Perl Artistic License Version 2.0.
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
//
|
//
|
||||||
// THIS MODULE IS PUBLICLY LICENSED
|
// THIS MODULE IS PUBLICLY LICENSED
|
||||||
//
|
//
|
||||||
// Copyright 2001-2013 by Wilson Snyder. This program is free software;
|
// Copyright 2001-2014 by Wilson Snyder. This program is free software;
|
||||||
// you can redistribute it and/or modify it under the terms of either the GNU
|
// you can redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License Version 2.0.
|
// Lesser General Public License Version 3 or the Perl Artistic License Version 2.0.
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
//
|
//
|
||||||
// THIS MODULE IS PUBLICLY LICENSED
|
// THIS MODULE IS PUBLICLY LICENSED
|
||||||
//
|
//
|
||||||
// Copyright 2001-2013 by Wilson Snyder. This program is free software;
|
// Copyright 2001-2014 by Wilson Snyder. This program is free software;
|
||||||
// you can redistribute it and/or modify it under the terms of either the GNU
|
// you can redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License Version 2.0.
|
// Lesser General Public License Version 3 or the Perl Artistic License Version 2.0.
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
//
|
//
|
||||||
// THIS MODULE IS PUBLICLY LICENSED
|
// THIS MODULE IS PUBLICLY LICENSED
|
||||||
//
|
//
|
||||||
// Copyright 2001-2013 by Wilson Snyder. This program is free software;
|
// Copyright 2001-2014 by Wilson Snyder. This program is free software;
|
||||||
// you can redistribute it and/or modify it under the terms of either the GNU
|
// you can redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License Version 2.0.
|
// Lesser General Public License Version 3 or the Perl Artistic License Version 2.0.
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2009-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2009-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License.
|
// Lesser General Public License Version 3 or the Perl Artistic License.
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+58
-23
@@ -1,7 +1,7 @@
|
|||||||
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2009-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2009-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License.
|
// Lesser General Public License Version 3 or the Perl Artistic License.
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
// Internal macros
|
// Internal macros
|
||||||
|
|
||||||
#define _VL_VPI_INTERNAL VerilatedVpi::error_info()->setMessage(vpiInternal)->setMessage
|
#define _VL_VPI_INTERNAL VerilatedVpi::error_info()->setMessage(vpiInternal)->setMessage
|
||||||
#define _VL_VPI_SYSTEM VerilatedVpi::error_info()->setMessage(vpiSystem )->setMessage
|
#define _VL_VPI_SYSTEM VerilatedVpi::error_info()->setMessage(vpiSystem )->setMessage
|
||||||
#define _VL_VPI_ERROR VerilatedVpi::error_info()->setMessage(vpiError )->setMessage
|
#define _VL_VPI_ERROR VerilatedVpi::error_info()->setMessage(vpiError )->setMessage
|
||||||
#define _VL_VPI_WARNING VerilatedVpi::error_info()->setMessage(vpiWarning )->setMessage
|
#define _VL_VPI_WARNING VerilatedVpi::error_info()->setMessage(vpiWarning )->setMessage
|
||||||
#define _VL_VPI_NOTICE VerilatedVpi::error_info()->setMessage(vpiNotice )->setMessage
|
#define _VL_VPI_NOTICE VerilatedVpi::error_info()->setMessage(vpiNotice )->setMessage
|
||||||
@@ -52,6 +52,8 @@
|
|||||||
// Implementation
|
// Implementation
|
||||||
|
|
||||||
#include <set>
|
#include <set>
|
||||||
|
#include <list>
|
||||||
|
#include <map>
|
||||||
|
|
||||||
#define VL_DEBUG_IF_PLI VL_DEBUG_IF
|
#define VL_DEBUG_IF_PLI VL_DEBUG_IF
|
||||||
#define VL_VPI_LINE_SIZE 8192
|
#define VL_VPI_LINE_SIZE 8192
|
||||||
@@ -180,6 +182,10 @@ class VerilatedVpioVar : public VerilatedVpio {
|
|||||||
protected:
|
protected:
|
||||||
void* m_varDatap; // varp()->datap() adjusted for array entries
|
void* m_varDatap; // varp()->datap() adjusted for array entries
|
||||||
vlsint32_t m_index;
|
vlsint32_t m_index;
|
||||||
|
const VerilatedRange& get_range() {
|
||||||
|
// Determine number of dimensions and return outermost
|
||||||
|
return (m_varp->dims()>1) ? m_varp->array() : m_varp->range();
|
||||||
|
}
|
||||||
public:
|
public:
|
||||||
VerilatedVpioVar(const VerilatedVar* varp, const VerilatedScope* scopep)
|
VerilatedVpioVar(const VerilatedVar* varp, const VerilatedScope* scopep)
|
||||||
: m_varp(varp), m_scopep(scopep), m_index(0) {
|
: m_varp(varp), m_scopep(scopep), m_index(0) {
|
||||||
@@ -198,10 +204,12 @@ public:
|
|||||||
vluint8_t mask_byte(int idx) { return m_mask.u8[idx & 3]; }
|
vluint8_t mask_byte(int idx) { return m_mask.u8[idx & 3]; }
|
||||||
vluint32_t entSize() const { return m_entSize; }
|
vluint32_t entSize() const { return m_entSize; }
|
||||||
const vluint32_t index() { return m_index; }
|
const vluint32_t index() { return m_index; }
|
||||||
virtual const vluint32_t type() { return (varp()->dims()>1) ? vpiMemory : vpiReg; /* but might be wire, logic */ }
|
virtual const vluint32_t type() {
|
||||||
virtual const vluint32_t size() { return range().elements(); }
|
if (varp()->vldir() != vpiNoDirection) return vpiPort;
|
||||||
const VerilatedRange& range() { return m_varp->dims()?m_varp->array():m_varp->range(); }
|
return (varp()->dims()>1) ? vpiMemory : vpiReg; /* but might be wire, logic */
|
||||||
virtual const VerilatedRange* rangep() { return &range(); }
|
}
|
||||||
|
virtual const vluint32_t size() { return get_range().elements(); }
|
||||||
|
virtual const VerilatedRange* rangep() { return &get_range(); }
|
||||||
virtual const char* name() { return m_varp->name(); }
|
virtual const char* name() { return m_varp->name(); }
|
||||||
virtual const char* fullname() {
|
virtual const char* fullname() {
|
||||||
VL_STATIC_OR_THREAD string out;
|
VL_STATIC_OR_THREAD string out;
|
||||||
@@ -301,7 +309,7 @@ class VerilatedVpiError;
|
|||||||
|
|
||||||
class VerilatedVpi {
|
class VerilatedVpi {
|
||||||
enum { CB_ENUM_MAX_VALUE = cbAtEndOfSimTime+1 }; // Maxium callback reason
|
enum { CB_ENUM_MAX_VALUE = cbAtEndOfSimTime+1 }; // Maxium callback reason
|
||||||
typedef set<VerilatedVpioCb*> VpioCbSet;
|
typedef list<VerilatedVpioCb*> VpioCbList;
|
||||||
typedef set<pair<QData,VerilatedVpioCb*>,VerilatedVpiTimedCbsCmp > VpioTimedCbs;
|
typedef set<pair<QData,VerilatedVpioCb*>,VerilatedVpiTimedCbsCmp > VpioTimedCbs;
|
||||||
|
|
||||||
struct product_info {
|
struct product_info {
|
||||||
@@ -309,7 +317,7 @@ class VerilatedVpi {
|
|||||||
PLI_BYTE8* version;
|
PLI_BYTE8* version;
|
||||||
};
|
};
|
||||||
|
|
||||||
VpioCbSet m_cbObjSets[CB_ENUM_MAX_VALUE]; // Callbacks for each supported reason
|
VpioCbList m_cbObjLists[CB_ENUM_MAX_VALUE]; // Callbacks for each supported reason
|
||||||
VpioTimedCbs m_timedCbs; // Time based callbacks
|
VpioTimedCbs m_timedCbs; // Time based callbacks
|
||||||
VerilatedVpiError* m_errorInfop; // Container for vpi error info
|
VerilatedVpiError* m_errorInfop; // Container for vpi error info
|
||||||
|
|
||||||
@@ -325,16 +333,17 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (VL_UNLIKELY(vop->reason() >= CB_ENUM_MAX_VALUE)) vl_fatal(__FILE__,__LINE__,"", "vpi bb reason too large");
|
if (VL_UNLIKELY(vop->reason() >= CB_ENUM_MAX_VALUE)) vl_fatal(__FILE__,__LINE__,"", "vpi bb reason too large");
|
||||||
s_s.m_cbObjSets[vop->reason()].insert(vop);
|
s_s.m_cbObjLists[vop->reason()].push_back(vop);
|
||||||
}
|
}
|
||||||
static void cbTimedAdd(VerilatedVpioCb* vop) {
|
static void cbTimedAdd(VerilatedVpioCb* vop) {
|
||||||
s_s.m_timedCbs.insert(make_pair(vop->time(), vop));
|
s_s.m_timedCbs.insert(make_pair(vop->time(), vop));
|
||||||
}
|
}
|
||||||
static void cbReasonRemove(VerilatedVpioCb* cbp) {
|
static void cbReasonRemove(VerilatedVpioCb* cbp) {
|
||||||
VpioCbSet& cbObjSet = s_s.m_cbObjSets[cbp->reason()];
|
VpioCbList& cbObjList = s_s.m_cbObjLists[cbp->reason()];
|
||||||
VpioCbSet::iterator it=cbObjSet.find(cbp);
|
// We do not remove it now as we may be iterating the list,
|
||||||
if (VL_LIKELY(it != cbObjSet.end())) {
|
// instead set to NULL and will cleanup later
|
||||||
cbObjSet.erase(it);
|
for (VpioCbList::iterator it=cbObjList.begin(); it!=cbObjList.end(); ++it) {
|
||||||
|
if (*it == cbp) *it = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
static void cbTimedRemove(VerilatedVpioCb* cbp) {
|
static void cbTimedRemove(VerilatedVpioCb* cbp) {
|
||||||
@@ -364,19 +373,26 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
static void callCbs(vluint32_t reason) {
|
static void callCbs(vluint32_t reason) {
|
||||||
VpioCbSet& cbObjSet = s_s.m_cbObjSets[reason];
|
VpioCbList& cbObjList = s_s.m_cbObjLists[reason];
|
||||||
for (VpioCbSet::iterator it=cbObjSet.begin(); it!=cbObjSet.end();) {
|
for (VpioCbList::iterator it=cbObjList.begin(); it!=cbObjList.end();) {
|
||||||
VerilatedVpioCb* vop = *it;
|
if (VL_UNLIKELY(!*it)) { // Deleted earlier, cleanup
|
||||||
++it; // iterator may be deleted by callback
|
it = cbObjList.erase(it);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
VerilatedVpioCb* vop = *it++;
|
||||||
VL_DEBUG_IF_PLI(VL_PRINTF("-vltVpi: reason_callback %d %p\n",reason,vop););
|
VL_DEBUG_IF_PLI(VL_PRINTF("-vltVpi: reason_callback %d %p\n",reason,vop););
|
||||||
(vop->cb_rtnp()) (vop->cb_datap());
|
(vop->cb_rtnp()) (vop->cb_datap());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
static void callValueCbs() {
|
static void callValueCbs() {
|
||||||
VpioCbSet& cbObjSet = s_s.m_cbObjSets[cbValueChange];
|
VpioCbList& cbObjList = s_s.m_cbObjLists[cbValueChange];
|
||||||
for (VpioCbSet::iterator it=cbObjSet.begin(); it!=cbObjSet.end();) {
|
set<VerilatedVpioVar*> update; // set of objects to update after callbacks
|
||||||
VerilatedVpioCb* vop = *it;
|
for (VpioCbList::iterator it=cbObjList.begin(); it!=cbObjList.end();) {
|
||||||
++it; // iterator may be deleted by callback
|
if (VL_UNLIKELY(!*it)) { // Deleted earlier, cleanup
|
||||||
|
it = cbObjList.erase(it);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
VerilatedVpioCb* vop = *it++;
|
||||||
if (VerilatedVpioVar* varop = VerilatedVpioVar::castp(vop->cb_datap()->obj)) {
|
if (VerilatedVpioVar* varop = VerilatedVpioVar::castp(vop->cb_datap()->obj)) {
|
||||||
void* newDatap = varop->varDatap();
|
void* newDatap = varop->varDatap();
|
||||||
void* prevDatap = varop->prevDatap(); // Was malloced when we added the callback
|
void* prevDatap = varop->prevDatap(); // Was malloced when we added the callback
|
||||||
@@ -386,12 +402,15 @@ public:
|
|||||||
if (memcmp(prevDatap, newDatap, varop->entSize())) {
|
if (memcmp(prevDatap, newDatap, varop->entSize())) {
|
||||||
VL_DEBUG_IF_PLI(VL_PRINTF("-vltVpi: value_callback %p %s v[0]=%d\n",
|
VL_DEBUG_IF_PLI(VL_PRINTF("-vltVpi: value_callback %p %s v[0]=%d\n",
|
||||||
vop,varop->fullname(), *((CData*)newDatap)););
|
vop,varop->fullname(), *((CData*)newDatap)););
|
||||||
memcpy(prevDatap, newDatap, varop->entSize());
|
update.insert(varop);
|
||||||
vpi_get_value(vop->cb_datap()->obj, vop->cb_datap()->value);
|
vpi_get_value(vop->cb_datap()->obj, vop->cb_datap()->value);
|
||||||
(vop->cb_rtnp()) (vop->cb_datap());
|
(vop->cb_rtnp()) (vop->cb_datap());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for (set<VerilatedVpioVar*>::iterator it=update.begin(); it!=update.end(); it++ ) {
|
||||||
|
memcpy((*it)->prevDatap(), (*it)->varDatap(), (*it)->entSize());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static VerilatedVpiError* error_info(); // getter for vpi error info
|
static VerilatedVpiError* error_info(); // getter for vpi error info
|
||||||
@@ -1006,6 +1025,8 @@ void vpi_get_value(vpiHandle object, p_vpi_value value_p) {
|
|||||||
VL_FUNC, VerilatedVpiError::strFromVpiVal(value_p->format), vop->fullname());
|
VL_FUNC, VerilatedVpiError::strFromVpiVal(value_p->format), vop->fullname());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
} else if (value_p->format == vpiSuppressVal) {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
_VL_VPI_ERROR(__FILE__, __LINE__, "%s: Unsupported format (%s) as requested for %s",
|
_VL_VPI_ERROR(__FILE__, __LINE__, "%s: Unsupported format (%s) as requested for %s",
|
||||||
VL_FUNC, VerilatedVpiError::strFromVpiVal(value_p->format), vop->fullname());
|
VL_FUNC, VerilatedVpiError::strFromVpiVal(value_p->format), vop->fullname());
|
||||||
@@ -1297,7 +1318,21 @@ void vpi_put_value_array(vpiHandle object, p_vpi_arrayvalue arrayvalue_p,
|
|||||||
// time processing
|
// time processing
|
||||||
|
|
||||||
void vpi_get_time(vpiHandle object, p_vpi_time time_p) {
|
void vpi_get_time(vpiHandle object, p_vpi_time time_p) {
|
||||||
_VL_VPI_UNIMP(); return;
|
if (VL_UNLIKELY(!time_p)) {
|
||||||
|
_VL_VPI_WARNING(__FILE__, __LINE__, "Ignoring vpi_get_time with NULL value pointer");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (time_p->type == vpiSimTime) {
|
||||||
|
QData qtime = VL_TIME_Q();
|
||||||
|
IData itime[2];
|
||||||
|
VL_SET_WQ(itime, qtime);
|
||||||
|
time_p->low = itime[0];
|
||||||
|
time_p->high = itime[1];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_VL_VPI_ERROR(__FILE__, __LINE__, "%s: Unsupported type (%d)",
|
||||||
|
VL_FUNC, time_p->type);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// I/O routines
|
// I/O routines
|
||||||
|
|||||||
+10
-1
@@ -1,7 +1,7 @@
|
|||||||
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License.
|
// Lesser General Public License Version 3 or the Perl Artistic License.
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
@@ -189,6 +189,15 @@ typedef unsigned long long vluint64_t; ///< 64-bit unsigned type
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//=========================================================================
|
||||||
|
// File system functions
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
# define VL_DEV_NULL "nul"
|
||||||
|
#else // Linux or compliant Unix flavors
|
||||||
|
# define VL_DEV_NULL "/dev/null"
|
||||||
|
#endif
|
||||||
|
|
||||||
//=========================================================================
|
//=========================================================================
|
||||||
// Integer size macros
|
// Integer size macros
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -748,7 +748,7 @@ in C<src/Makefile_obj.in> and reconfigure.
|
|||||||
|
|
||||||
The latest version is available from L<http://www.veripool.org/>.
|
The latest version is available from L<http://www.veripool.org/>.
|
||||||
|
|
||||||
Copyright 2008-2013 by Wilson Snyder. Verilator is free software; you can
|
Copyright 2008-2014 by Wilson Snyder. Verilator is free software; you can
|
||||||
redistribute it and/or modify it under the terms of either the GNU Lesser
|
redistribute it and/or modify it under the terms of either the GNU Lesser
|
||||||
General Public License Version 3 or the Perl Artistic License Version 2.0.
|
General Public License Version 3 or the Perl Artistic License Version 2.0.
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/perl -w
|
#!/usr/bin/perl -w
|
||||||
######################################################################
|
######################################################################
|
||||||
#
|
#
|
||||||
# Copyright 2007-2013 by Wilson Snyder. This package is free software; you
|
# Copyright 2007-2014 by Wilson Snyder. This package is free software; you
|
||||||
# can redistribute it and/or modify it under the terms of either the GNU
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
# Lesser General Public License Version 3 or the Perl Artistic License
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
# Version 2.0.
|
# Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/perl -w
|
#!/usr/bin/perl -w
|
||||||
######################################################################
|
######################################################################
|
||||||
#
|
#
|
||||||
# Copyright 2007-2013 by Wilson Snyder. This package is free software; you
|
# Copyright 2007-2014 by Wilson Snyder. This package is free software; you
|
||||||
# can redistribute it and/or modify it under the terms of either the GNU
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
# Lesser General Public License Version 3 or the Perl Artistic License
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
# Version 2.0.
|
# Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -143,7 +143,7 @@ Displays this message and program version and exits.
|
|||||||
|
|
||||||
=head1 DISTRIBUTION
|
=head1 DISTRIBUTION
|
||||||
|
|
||||||
Copyright 2005-2013 by Wilson Snyder. Verilator is free software; you can
|
Copyright 2005-2014 by Wilson Snyder. Verilator is free software; you can
|
||||||
redistribute it and/or modify it under the terms of either the GNU Lesser
|
redistribute it and/or modify it under the terms of either the GNU Lesser
|
||||||
General Public License Version 3 or the Perl Artistic License Version 2.0.
|
General Public License Version 3 or the Perl Artistic License Version 2.0.
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -184,7 +184,7 @@ Displays this message and program version and exits.
|
|||||||
|
|
||||||
=head1 DISTRIBUTION
|
=head1 DISTRIBUTION
|
||||||
|
|
||||||
Copyright 2005-2013 by Wilson Snyder. Verilator is free software; you can
|
Copyright 2005-2014 by Wilson Snyder. Verilator is free software; you can
|
||||||
redistribute it and/or modify it under the terms of either the GNU Lesser
|
redistribute it and/or modify it under the terms of either the GNU Lesser
|
||||||
General Public License Version 3 or the Perl Artistic License Version 2.0.
|
General Public License Version 3 or the Perl Artistic License Version 2.0.
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/perl -w
|
#!/usr/bin/perl -w
|
||||||
######################################################################
|
######################################################################
|
||||||
#
|
#
|
||||||
# Copyright 2007-2013 by Wilson Snyder. This package is free software; you
|
# Copyright 2007-2014 by Wilson Snyder. This package is free software; you
|
||||||
# can redistribute it and/or modify it under the terms of either the GNU
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
# Lesser General Public License Version 3 or the Perl Artistic License
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
# Version 2.0.
|
# Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -183,7 +183,7 @@ Runs a specific test stage (see the script).
|
|||||||
|
|
||||||
=head1 DISTRIBUTION
|
=head1 DISTRIBUTION
|
||||||
|
|
||||||
Copyright 2009-2013 by Wilson Snyder. This package is free software; you
|
Copyright 2009-2014 by Wilson Snyder. This package is free software; you
|
||||||
can redistribute it and/or modify it under the terms of either the GNU
|
can redistribute it and/or modify it under the terms of either the GNU
|
||||||
Lesser General Public License Version 3 or the Perl Artistic License
|
Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
Version 2.0.
|
Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -28,7 +28,7 @@ invoke_atsim - Invoke tool under "modules" command
|
|||||||
|
|
||||||
=head1 DISTRIBUTION
|
=head1 DISTRIBUTION
|
||||||
|
|
||||||
Copyright 2005-2013 by Wilson Snyder. This package is free software; you
|
Copyright 2005-2014 by Wilson Snyder. This package is free software; you
|
||||||
can redistribute it and/or modify it under the terms of either the GNU
|
can redistribute it and/or modify it under the terms of either the GNU
|
||||||
Lesser General Public License Version 3 or the Perl Artistic License
|
Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
Version 2.0.
|
Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -28,7 +28,7 @@ invoke_iccr - Invoke tool under "modules" command
|
|||||||
|
|
||||||
=head1 DISTRIBUTION
|
=head1 DISTRIBUTION
|
||||||
|
|
||||||
Copyright 2007-2013 by Wilson Snyder. This package is free software; you
|
Copyright 2007-2014 by Wilson Snyder. This package is free software; you
|
||||||
can redistribute it and/or modify it under the terms of either the GNU
|
can redistribute it and/or modify it under the terms of either the GNU
|
||||||
Lesser General Public License Version 3 or the Perl Artistic License
|
Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
Version 2.0.
|
Version 2.0.
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ invoke_ncverilog - Invoke tool under "modules" command
|
|||||||
|
|
||||||
=head1 DISTRIBUTION
|
=head1 DISTRIBUTION
|
||||||
|
|
||||||
Copyright 2005-2013 by Wilson Snyder. This package is free software; you
|
Copyright 2005-2014 by Wilson Snyder. This package is free software; you
|
||||||
can redistribute it and/or modify it under the terms of either the GNU
|
can redistribute it and/or modify it under the terms of either the GNU
|
||||||
Lesser General Public License Version 3 or the Perl Artistic License
|
Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
Version 2.0.
|
Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -28,7 +28,7 @@ invoke_vcs - Invoke tool under "modules" command
|
|||||||
|
|
||||||
=head1 DISTRIBUTION
|
=head1 DISTRIBUTION
|
||||||
|
|
||||||
Copyright 2005-2013 by Wilson Snyder. This package is free software; you
|
Copyright 2005-2014 by Wilson Snyder. This package is free software; you
|
||||||
can redistribute it and/or modify it under the terms of either the GNU
|
can redistribute it and/or modify it under the terms of either the GNU
|
||||||
Lesser General Public License Version 3 or the Perl Artistic License
|
Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
Version 2.0.
|
Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/perl -w
|
#!/usr/bin/perl -w
|
||||||
######################################################################
|
######################################################################
|
||||||
#
|
#
|
||||||
# Copyright 2010-2013 by Wilson Snyder. This package is free software; you
|
# Copyright 2010-2014 by Wilson Snyder. This package is free software; you
|
||||||
# can redistribute it and/or modify it under the terms of either the GNU
|
# can redistribute it and/or modify it under the terms of either the GNU
|
||||||
# Lesser General Public License Version 3 or the Perl Artistic License
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
# Version 2.0.
|
# Version 2.0.
|
||||||
|
|||||||
@@ -331,7 +331,7 @@ Displays this message and program version and exits.
|
|||||||
|
|
||||||
=head1 DISTRIBUTION
|
=head1 DISTRIBUTION
|
||||||
|
|
||||||
Copyright 2005-2013 by Wilson Snyder. Verilator is free software; you can
|
Copyright 2005-2014 by Wilson Snyder. Verilator is free software; you can
|
||||||
redistribute it and/or modify it under the terms of either the GNU Lesser
|
redistribute it and/or modify it under the terms of either the GNU Lesser
|
||||||
General Public License Version 3 or the Perl Artistic License Version 2.0.
|
General Public License Version 3 or the Perl Artistic License Version 2.0.
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -9,7 +9,7 @@ This is the Verilator Package README file.
|
|||||||
|
|
||||||
=head1 DISTRIBUTION
|
=head1 DISTRIBUTION
|
||||||
|
|
||||||
This package is Copyright 2003-2013 by Wilson Snyder. (Report bugs to
|
This package is Copyright 2003-2014 by Wilson Snyder. (Report bugs to
|
||||||
L<http://www.veripool.org/>.)
|
L<http://www.veripool.org/>.)
|
||||||
|
|
||||||
Verilator is free software; you can redistribute it and/or modify it under
|
Verilator is free software; you can redistribute it and/or modify it under
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
# DESCRIPTION: Verilator: GDB startup file with useful defines
|
# DESCRIPTION: Verilator: GDB startup file with useful defines
|
||||||
#
|
#
|
||||||
# Copyright 2012-2013 by Wilson Snyder. This program is free software; you can
|
# Copyright 2012-2014 by Wilson Snyder. This program is free software; you can
|
||||||
# redistribute it and/or modify it under the terms of either the GNU
|
# redistribute it and/or modify it under the terms of either the GNU
|
||||||
# Lesser General Public License Version 3 or the Perl Artistic License
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
# Version 2.0.
|
# Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -7,7 +7,7 @@
|
|||||||
#
|
#
|
||||||
#*****************************************************************************
|
#*****************************************************************************
|
||||||
#
|
#
|
||||||
# Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
# Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
# redistribute it and/or modify it under the terms of either the GNU
|
# redistribute it and/or modify it under the terms of either the GNU
|
||||||
# Lesser General Public License Version 3 or the Perl Artistic License
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
# Version 2.0.
|
# Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -7,7 +7,7 @@
|
|||||||
#
|
#
|
||||||
#*****************************************************************************
|
#*****************************************************************************
|
||||||
#
|
#
|
||||||
# Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
# Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
# redistribute it and/or modify it under the terms of either the GNU
|
# redistribute it and/or modify it under the terms of either the GNU
|
||||||
# Lesser General Public License Version 3 or the Perl Artistic License
|
# Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
# Version 2.0.
|
# Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2005-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2005-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2005-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2005-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2005-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2005-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2005-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2005-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+3
-3
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
@@ -1016,8 +1016,8 @@ void AstNode::dumpTreeAndNext(ostream& os, const string& indent, int maxDepth) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AstNode::dumpTreeFile(const string& filename, bool append) {
|
void AstNode::dumpTreeFile(const string& filename, bool append, bool doDump) {
|
||||||
if (v3Global.opt.dumpTree()) {
|
if (v3Global.opt.dumpTree() && doDump) {
|
||||||
{ // Write log & close
|
{ // Write log & close
|
||||||
UINFO(2,"Dumping "<<filename<<endl);
|
UINFO(2,"Dumping "<<filename<<endl);
|
||||||
const auto_ptr<ofstream> logsp (V3File::new_ofstream(filename, append));
|
const auto_ptr<ofstream> logsp (V3File::new_ofstream(filename, append));
|
||||||
|
|||||||
+6
-2
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
@@ -1160,7 +1160,7 @@ public:
|
|||||||
void dumpTree(const string& indent, int maxDepth=0) { dumpTree(cout,indent,maxDepth); }
|
void dumpTree(const string& indent, int maxDepth=0) { dumpTree(cout,indent,maxDepth); }
|
||||||
void dumpTreeGdb(); // For GDB only
|
void dumpTreeGdb(); // For GDB only
|
||||||
void dumpTreeAndNext(ostream& str=cout, const string& indent=" ", int maxDepth=0);
|
void dumpTreeAndNext(ostream& str=cout, const string& indent=" ", int maxDepth=0);
|
||||||
void dumpTreeFile(const string& filename, bool append=false);
|
void dumpTreeFile(const string& filename, bool append=false, bool doDump=true);
|
||||||
static void dumpTreeFileGdb(const char* filenamep=NULL);
|
static void dumpTreeFileGdb(const char* filenamep=NULL);
|
||||||
|
|
||||||
// METHODS - queries
|
// METHODS - queries
|
||||||
@@ -1542,6 +1542,7 @@ public:
|
|||||||
virtual bool hasDType() const { return true; }
|
virtual bool hasDType() const { return true; }
|
||||||
virtual AstBasicDType* basicp() const = 0; // (Slow) recurse down to find basic data type
|
virtual AstBasicDType* basicp() const = 0; // (Slow) recurse down to find basic data type
|
||||||
virtual AstNodeDType* skipRefp() const = 0; // recurses over typedefs to next non-typeref type
|
virtual AstNodeDType* skipRefp() const = 0; // recurses over typedefs to next non-typeref type
|
||||||
|
virtual AstNodeDType* skipRefToConstp() const = 0; // recurses over typedefs to next non-typeref-or-const type
|
||||||
virtual int widthAlignBytes() const = 0; // (Slow) recurses - Structure alignment 1,2,4 or 8 bytes (arrays affect this)
|
virtual int widthAlignBytes() const = 0; // (Slow) recurses - Structure alignment 1,2,4 or 8 bytes (arrays affect this)
|
||||||
virtual int widthTotalBytes() const = 0; // (Slow) recurses - Width in bytes rounding up 1,2,4,8,12,...
|
virtual int widthTotalBytes() const = 0; // (Slow) recurses - Width in bytes rounding up 1,2,4,8,12,...
|
||||||
virtual bool maybePointedTo() const { return true; }
|
virtual bool maybePointedTo() const { return true; }
|
||||||
@@ -1591,12 +1592,14 @@ public:
|
|||||||
// For basicp() we reuse the size to indicate a "fake" basic type of same size
|
// For basicp() we reuse the size to indicate a "fake" basic type of same size
|
||||||
virtual AstBasicDType* basicp() const { return findLogicDType(width(),width(),numeric())->castBasicDType(); }
|
virtual AstBasicDType* basicp() const { return findLogicDType(width(),width(),numeric())->castBasicDType(); }
|
||||||
virtual AstNodeDType* skipRefp() const { return (AstNodeDType*)this; }
|
virtual AstNodeDType* skipRefp() const { return (AstNodeDType*)this; }
|
||||||
|
virtual AstNodeDType* skipRefToConstp() const { return (AstNodeDType*)this; }
|
||||||
virtual int widthAlignBytes() const; // (Slow) recurses - Structure alignment 1,2,4 or 8 bytes (arrays affect this)
|
virtual int widthAlignBytes() const; // (Slow) recurses - Structure alignment 1,2,4 or 8 bytes (arrays affect this)
|
||||||
virtual int widthTotalBytes() const; // (Slow) recurses - Width in bytes rounding up 1,2,4,8,12,...
|
virtual int widthTotalBytes() const; // (Slow) recurses - Width in bytes rounding up 1,2,4,8,12,...
|
||||||
// op1 = members
|
// op1 = members
|
||||||
AstMemberDType* membersp() const { return op1p()->castMemberDType(); } // op1 = AstMember list
|
AstMemberDType* membersp() const { return op1p()->castMemberDType(); } // op1 = AstMember list
|
||||||
void addMembersp(AstNode* nodep) { addNOp1p(nodep); }
|
void addMembersp(AstNode* nodep) { addNOp1p(nodep); }
|
||||||
bool packed() const { return m_packed; }
|
bool packed() const { return m_packed; }
|
||||||
|
bool packedUnsup() const { return true; } // packed() but as don't support unpacked, presently all structs
|
||||||
void clearCache() { m_members.clear(); }
|
void clearCache() { m_members.clear(); }
|
||||||
void repairMemberCache();
|
void repairMemberCache();
|
||||||
AstMemberDType* findMember(const string& name) const {
|
AstMemberDType* findMember(const string& name) const {
|
||||||
@@ -1645,6 +1648,7 @@ public:
|
|||||||
// METHODS
|
// METHODS
|
||||||
virtual AstBasicDType* basicp() const { return subDTypep()->basicp(); } // (Slow) recurse down to find basic data type
|
virtual AstBasicDType* basicp() const { return subDTypep()->basicp(); } // (Slow) recurse down to find basic data type
|
||||||
virtual AstNodeDType* skipRefp() const { return (AstNodeDType*)this; }
|
virtual AstNodeDType* skipRefp() const { return (AstNodeDType*)this; }
|
||||||
|
virtual AstNodeDType* skipRefToConstp() const { return (AstNodeDType*)this; }
|
||||||
virtual int widthAlignBytes() const { return subDTypep()->widthAlignBytes(); }
|
virtual int widthAlignBytes() const { return subDTypep()->widthAlignBytes(); }
|
||||||
virtual int widthTotalBytes() const { return elementsConst() * subDTypep()->widthTotalBytes(); }
|
virtual int widthTotalBytes() const { return elementsConst() * subDTypep()->widthTotalBytes(); }
|
||||||
int msb() const;
|
int msb() const;
|
||||||
|
|||||||
+8
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
@@ -753,6 +753,13 @@ void AstJumpGo::dump(ostream& str) {
|
|||||||
if (labelp()) { labelp()->dump(str); }
|
if (labelp()) { labelp()->dump(str); }
|
||||||
else { str<<"%Error:UNLINKED"; }
|
else { str<<"%Error:UNLINKED"; }
|
||||||
}
|
}
|
||||||
|
void AstModportFTaskRef::dump(ostream& str) {
|
||||||
|
this->AstNode::dump(str);
|
||||||
|
if (isExport()) str<<" EXPORT";
|
||||||
|
if (isImport()) str<<" IMPORT";
|
||||||
|
if (ftaskp()) { str<<" -> "; ftaskp()->dump(str); }
|
||||||
|
else { str<<" -> UNLINKED"; }
|
||||||
|
}
|
||||||
void AstModportVarRef::dump(ostream& str) {
|
void AstModportVarRef::dump(ostream& str) {
|
||||||
this->AstNode::dump(str);
|
this->AstNode::dump(str);
|
||||||
str<<" "<<varType();
|
str<<" "<<varType();
|
||||||
|
|||||||
+59
-36
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
@@ -227,6 +227,7 @@ public:
|
|||||||
AstNodeDType* dtypeSkipRefp() const { return dtypep()->skipRefp(); } // op1 = Range of variable
|
AstNodeDType* dtypeSkipRefp() const { return dtypep()->skipRefp(); } // op1 = Range of variable
|
||||||
virtual AstBasicDType* basicp() const { return subDTypep()->basicp(); } // (Slow) recurse down to find basic data type
|
virtual AstBasicDType* basicp() const { return subDTypep()->basicp(); } // (Slow) recurse down to find basic data type
|
||||||
virtual AstNodeDType* skipRefp() const { return (AstNodeDType*)this; }
|
virtual AstNodeDType* skipRefp() const { return (AstNodeDType*)this; }
|
||||||
|
virtual AstNodeDType* skipRefToConstp() const { return (AstNodeDType*)this; }
|
||||||
virtual int widthAlignBytes() const { return dtypep()->widthAlignBytes(); }
|
virtual int widthAlignBytes() const { return dtypep()->widthAlignBytes(); }
|
||||||
virtual int widthTotalBytes() const { return dtypep()->widthTotalBytes(); }
|
virtual int widthTotalBytes() const { return dtypep()->widthTotalBytes(); }
|
||||||
virtual string name() const { return m_name; }
|
virtual string name() const { return m_name; }
|
||||||
@@ -368,6 +369,7 @@ public:
|
|||||||
// METHODS
|
// METHODS
|
||||||
virtual AstBasicDType* basicp() const { return (AstBasicDType*)this; } // (Slow) recurse down to find basic data type
|
virtual AstBasicDType* basicp() const { return (AstBasicDType*)this; } // (Slow) recurse down to find basic data type
|
||||||
virtual AstNodeDType* skipRefp() const { return (AstNodeDType*)this; }
|
virtual AstNodeDType* skipRefp() const { return (AstNodeDType*)this; }
|
||||||
|
virtual AstNodeDType* skipRefToConstp() const { return (AstNodeDType*)this; }
|
||||||
virtual int widthAlignBytes() const; // (Slow) recurses - Structure alignment 1,2,4 or 8 bytes (arrays affect this)
|
virtual int widthAlignBytes() const; // (Slow) recurses - Structure alignment 1,2,4 or 8 bytes (arrays affect this)
|
||||||
virtual int widthTotalBytes() const; // (Slow) recurses - Width in bytes rounding up 1,2,4,8,12,...
|
virtual int widthTotalBytes() const; // (Slow) recurses - Width in bytes rounding up 1,2,4,8,12,...
|
||||||
AstBasicDTypeKwd keyword() const { return m.m_keyword; } // Avoid using - use isSomething accessors instead
|
AstBasicDTypeKwd keyword() const { return m.m_keyword; } // Avoid using - use isSomething accessors instead
|
||||||
@@ -427,7 +429,8 @@ public:
|
|||||||
virtual void virtRefDTypep(AstNodeDType* nodep) { refDTypep(nodep); }
|
virtual void virtRefDTypep(AstNodeDType* nodep) { refDTypep(nodep); }
|
||||||
// METHODS
|
// METHODS
|
||||||
virtual AstBasicDType* basicp() const { return subDTypep()->basicp(); } // (Slow) recurse down to find basic data type
|
virtual AstBasicDType* basicp() const { return subDTypep()->basicp(); } // (Slow) recurse down to find basic data type
|
||||||
virtual AstNodeDType* skipRefp() const { return (AstNodeDType*)this; }
|
virtual AstNodeDType* skipRefp() const { return subDTypep()->skipRefp(); }
|
||||||
|
virtual AstNodeDType* skipRefToConstp() const { return (AstNodeDType*)this; }
|
||||||
virtual int widthAlignBytes() const { return subDTypep()->widthAlignBytes(); }
|
virtual int widthAlignBytes() const { return subDTypep()->widthAlignBytes(); }
|
||||||
virtual int widthTotalBytes() const { return subDTypep()->widthTotalBytes(); }
|
virtual int widthTotalBytes() const { return subDTypep()->widthTotalBytes(); }
|
||||||
};
|
};
|
||||||
@@ -456,6 +459,7 @@ public:
|
|||||||
virtual void cloneRelink();
|
virtual void cloneRelink();
|
||||||
virtual AstBasicDType* basicp() const { return NULL; }
|
virtual AstBasicDType* basicp() const { return NULL; }
|
||||||
virtual AstNodeDType* skipRefp() const { return (AstNodeDType*)this; }
|
virtual AstNodeDType* skipRefp() const { return (AstNodeDType*)this; }
|
||||||
|
virtual AstNodeDType* skipRefToConstp() const { return (AstNodeDType*)this; }
|
||||||
virtual int widthAlignBytes() const { return 1; }
|
virtual int widthAlignBytes() const { return 1; }
|
||||||
virtual int widthTotalBytes() const { return 1; }
|
virtual int widthTotalBytes() const { return 1; }
|
||||||
string cellName() const { return m_cellName; }
|
string cellName() const { return m_cellName; }
|
||||||
@@ -506,6 +510,10 @@ public:
|
|||||||
if (defp()) return defp()->skipRefp();
|
if (defp()) return defp()->skipRefp();
|
||||||
else { v3fatalSrc("Typedef not linked"); return NULL; }
|
else { v3fatalSrc("Typedef not linked"); return NULL; }
|
||||||
}
|
}
|
||||||
|
virtual AstNodeDType* skipRefToConstp() const {
|
||||||
|
if (defp()) return defp()->skipRefToConstp();
|
||||||
|
else { v3fatalSrc("Typedef not linked"); return NULL; }
|
||||||
|
}
|
||||||
virtual int widthAlignBytes() const { return dtypeSkipRefp()->widthAlignBytes(); }
|
virtual int widthAlignBytes() const { return dtypeSkipRefp()->widthAlignBytes(); }
|
||||||
virtual int widthTotalBytes() const { return dtypeSkipRefp()->widthTotalBytes(); }
|
virtual int widthTotalBytes() const { return dtypeSkipRefp()->widthTotalBytes(); }
|
||||||
void name(const string& flag) { m_name = flag; }
|
void name(const string& flag) { m_name = flag; }
|
||||||
@@ -573,7 +581,8 @@ public:
|
|||||||
//
|
//
|
||||||
virtual AstBasicDType* basicp() const { return subDTypep()->basicp(); } // (Slow) recurse down to find basic data type (Note don't need virtual - AstVar isn't a NodeDType)
|
virtual AstBasicDType* basicp() const { return subDTypep()->basicp(); } // (Slow) recurse down to find basic data type (Note don't need virtual - AstVar isn't a NodeDType)
|
||||||
AstNodeDType* dtypeSkipRefp() const { return subDTypep()->skipRefp(); } // op1 = Range of variable (Note don't need virtual - AstVar isn't a NodeDType)
|
AstNodeDType* dtypeSkipRefp() const { return subDTypep()->skipRefp(); } // op1 = Range of variable (Note don't need virtual - AstVar isn't a NodeDType)
|
||||||
virtual AstNodeDType* skipRefp() const { return dtypeSkipRefp(); }
|
virtual AstNodeDType* skipRefp() const { return subDTypep()->skipRefp(); }
|
||||||
|
virtual AstNodeDType* skipRefToConstp() const { return subDTypep()->skipRefToConstp(); }
|
||||||
virtual int widthAlignBytes() const { return subDTypep()->widthAlignBytes(); } // (Slow) recurses - Structure alignment 1,2,4 or 8 bytes (arrays affect this)
|
virtual int widthAlignBytes() const { return subDTypep()->widthAlignBytes(); } // (Slow) recurses - Structure alignment 1,2,4 or 8 bytes (arrays affect this)
|
||||||
virtual int widthTotalBytes() const { return subDTypep()->widthTotalBytes(); } // (Slow) recurses - Width in bytes rounding up 1,2,4,8,12,...
|
virtual int widthTotalBytes() const { return subDTypep()->widthTotalBytes(); } // (Slow) recurses - Width in bytes rounding up 1,2,4,8,12,...
|
||||||
// METHODS
|
// METHODS
|
||||||
@@ -662,6 +671,7 @@ public:
|
|||||||
// METHODS
|
// METHODS
|
||||||
virtual AstBasicDType* basicp() const { return subDTypep()->basicp(); } // (Slow) recurse down to find basic data type
|
virtual AstBasicDType* basicp() const { return subDTypep()->basicp(); } // (Slow) recurse down to find basic data type
|
||||||
virtual AstNodeDType* skipRefp() const { return subDTypep()->skipRefp(); }
|
virtual AstNodeDType* skipRefp() const { return subDTypep()->skipRefp(); }
|
||||||
|
virtual AstNodeDType* skipRefToConstp() const { return subDTypep()->skipRefToConstp(); }
|
||||||
virtual int widthAlignBytes() const { return subDTypep()->widthAlignBytes(); }
|
virtual int widthAlignBytes() const { return subDTypep()->widthAlignBytes(); }
|
||||||
virtual int widthTotalBytes() const { return subDTypep()->widthTotalBytes(); }
|
virtual int widthTotalBytes() const { return subDTypep()->widthTotalBytes(); }
|
||||||
};
|
};
|
||||||
@@ -675,9 +685,9 @@ private:
|
|||||||
unsigned m_start;
|
unsigned m_start;
|
||||||
unsigned m_length;
|
unsigned m_length;
|
||||||
void init(AstNode* fromp) {
|
void init(AstNode* fromp) {
|
||||||
if (fromp && fromp->dtypep()->castNodeArrayDType()) {
|
if (fromp && fromp->dtypep()->skipRefp()->castNodeArrayDType()) {
|
||||||
// Strip off array to find what array references
|
// Strip off array to find what array references
|
||||||
dtypeFrom(fromp->dtypep()->castNodeArrayDType()->subDTypep());
|
dtypeFrom(fromp->dtypep()->skipRefp()->castNodeArrayDType()->subDTypep());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public:
|
public:
|
||||||
@@ -961,7 +971,7 @@ public:
|
|||||||
void combineType(AstVarType type);
|
void combineType(AstVarType type);
|
||||||
AstNodeDType* getChildDTypep() const { return childDTypep(); }
|
AstNodeDType* getChildDTypep() const { return childDTypep(); }
|
||||||
AstNodeDType* childDTypep() const { return op1p()->castNodeDType(); } // op1 = Range of variable
|
AstNodeDType* childDTypep() const { return op1p()->castNodeDType(); } // op1 = Range of variable
|
||||||
AstNodeDType* dtypeSkipRefp() const { return subDTypep()->skipRefp(); } // op1 = Range of variable (Note don't need virtual - AstVar isn't a NodeDType)
|
AstNodeDType* dtypeSkipRefp() const { return subDTypep()->skipRefp(); }
|
||||||
AstBasicDType* basicp() const { return subDTypep()->basicp(); } // (Slow) recurse down to find basic data type (Note don't need virtual - AstVar isn't a NodeDType)
|
AstBasicDType* basicp() const { return subDTypep()->basicp(); } // (Slow) recurse down to find basic data type (Note don't need virtual - AstVar isn't a NodeDType)
|
||||||
AstNode* valuep() const { return op3p()->castNode(); } // op3 = Initial value that never changes (static const)
|
AstNode* valuep() const { return op3p()->castNode(); } // op3 = Initial value that never changes (static const)
|
||||||
void valuep(AstNode* nodep) { setOp3p(nodep); } // It's valuep, not constp, as may be more complicated than an AstConst
|
void valuep(AstNode* nodep) { setOp3p(nodep); } // It's valuep, not constp, as may be more complicated than an AstConst
|
||||||
@@ -1263,17 +1273,18 @@ private:
|
|||||||
int m_pinNum; // Pin number
|
int m_pinNum; // Pin number
|
||||||
string m_name; // Pin name, or "" for number based interconnect
|
string m_name; // Pin name, or "" for number based interconnect
|
||||||
AstVar* m_modVarp; // Input/output this pin connects to on submodule.
|
AstVar* m_modVarp; // Input/output this pin connects to on submodule.
|
||||||
|
bool m_param; // Pin connects to parameter
|
||||||
bool m_svImplicit; // Pin is SystemVerilog .name'ed
|
bool m_svImplicit; // Pin is SystemVerilog .name'ed
|
||||||
public:
|
public:
|
||||||
AstPin(FileLine* fl, int pinNum, const string& name, AstNode* exprp)
|
AstPin(FileLine* fl, int pinNum, const string& name, AstNode* exprp)
|
||||||
:AstNode(fl)
|
:AstNode(fl)
|
||||||
,m_name(name), m_svImplicit(false) {
|
,m_name(name), m_param(false), m_svImplicit(false) {
|
||||||
m_pinNum = pinNum;
|
m_pinNum = pinNum;
|
||||||
m_modVarp = NULL;
|
m_modVarp = NULL;
|
||||||
setNOp1p(exprp);
|
setNOp1p(exprp);
|
||||||
}
|
}
|
||||||
AstPin(FileLine* fl, int pinNum, AstVarRef* varname, AstNode* exprp)
|
AstPin(FileLine* fl, int pinNum, AstVarRef* varname, AstNode* exprp)
|
||||||
:AstNode(fl), m_svImplicit(false) {
|
:AstNode(fl), m_param(false), m_svImplicit(false) {
|
||||||
m_name = varname->name();
|
m_name = varname->name();
|
||||||
m_pinNum = pinNum;
|
m_pinNum = pinNum;
|
||||||
m_modVarp = NULL;
|
m_modVarp = NULL;
|
||||||
@@ -1290,7 +1301,9 @@ public:
|
|||||||
AstNode* exprp() const { return op1p()->castNode(); } // op1 = Expression connected to pin, NULL if unconnected
|
AstNode* exprp() const { return op1p()->castNode(); } // op1 = Expression connected to pin, NULL if unconnected
|
||||||
AstVar* modVarp() const { return m_modVarp; } // [After Link] Pointer to variable
|
AstVar* modVarp() const { return m_modVarp; } // [After Link] Pointer to variable
|
||||||
void modVarp(AstVar* varp) { m_modVarp=varp; }
|
void modVarp(AstVar* varp) { m_modVarp=varp; }
|
||||||
bool svImplicit() const { return m_svImplicit; }
|
bool param() const { return m_param; }
|
||||||
|
void param(bool flag) { m_param=flag; }
|
||||||
|
bool svImplicit() const { return m_svImplicit; }
|
||||||
void svImplicit(bool flag) { m_svImplicit=flag; }
|
void svImplicit(bool flag) { m_svImplicit=flag; }
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1371,10 +1384,32 @@ struct AstIface : public AstNodeModule {
|
|||||||
ASTNODE_NODE_FUNCS(Iface, IFACE)
|
ASTNODE_NODE_FUNCS(Iface, IFACE)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct AstModportFTaskRef : public AstNode {
|
||||||
|
// An import/export referenced under a modport
|
||||||
|
// The storage for the function itself is inside the interface/instantiator, thus this is a reference
|
||||||
|
// PARENT: AstModport
|
||||||
|
private:
|
||||||
|
string m_name; // Name of the variable referenced
|
||||||
|
bool m_export; // Type of the function (import/export)
|
||||||
|
AstNodeFTask* m_ftaskp; // Link to the function
|
||||||
|
public:
|
||||||
|
AstModportFTaskRef(FileLine* fl, const string& name, bool isExport)
|
||||||
|
: AstNode(fl), m_name(name), m_export(isExport), m_ftaskp(NULL) { }
|
||||||
|
ASTNODE_NODE_FUNCS(ModportFTaskRef, MODPORTFTASKREF)
|
||||||
|
virtual const char* broken() const { BROKEN_RTN(m_ftaskp && !m_ftaskp->brokeExists()); return NULL; }
|
||||||
|
virtual void dump(ostream& str);
|
||||||
|
virtual string name() const { return m_name; }
|
||||||
|
virtual void cloneRelink() { if (m_ftaskp && m_ftaskp->clonep()) m_ftaskp = m_ftaskp->clonep()->castNodeFTask(); }
|
||||||
|
bool isImport() const { return !m_export; }
|
||||||
|
bool isExport() const { return m_export; }
|
||||||
|
AstNodeFTask* ftaskp() const { return m_ftaskp; } // [After Link] Pointer to variable
|
||||||
|
void ftaskp(AstNodeFTask* ftaskp) { m_ftaskp=ftaskp; }
|
||||||
|
};
|
||||||
|
|
||||||
struct AstModportVarRef : public AstNode {
|
struct AstModportVarRef : public AstNode {
|
||||||
// A input/output/etc variable referenced under a modport
|
// A input/output/etc variable referenced under a modport
|
||||||
// The storage for the variable itself is inside the interface, thus this is a reference
|
// The storage for the variable itself is inside the interface, thus this is a reference
|
||||||
// PARENT: AstIface
|
// PARENT: AstModport
|
||||||
private:
|
private:
|
||||||
string m_name; // Name of the variable referenced
|
string m_name; // Name of the variable referenced
|
||||||
AstVarType m_type; // Type of the variable (in/out)
|
AstVarType m_type; // Type of the variable (in/out)
|
||||||
@@ -1385,8 +1420,9 @@ public:
|
|||||||
ASTNODE_NODE_FUNCS(ModportVarRef, MODPORTVARREF)
|
ASTNODE_NODE_FUNCS(ModportVarRef, MODPORTVARREF)
|
||||||
virtual const char* broken() const { BROKEN_RTN(m_varp && !m_varp->brokeExists()); return NULL; }
|
virtual const char* broken() const { BROKEN_RTN(m_varp && !m_varp->brokeExists()); return NULL; }
|
||||||
virtual void dump(ostream& str);
|
virtual void dump(ostream& str);
|
||||||
AstVarType varType() const { return m_type; } // * = Type of variable
|
virtual void cloneRelink() { if (m_varp && m_varp->clonep()) m_varp = m_varp->clonep()->castVar(); }
|
||||||
virtual string name() const { return m_name; }
|
virtual string name() const { return m_name; }
|
||||||
|
AstVarType varType() const { return m_type; } // * = Type of variable
|
||||||
bool isInput() const { return (varType()==AstVarType::INPUT || varType()==AstVarType::INOUT); }
|
bool isInput() const { return (varType()==AstVarType::INPUT || varType()==AstVarType::INOUT); }
|
||||||
bool isOutput() const { return (varType()==AstVarType::OUTPUT || varType()==AstVarType::INOUT); }
|
bool isOutput() const { return (varType()==AstVarType::OUTPUT || varType()==AstVarType::INOUT); }
|
||||||
AstVar* varp() const { return m_varp; } // [After Link] Pointer to variable
|
AstVar* varp() const { return m_varp; } // [After Link] Pointer to variable
|
||||||
@@ -1398,13 +1434,13 @@ struct AstModport : public AstNode {
|
|||||||
private:
|
private:
|
||||||
string m_name; // Name of the modport
|
string m_name; // Name of the modport
|
||||||
public:
|
public:
|
||||||
AstModport(FileLine* fl, const string& name, AstModportVarRef* varsp)
|
AstModport(FileLine* fl, const string& name, AstNode* varsp)
|
||||||
: AstNode(fl), m_name(name) {
|
: AstNode(fl), m_name(name) {
|
||||||
addNOp1p(varsp); }
|
addNOp1p(varsp); }
|
||||||
virtual string name() const { return m_name; }
|
virtual string name() const { return m_name; }
|
||||||
virtual bool maybePointedTo() const { return true; }
|
virtual bool maybePointedTo() const { return true; }
|
||||||
ASTNODE_NODE_FUNCS(Modport, MODPORT)
|
ASTNODE_NODE_FUNCS(Modport, MODPORT)
|
||||||
AstModportVarRef* varsp() const { return op1p()->castModportVarRef(); } // op1 = List of Vars
|
AstNode* varsp() const { return op1p(); } // op1 = List of Vars
|
||||||
};
|
};
|
||||||
|
|
||||||
struct AstCell : public AstNode {
|
struct AstCell : public AstNode {
|
||||||
@@ -2786,28 +2822,18 @@ struct AstTraceDecl : public AstNodeStmt {
|
|||||||
private:
|
private:
|
||||||
string m_showname; // Name of variable
|
string m_showname; // Name of variable
|
||||||
uint32_t m_code; // Trace identifier code; converted to ASCII by trace routines
|
uint32_t m_code; // Trace identifier code; converted to ASCII by trace routines
|
||||||
int m_right; // Property of var the trace details
|
VNumRange m_bitRange; // Property of var the trace details
|
||||||
int m_left; // Property of var the trace details
|
VNumRange m_arrayRange; // Property of var the trace details
|
||||||
uint32_t m_arrayLsb; // Property of var the trace details
|
|
||||||
uint32_t m_arrayMsb; // Property of var the trace details
|
|
||||||
uint32_t m_codeInc; // Code increment
|
uint32_t m_codeInc; // Code increment
|
||||||
public:
|
public:
|
||||||
AstTraceDecl(FileLine* fl, const string& showname, AstVar* varp)
|
AstTraceDecl(FileLine* fl, const string& showname, AstNode* valuep,
|
||||||
|
const VNumRange& bitRange, const VNumRange& arrayRange)
|
||||||
: AstNodeStmt(fl)
|
: AstNodeStmt(fl)
|
||||||
, m_showname(showname) {
|
, m_showname(showname), m_bitRange(bitRange), m_arrayRange(arrayRange) {
|
||||||
dtypeFrom(varp);
|
dtypeFrom(valuep);
|
||||||
m_code = 0;
|
m_code = 0;
|
||||||
m_codeInc = varp->dtypep()->arrayUnpackedElements() * varp->dtypep()->widthWords();
|
m_codeInc = ((arrayRange.ranged() ? arrayRange.elements() : 1)
|
||||||
AstBasicDType* bdtypep = varp->basicp();
|
* valuep->dtypep()->widthWords());
|
||||||
m_left = bdtypep ? bdtypep->left() : 0;
|
|
||||||
m_right = bdtypep ? bdtypep->right() : 0;
|
|
||||||
if (AstUnpackArrayDType* adtypep = varp->dtypeSkipRefp()->castUnpackArrayDType()) {
|
|
||||||
m_arrayLsb = adtypep->lsb();
|
|
||||||
m_arrayMsb = adtypep->msb();
|
|
||||||
} else {
|
|
||||||
m_arrayLsb = 0;
|
|
||||||
m_arrayMsb = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
virtual int instrCount() const { return 100; } // Large...
|
virtual int instrCount() const { return 100; } // Large...
|
||||||
ASTNODE_NODE_FUNCS(TraceDecl, TRACEDECL)
|
ASTNODE_NODE_FUNCS(TraceDecl, TRACEDECL)
|
||||||
@@ -2820,11 +2846,8 @@ public:
|
|||||||
uint32_t code() const { return m_code; }
|
uint32_t code() const { return m_code; }
|
||||||
void code(uint32_t code) { m_code=code; }
|
void code(uint32_t code) { m_code=code; }
|
||||||
uint32_t codeInc() const { return m_codeInc; }
|
uint32_t codeInc() const { return m_codeInc; }
|
||||||
int left() const { return m_left; } // Note msb maybe < lsb if little endian
|
const VNumRange& bitRange() const { return m_bitRange; }
|
||||||
int right() const { return m_right; }
|
const VNumRange& arrayRange() const { return m_arrayRange; }
|
||||||
uint32_t arrayMsb() const { return m_arrayMsb; }
|
|
||||||
uint32_t arrayLsb() const { return m_arrayLsb; }
|
|
||||||
uint32_t arrayWidth() const { if (!arrayMsb()) return 0; return arrayMsb()-arrayLsb()+1; }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct AstTraceInc : public AstNodeStmt {
|
struct AstTraceInc : public AstNodeStmt {
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2004-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2004-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2004-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2004-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+2
-2
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
@@ -89,7 +89,7 @@ private:
|
|||||||
AstUnpackArrayDType* arrayp = varp->dtypeSkipRefp()->castUnpackArrayDType();
|
AstUnpackArrayDType* arrayp = varp->dtypeSkipRefp()->castUnpackArrayDType();
|
||||||
AstStructDType *structp = varp->dtypeSkipRefp()->castStructDType();
|
AstStructDType *structp = varp->dtypeSkipRefp()->castStructDType();
|
||||||
bool isArray = arrayp;
|
bool isArray = arrayp;
|
||||||
bool isStruct = structp && structp->packed();
|
bool isStruct = structp && structp->packedUnsup();
|
||||||
int elements = isArray ? arrayp->elementsConst() : 1;
|
int elements = isArray ? arrayp->elementsConst() : 1;
|
||||||
if (isArray && (elements > DETECTARRAY_MAX_INDEXES)) {
|
if (isArray && (elements > DETECTARRAY_MAX_INDEXES)) {
|
||||||
vscp->v3warn(E_DETECTARRAY, "Unsupported: Can't detect more than "<<cvtToStr(DETECTARRAY_MAX_INDEXES)
|
vscp->v3warn(E_DETECTARRAY, "Unsupported: Can't detect more than "<<cvtToStr(DETECTARRAY_MAX_INDEXES)
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2008-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2008-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2010-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2010-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2010-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2010-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+46
-2
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
@@ -213,7 +213,7 @@ private:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (AstUnpackArrayDType* adtypep = dtypep->castUnpackArrayDType()) {
|
else if (AstUnpackArrayDType* adtypep = dtypep->castUnpackArrayDType()) {
|
||||||
for (int index_docs=adtypep->lsb(); index_docs<=adtypep->msb()+1; ++index_docs) {
|
for (int index_docs=adtypep->lsb(); index_docs<=adtypep->msb(); ++index_docs) {
|
||||||
int index_code = index_docs - adtypep->lsb();
|
int index_code = index_docs - adtypep->lsb();
|
||||||
ToggleEnt newent (above.m_comment+string("[")+cvtToStr(index_docs)+"]",
|
ToggleEnt newent (above.m_comment+string("[")+cvtToStr(index_docs)+"]",
|
||||||
new AstArraySel(varp->fileline(), above.m_varRefp->cloneTree(true), index_code),
|
new AstArraySel(varp->fileline(), above.m_varRefp->cloneTree(true), index_code),
|
||||||
@@ -224,6 +224,50 @@ private:
|
|||||||
newent.cleanup();
|
newent.cleanup();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (AstPackArrayDType* adtypep = dtypep->castPackArrayDType()) {
|
||||||
|
for (int index_docs=adtypep->lsb(); index_docs<=adtypep->msb(); ++index_docs) {
|
||||||
|
AstNodeDType* subtypep = adtypep->subDTypep()->skipRefp();
|
||||||
|
int index_code = index_docs - adtypep->lsb();
|
||||||
|
ToggleEnt newent (above.m_comment+string("[")+cvtToStr(index_docs)+"]",
|
||||||
|
new AstSel(varp->fileline(), above.m_varRefp->cloneTree(true),
|
||||||
|
index_code*subtypep->width(), subtypep->width()),
|
||||||
|
new AstSel(varp->fileline(), above.m_chgRefp->cloneTree(true),
|
||||||
|
index_code*subtypep->width(), subtypep->width()));
|
||||||
|
toggleVarRecurse(adtypep->subDTypep()->skipRefp(), depth+1,
|
||||||
|
newent,
|
||||||
|
varp, chgVarp);
|
||||||
|
newent.cleanup();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (AstStructDType* adtypep = dtypep->castStructDType()) {
|
||||||
|
// For now it's packed, so similar to array
|
||||||
|
for (AstMemberDType* itemp = adtypep->membersp(); itemp; itemp=itemp->nextp()->castMemberDType()) {
|
||||||
|
AstNodeDType* subtypep = itemp->subDTypep()->skipRefp();
|
||||||
|
int index_code = itemp->lsb();
|
||||||
|
ToggleEnt newent (above.m_comment+string(".")+itemp->name(),
|
||||||
|
new AstSel(varp->fileline(), above.m_varRefp->cloneTree(true),
|
||||||
|
index_code, subtypep->width()),
|
||||||
|
new AstSel(varp->fileline(), above.m_chgRefp->cloneTree(true),
|
||||||
|
index_code, subtypep->width()));
|
||||||
|
toggleVarRecurse(subtypep, depth+1,
|
||||||
|
newent,
|
||||||
|
varp, chgVarp);
|
||||||
|
newent.cleanup();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (AstUnionDType* adtypep = dtypep->castUnionDType()) {
|
||||||
|
// Arbitrarially handle only the first member of the union
|
||||||
|
if (AstMemberDType* itemp = adtypep->membersp()) {
|
||||||
|
AstNodeDType* subtypep = itemp->subDTypep()->skipRefp();
|
||||||
|
ToggleEnt newent (above.m_comment+string(".")+itemp->name(),
|
||||||
|
above.m_varRefp->cloneTree(true),
|
||||||
|
above.m_chgRefp->cloneTree(true));
|
||||||
|
toggleVarRecurse(subtypep, depth+1,
|
||||||
|
newent,
|
||||||
|
varp, chgVarp);
|
||||||
|
newent.cleanup();
|
||||||
|
}
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
dtypep->v3fatalSrc("Unexpected node data type in toggle coverage generation: "<<dtypep->prettyTypeName());
|
dtypep->v3fatalSrc("Unexpected node data type in toggle coverage generation: "<<dtypep->prettyTypeName());
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+4
-2
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
@@ -103,7 +103,9 @@ private:
|
|||||||
}
|
}
|
||||||
void checkDType(AstNodeDType* nodep) {
|
void checkDType(AstNodeDType* nodep) {
|
||||||
if (!nodep->generic() // Don't remove generic types
|
if (!nodep->generic() // Don't remove generic types
|
||||||
&& m_elimDTypes) { // dtypes stick around until post-widthing
|
&& m_elimDTypes // dtypes stick around until post-widthing
|
||||||
|
&& !nodep->castMemberDType() // Keep member names iff upper type exists
|
||||||
|
) {
|
||||||
m_varEtcsp.push_back(nodep);
|
m_varEtcsp.push_back(nodep);
|
||||||
}
|
}
|
||||||
if (AstNode* subnodep = nodep->virtRefDTypep()) subnodep->user1Inc();
|
if (AstNode* subnodep = nodep->virtRefDTypep()) subnodep->user1Inc();
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+15
-15
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
@@ -706,7 +706,7 @@ class EmitCImp : EmitCStmts {
|
|||||||
if (v3Global.opt.lintOnly()) {
|
if (v3Global.opt.lintOnly()) {
|
||||||
// Unfortunately we have some lint checks here, so we can't just skip processing.
|
// Unfortunately we have some lint checks here, so we can't just skip processing.
|
||||||
// We should move them to a different stage.
|
// We should move them to a different stage.
|
||||||
string filename = "/dev/null";
|
string filename = VL_DEV_NULL;
|
||||||
newCFile(filename, slow, source);
|
newCFile(filename, slow, source);
|
||||||
ofp = new V3OutSpFile (filename);
|
ofp = new V3OutSpFile (filename);
|
||||||
}
|
}
|
||||||
@@ -2190,23 +2190,23 @@ class EmitCTrace : EmitCStmts {
|
|||||||
puts("vcdp->declArray");
|
puts("vcdp->declArray");
|
||||||
} else if (nodep->isQuad()) {
|
} else if (nodep->isQuad()) {
|
||||||
puts("vcdp->declQuad ");
|
puts("vcdp->declQuad ");
|
||||||
} else if (nodep->left() || nodep->right()) {
|
} else if (nodep->bitRange().ranged()) {
|
||||||
puts("vcdp->declBus ");
|
puts("vcdp->declBus ");
|
||||||
} else {
|
} else {
|
||||||
puts("vcdp->declBit ");
|
puts("vcdp->declBit ");
|
||||||
}
|
}
|
||||||
puts("(c+"+cvtToStr(nodep->code()));
|
puts("(c+"+cvtToStr(nodep->code()));
|
||||||
if (nodep->arrayWidth()) puts("+i*"+cvtToStr(nodep->widthWords()));
|
if (nodep->arrayRange().ranged()) puts("+i*"+cvtToStr(nodep->widthWords()));
|
||||||
puts(",");
|
puts(",");
|
||||||
putsQuoted(nodep->showname());
|
putsQuoted(nodep->showname());
|
||||||
if (nodep->arrayWidth()) {
|
if (nodep->arrayRange().ranged()) {
|
||||||
puts(",(i+"+cvtToStr(nodep->arrayLsb())+")");
|
puts(",(i+"+cvtToStr(nodep->arrayRange().lo())+")");
|
||||||
} else {
|
} else {
|
||||||
puts(",-1");
|
puts(",-1");
|
||||||
}
|
}
|
||||||
if (!nodep->isDouble() // When float/double no longer have widths this can go
|
if (!nodep->isDouble() // When float/double no longer have widths this can go
|
||||||
&& (nodep->left() || nodep->right())) {
|
&& nodep->bitRange().ranged()) {
|
||||||
puts(","+cvtToStr(nodep->left())+","+cvtToStr(nodep->right()));
|
puts(","+cvtToStr(nodep->bitRange().left())+","+cvtToStr(nodep->bitRange().right()));
|
||||||
}
|
}
|
||||||
puts(");");
|
puts(");");
|
||||||
}
|
}
|
||||||
@@ -2222,7 +2222,7 @@ class EmitCTrace : EmitCStmts {
|
|||||||
puts("vcdp->"+full+"Array");
|
puts("vcdp->"+full+"Array");
|
||||||
} else if (nodep->isQuad()) {
|
} else if (nodep->isQuad()) {
|
||||||
puts("vcdp->"+full+"Quad ");
|
puts("vcdp->"+full+"Quad ");
|
||||||
} else if (nodep->declp()->left() || nodep->declp()->right()) {
|
} else if (nodep->declp()->bitRange().ranged()) {
|
||||||
puts("vcdp->"+full+"Bus ");
|
puts("vcdp->"+full+"Bus ");
|
||||||
} else {
|
} else {
|
||||||
puts("vcdp->"+full+"Bit ");
|
puts("vcdp->"+full+"Bit ");
|
||||||
@@ -2232,7 +2232,7 @@ class EmitCTrace : EmitCStmts {
|
|||||||
puts(",");
|
puts(",");
|
||||||
emitTraceValue(nodep, arrayindex);
|
emitTraceValue(nodep, arrayindex);
|
||||||
if (!nodep->isDouble() // When float/double no longer have widths this can go
|
if (!nodep->isDouble() // When float/double no longer have widths this can go
|
||||||
&& (nodep->declp()->left() || nodep->declp()->right() || emitTraceIsScBv(nodep) || emitTraceIsScBigUint(nodep))) {
|
&& (nodep->declp()->bitRange().ranged() || emitTraceIsScBv(nodep) || emitTraceIsScBigUint(nodep))) {
|
||||||
puts(","+cvtToStr(nodep->declp()->widthMin()));
|
puts(","+cvtToStr(nodep->declp()->widthMin()));
|
||||||
}
|
}
|
||||||
puts(");\n");
|
puts(");\n");
|
||||||
@@ -2246,7 +2246,7 @@ class EmitCTrace : EmitCStmts {
|
|||||||
else if (emitTraceIsScBv(nodep)) puts("VL_SC_BV_DATAP(");
|
else if (emitTraceIsScBv(nodep)) puts("VL_SC_BV_DATAP(");
|
||||||
varrefp->iterate(*this); // Put var name out
|
varrefp->iterate(*this); // Put var name out
|
||||||
// Tracing only supports 1D arrays
|
// Tracing only supports 1D arrays
|
||||||
if (varp->dtypeSkipRefp()->castUnpackArrayDType()) {
|
if (nodep->declp()->arrayRange().ranged()) {
|
||||||
if (arrayindex==-2) puts("[i]");
|
if (arrayindex==-2) puts("[i]");
|
||||||
else if (arrayindex==-1) puts("[0]");
|
else if (arrayindex==-1) puts("[0]");
|
||||||
else puts("["+cvtToStr(arrayindex)+"]");
|
else puts("["+cvtToStr(arrayindex)+"]");
|
||||||
@@ -2319,8 +2319,8 @@ class EmitCTrace : EmitCStmts {
|
|||||||
m_funcp = NULL;
|
m_funcp = NULL;
|
||||||
}
|
}
|
||||||
virtual void visit(AstTraceDecl* nodep, AstNUser*) {
|
virtual void visit(AstTraceDecl* nodep, AstNUser*) {
|
||||||
if (nodep->arrayWidth()) {
|
if (nodep->arrayRange().ranged()) {
|
||||||
puts("{int i; for (i=0; i<"+cvtToStr(nodep->arrayWidth())+"; i++) {\n");
|
puts("{int i; for (i=0; i<"+cvtToStr(nodep->arrayRange().elements())+"; i++) {\n");
|
||||||
emitTraceInitOne(nodep);
|
emitTraceInitOne(nodep);
|
||||||
puts("}}\n");
|
puts("}}\n");
|
||||||
} else {
|
} else {
|
||||||
@@ -2329,9 +2329,9 @@ class EmitCTrace : EmitCStmts {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
virtual void visit(AstTraceInc* nodep, AstNUser*) {
|
virtual void visit(AstTraceInc* nodep, AstNUser*) {
|
||||||
if (nodep->declp()->arrayWidth()) {
|
if (nodep->declp()->arrayRange().ranged()) {
|
||||||
// It traces faster if we unroll the loop
|
// It traces faster if we unroll the loop
|
||||||
for (unsigned i=0; i<nodep->declp()->arrayWidth(); i++) {
|
for (int i=0; i<nodep->declp()->arrayRange().elements(); i++) {
|
||||||
emitTraceChangeOne(nodep, i);
|
emitTraceChangeOne(nodep, i);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//*************************************************************************
|
//*************************************************************************
|
||||||
//
|
//
|
||||||
// Copyright 2003-2013 by Wilson Snyder. This program is free software; you can
|
// Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
|
||||||
// redistribute it and/or modify it under the terms of either the GNU
|
// redistribute it and/or modify it under the terms of either the GNU
|
||||||
// Lesser General Public License Version 3 or the Perl Artistic License
|
// Lesser General Public License Version 3 or the Perl Artistic License
|
||||||
// Version 2.0.
|
// Version 2.0.
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user