iverilog/vvp
Lars-Peter Clausen 5b509e69f6 vvp: concat: Defer update to end of the current simulation cycle
A concat typically has multiple inputs. Whenever one of the input values
change the output value of the concat is updated and propagated to its
downstream consumers.

When multiple inputs change within the same cycle each input will cause a
update propagation. Depending of the overall structure of the design this
can cause a significant performance penalty.

E.g. the following synthetic structure has a exponential runtime increase
based on the value of N.

```
reg [N-1:0] x;
generate for (genvar i = 0; i < N - 1; i++)
  assign x[i+1] = ^{x[i],x[i]};
endgenerate
```

To improve this defer the value propagation of the concat to the end of the
current cycle, this allows multiple input updates to be included in a
single output update.

For the example in report #1052 this reduced the runtime from 2 minutes to
essentially 0.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
2024-01-20 10:32:55 -08:00
..
examples devel: Fix ci build vvp test 2022-12-26 17:16:26 -05:00
Makefile.in Fix for cross compile build 2021-05-12 09:16:11 +02:00
arith.cc vvp: Remove `wid` parameter from `recv_vec{4,8}_pv()` 2022-05-28 15:34:02 +02:00
arith.h vvp: Remove `wid` parameter from `recv_vec{4,8}_pv()` 2022-05-28 15:34:02 +02:00
array.cc vvp: Don't schedule initial value propagation for net array ports 2023-12-28 20:04:01 -08:00
array.h vvp: Remove unused `compile_varw_real()` 2022-06-20 22:59:12 +02:00
array_common.cc Cleanup some cppcheck warnings 2022-12-28 00:00:31 -08:00
array_common.h vvp: Cleaning. 2014-11-28 14:14:39 +01:00
bufif.cc vvp: Remove `wid` parameter from `recv_vec{4,8}_pv()` 2022-05-28 15:34:02 +02:00
bufif.h vvp: Remove `wid` parameter from `recv_vec{4,8}_pv()` 2022-05-28 15:34:02 +02:00
class_type.cc vvp: recognise signed logic types when parsing class properties. 2019-12-23 09:48:07 +00:00
class_type.h Allow class properties to be arrayed. 2014-09-15 17:37:30 -07:00
codes.cc Fix valgrind compile 2016-02-03 22:25:57 -08:00
codes.h vvp: Remove unused function prototypes 2022-06-20 22:52:56 +02:00
compile.cc vvp: execute undriven net initialisation before time 0. 2024-01-07 09:34:44 +00:00
compile.h Improve SDF interconnect support, add -ginterconnect flag 2023-08-23 12:56:11 +02:00
concat.cc vvp: concat: Defer update to end of the current simulation cycle 2024-01-20 10:32:55 -08:00
concat.h vvp: concat: Defer update to end of the current simulation cycle 2024-01-20 10:32:55 -08:00
config.h.in vvp: Fix implementation of strndup for Windows (issue #608). 2022-03-25 20:34:11 +00:00
cppcheck.sup Cleanup some cppcheck warnings 2022-12-28 00:00:31 -08:00
delay.cc Cleanup 2023-08-29 09:54:39 +02:00
delay.h Cleanup 2023-08-29 09:54:39 +02:00
dff.cc vvp: Remove `wid` parameter from `recv_vec{4,8}_pv()` 2022-05-28 15:34:02 +02:00
dff.h vvp: Remove `wid` parameter from `recv_vec{4,8}_pv()` 2022-05-28 15:34:02 +02:00
draw_tt.c Fix some cppcheck warnings 2015-10-02 09:43:54 -07:00
enum_type.cc Remove "using namespace std" from vvp header files and fix the fallout. 2021-11-04 17:02:07 +00:00
enum_type.h Update header files to use a more standard name to prevent rereading 2014-07-23 13:42:56 -07:00
event.cc vvp: Remove `wid` parameter from `recv_vec{4,8}_pv()` 2022-05-28 15:34:02 +02:00
event.h vvp: Remove `wid` parameter from `recv_vec{4,8}_pv()` 2022-05-28 15:34:02 +02:00
extend.cc vvp: Remove `wid` parameter from `recv_vec{4,8}_pv()` 2022-05-28 15:34:02 +02:00
file_line.cc Cleanup vvp with suggestions from cppcheck 2021-01-02 13:53:18 -08:00
island_tran.cc Cleanup some cppcheck warnings 2022-12-28 00:00:31 -08:00
ivl_dlfcn.h Update header files to use a more standard name to prevent rereading 2014-07-23 13:42:56 -07:00
latch.cc vvp: Remove `wid` parameter from `recv_vec{4,8}_pv()` 2022-05-28 15:34:02 +02:00
latch.h vvp: Remove `wid` parameter from `recv_vec{4,8}_pv()` 2022-05-28 15:34:02 +02:00
lexor.lex tgt-vvp: inform vvp about undriven constant values. 2024-01-07 09:34:36 +00:00
logic.cc vvp: Remove `wid` parameter from `recv_vec{4,8}_pv()` 2022-05-28 15:34:02 +02:00
logic.h vvp: Remove `wid` parameter from `recv_vec{4,8}_pv()` 2022-05-28 15:34:02 +02:00
main.cc Update displayed Copyright dates 2023-06-10 20:33:08 -07:00
npmos.cc vvp: Remove `wid` parameter from `recv_vec{4,8}_pv()` 2022-05-28 15:34:02 +02:00
npmos.h vvp: Remove `wid` parameter from `recv_vec{4,8}_pv()` 2022-05-28 15:34:02 +02:00
parse.y vvp: Add parser rule for unsigned 2-state net arrays 2023-10-15 10:03:10 -07:00
parse_misc.cc updated FSF-address 2012-08-29 10:12:10 -07:00
parse_misc.h Update header files to use a more standard name to prevent rereading 2014-07-23 13:42:56 -07:00
part.cc vvp: Remove bitsr from struct vvp_fun_part_state_s 2024-01-07 17:38:33 -08:00
part.h Add support for annotation of input and output vectors 2023-09-04 09:20:19 +02:00
permaheap.cc updated FSF-address 2012-08-29 10:12:10 -07:00
permaheap.h Update header files to use a more standard name to prevent rereading 2014-07-23 13:42:56 -07:00
reduce.cc vvp: Remove `wid` parameter from `recv_vec{4,8}_pv()` 2022-05-28 15:34:02 +02:00
resolv.cc vvp: Remove `wid` parameter from `recv_vec{4,8}_pv()` 2022-05-28 15:34:02 +02:00
resolv.h vvp: Remove `wid` parameter from `recv_vec{4,8}_pv()` 2022-05-28 15:34:02 +02:00
schedule.cc vvp: enable main event queue before executing cbStartOfSimulation callbacks. 2024-01-14 22:12:52 +00:00
schedule.h Add compiler and the start of vvp support for ->> 2021-02-19 23:21:51 -08:00
sfunc.cc fix broken call-out of real-valued system functions. 2014-01-21 13:31:49 -08:00
sfunc.h Update header files to use a more standard name to prevent rereading 2014-07-23 13:42:56 -07:00
slab.h Cleanup any allocated event queue data 2015-12-14 21:08:17 -08:00
statistics.cc updated FSF-address 2012-08-29 10:12:10 -07:00
statistics.h Update header files to use a more standard name to prevent rereading 2014-07-23 13:42:56 -07:00
stop.cc Fix Typo in vvp's scope search in interactive mode. 2023-08-17 05:44:31 +00:00
substitute.cc vvp: Remove `wid` parameter from `recv_vec{4,8}_pv()` 2022-05-28 15:34:02 +02:00
symbols.cc Fix initialisation of vvp symbol table values. 2019-08-01 12:34:47 +01:00
symbols.h Fix initialisation of vvp symbol table values. 2019-08-01 12:34:47 +01:00
udp.cc Remove "using namespace std" from vvp header files and fix the fallout. 2021-11-04 17:02:07 +00:00
udp.h Remove "using namespace std" from vvp header files and fix the fallout. 2021-11-04 17:02:07 +00:00
ufunc.cc Fix valgrind compile to work with new using std reorg 2021-11-10 18:21:14 -08:00
ufunc.h Add ability to read back return value / Add vec4 stacked user functions. 2016-01-24 18:36:26 -08:00
vpi_bit.cc Update the user visible copyright to be 2020 2020-05-31 13:41:38 -07:00
vpi_callback.cc Fix formatting real to binary and hex strings on ARM 2023-05-08 09:16:00 -07:00
vpi_cobject.cc Cleanup some cppcheck warnings 2022-12-28 00:00:31 -08:00
vpi_const.cc vvp: Handle null-bytes in the string literal VPI support 2023-01-02 15:35:34 -08:00
vpi_darray.cc Cleanup some cppcheck warnings 2022-12-28 00:00:31 -08:00
vpi_event.cc Implement vpi_put_value() for named events (GitHub issue #158). 2017-06-15 08:47:29 +01:00
vpi_iter.cc Fix new/free mismatch in vvp. 2012-08-30 19:33:25 -07:00
vpi_mcd.cc Update vpi_mcd_close() to return the correct value 2020-05-16 19:19:45 -07:00
vpi_modules.cc vvp: Only support one path separator in IVERILOG_VPI_MODULE_PATH (issue #608) 2022-03-25 22:04:43 +00:00
vpi_priv.cc vvp: concat: Defer update to end of the current simulation cycle 2024-01-20 10:32:55 -08:00
vpi_priv.h Add support for annotation of input and output vectors 2023-09-04 09:20:19 +02:00
vpi_real.cc Cleanup some cppcheck warnings 2022-12-28 00:00:31 -08:00
vpi_scope.cc vpiFullname of a package should have a "::" after the name 2023-12-28 18:53:11 -08:00
vpi_signal.cc vpiFullname of a package should have a "::" after the name 2023-12-28 18:53:11 -08:00
vpi_string.cc Cleanup some cppcheck warnings 2022-12-28 00:00:31 -08:00
vpi_tasks.cc Cleanup vvp with suggestions from cppcheck 2021-01-02 13:53:18 -08:00
vpi_time.cc Clean up warnings 2022-12-18 10:18:10 -05:00
vpi_vthr_vector.cc Clean up warnings 2022-12-18 10:18:10 -05:00
vpip_bin.cc Fix implicit fallthrough warnings when building with recent GCC. 2018-10-06 20:15:42 +01:00
vpip_format.cc updated FSF-address 2012-08-29 10:12:10 -07:00
vpip_hex.cc Fix implicit fallthrough warnings when building with recent GCC. 2018-10-06 20:15:42 +01:00
vpip_oct.cc Fix implicit fallthrough warnings when building with recent GCC. 2018-10-06 20:15:42 +01:00
vpip_to_dec.cc updated FSF-address 2012-08-29 10:12:10 -07:00
vthread.cc Merge pull request #930 from larsclausen/fix-fn-partial-oob-write 2023-06-10 18:00:06 -07:00
vthread.h vvp: Handle %fork in `final` procedures 2023-04-16 09:20:31 -07:00
vvp.def Fix memory leak and add vpi_release_handle() 2023-09-04 15:20:31 +02:00
vvp.man.in Update URL http://iverilog.icarus.com/ -> https://steveicarus.github.io/iverilog/ 2023-10-15 19:29:40 -06:00
vvp_cleanup.h Kill a bunch of __vpiScope struct vs class warnings. 2015-12-27 11:37:10 -08:00
vvp_cobject.cc Allow class properties to be arrayed. 2014-09-15 17:37:30 -07:00
vvp_cobject.h Allow class properties to be arrayed. 2014-09-15 17:37:30 -07:00
vvp_darray.cc Cleanup cppcheck warnings in vvp 2021-01-01 00:20:26 -08:00
vvp_darray.h Remove "using namespace std" from vvp header files and fix the fallout. 2021-11-04 17:02:07 +00:00
vvp_island.cc Cleanup some cppcheck warnings 2022-12-28 00:00:31 -08:00
vvp_island.h vvp: Remove `wid` parameter from `recv_vec{4,8}_pv()` 2022-05-28 15:34:02 +02:00
vvp_net.cc tgt-vvp: inform vvp about undriven constant values. 2024-01-07 09:34:36 +00:00
vvp_net.h vvp: concat: Defer update to end of the current simulation cycle 2024-01-20 10:32:55 -08:00
vvp_net_sig.cc vvp: Initialize automatic 2-state vectors to 0 2023-07-29 06:17:47 -07:00
vvp_net_sig.h vvp: Initialize automatic 2-state vectors to 0 2023-07-29 06:17:47 -07:00
vvp_object.cc Fix dynamic array assignment to make a copy of the rvalue. 2020-11-26 12:52:06 -08:00
vvp_object.h Fix dynamic array assignment to make a copy of the rvalue. 2020-11-26 12:52:06 -08:00
vvp_vpi.cc Remove malloc.h support and for C++ files use <c...> include files. 2010-06-01 08:56:30 -07:00
vvp_vpi_callback.h Fix for br1019 - allow multiple array words to be attached to a vpi callback. 2017-08-12 12:23:43 +01:00
words.cc vvp: Initialize automatic 2-state vectors to 0 2023-07-29 06:17:47 -07:00