Compare commits

...
32 Commits
Author SHA1 Message Date
Wilson Snyder 470f12ff46 Version bump 2014-01-18 13:16:08 -05:00
Wilson Snyder 4422de0c6c Copyright year update. 2014-01-06 19:28:57 -05:00
Wilson Snyder 8a708f52f7 Tests: Merge from pattern branch. 2013-12-21 08:29:04 -05:00
Wilson Snyder bcefc17631 Support modport import, bug696. 2013-12-21 06:51:15 -05:00
Wilson Snyder daf19e241e Fix struct trace coredump from recent commit. 2013-12-21 06:46:48 -05:00
Wilson Snyder b5f5b1fdf9 Fix wire declarations with size and not range, bug466. 2013-12-14 19:50:55 -05:00
Wilson Snyder 801b718953 Add --trace-structs to show struct names, bug673. 2013-12-14 19:13:31 -05:00
Wilson Snyder f571658aa4 Commentary 2013-12-14 18:07:55 -05:00
Wilson Snyder 5d233b8c09 Fix parameter pin vs. normal pin error, bug704. 2013-12-14 18:04:10 -05:00
Wilson Snyder 00724597f4 Fix tracing of packed structs, bug705. 2013-12-14 16:51:08 -05:00
Wilson Snyder c659940ea8 Internals: Use VNumRange for AstTraceDecl 2013-12-14 12:17:31 -05:00
Wilson Snyder 23539eb55c Fix some delayed assignments of typedefed unpacked arrays. See following trace test. 2013-12-14 10:33:08 -05:00
Wilson Snyder e69bf418de Fix --lint-only with MinGW, msg1283. 2013-11-29 08:28:48 -05:00
Wilson Snyder 0e1fcd38bb Version bump 2013-11-26 19:52:19 -05:00
Wilson Snyder e74186565d Add --compiler clang to work around compiler bug, bug694. 2013-11-26 18:46:55 -05:00
Wilson Snyder 7e54281e26 Fix array assignment from const var, bug693. 2013-10-31 22:39:26 -04:00
Wilson Snyder 15f512bdee Debug: With --debug, run check tree at all steps even if no --dump-more 2013-10-30 23:25:54 -04:00
Wilson Snyder ecfe0283e2 Fix crash with coverage of structures, bug691. 2013-10-29 20:15:01 -04:00
Wilson Snyder 3b874f759c Fix of last commit, bug689. 2013-10-28 21:57:52 -04:00
Wilson Snyder 9c9b4ed4e0 Fix vpi_remove_cb inside callback, bug689. 2013-10-28 21:00:40 -04:00
Wilson Snyder 4f6d80c602 Add UNPACKED warning to convert unpacked structs. 2013-10-28 20:41:05 -04:00
Wilson Snyder b50542531d Fix enum value extension of '1. 2013-10-28 20:24:31 -04:00
Wilson Snyder 8ab28d1d12 Merge branch 'master' of ssh://git-verilator-wsnyder/git/verilator 2013-10-28 11:15:33 -04:00
Wilson Snyder 9567da22f8 Compiler warning fix. 2013-10-28 11:14:13 -04:00
Wilson Snyder 36814b7681 Support vpi_get_time, bug688. 2013-10-22 22:02:53 -04:00
Wilson Snyder 82235e6c6f Fix vpi_get of vpiSuppressVal, bug687. 2013-10-22 22:01:19 -04:00
Wilson Snyder a8310f35f2 Fix evaluation of chained parameter functions, bug684. 2013-10-18 07:06:32 -04:00
Rich Porter 85989af031 Fix vpi_get of vpiSize, bug680.
Signed-off-by: Wilson Snyder <[email protected]>
2013-10-13 20:05:57 -04:00
Rich Porter cf9ffd16dd tests: For icarus, exit on stop. Merge from RPORTER/vpi-vpiSize-680.
Signed-off-by: Wilson Snyder <[email protected]>
2013-10-11 21:34:48 -04:00
Wilson Snyder 0602537cce Fix t/t_select_index2 test. 2013-10-11 21:29:54 -04:00
Wilson Snyder 24e32420b7 Fix multiple VPI variable callbacks, bug679. 2013-10-03 07:24:50 -04:00
Wilson Snyder 39c494260b devel release 2013-09-30 16:56:52 -04:00
284 changed files with 2507 additions and 598 deletions
+42 -1
View File
@@ -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
View File
@@ -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.
Regular → Executable
+1 -1
View File
@@ -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
View File
@@ -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.
+1 -1
View File
@@ -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.
+1 -1
View File
@@ -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.
###################################################################### ######################################################################
+1 -1
View File
@@ -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
View File
@@ -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)
+2 -1
View File
@@ -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
View File
@@ -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 -1
View File
@@ -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
View File
@@ -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 -1
View File
@@ -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 -1
View File
@@ -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 -1
View File
@@ -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 -1
View File
@@ -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 -1
View File
@@ -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 -1
View File
@@ -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 -1
View File
@@ -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 -1
View File
@@ -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 -1
View File
@@ -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 -1
View File
@@ -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 -1
View File
@@ -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 -1
View File
@@ -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 -1
View File
@@ -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 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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.
+1 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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.
+1 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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