iverilog/tgt-vvp
William P. Moore f402e2142d vpi: add native structural-connectivity object model
Implement the IEEE 1364 structural VPI objects that Icarus previously left
unimplemented, so a single-source consumer (e.g. a dataflow/waveform viewer)
gets real data instead of empty fallbacks. Each object is sourced faithfully
from the compiler and threaded ivl -> tgt-vvp -> .vvp directive -> assembler
-> runtime __vpi* -> scope iterator -> vpi_user.h constants.

* vpiProcess (always/initial/final): .process directive from ivl_design_process;
  object reports vpiType/vpiLineNo/vpiFile/vpiScope.

* vpiPrimitive / vpiPrimTerm (gate/switch/UDP): .primitive directive from
  ivl_scope_logs; reports vpiPrimType, vpiSize (#inputs), name, location, and
  iterates terminals (vpiDirection, vpiTermIndex).

* vpiDriver: the tri resolver already retains each driver's value+strength;
  tgt-vvp tags each input with its driver scope (.resolv_drv), and
  vpi_iterate(vpiDriver, net) exposes per-driver value (vpiStrengthVal) and
  scope. signal->node->fun is the resolver, so no extra linkage is needed.

* vpiContAssign (+vpiLhs/vpiRhs): continuous assignments are preserved through
  the frontend (NetScope records each lval/rval/location/drive in
  PGAssign::elaborate; dll_target::end_design builds ivl_cont_assign_s, exposed
  via the new ivl_scope_cassigns/ivl_cassign_* API); tgt-vvp emits .contassign
  and the runtime materialises __vpiContAssign. vpiLhs/size/location are always
  faithful; vpiRhs resolves to the r-value net for simple assigns and is null
  for an expression r-value (anonymous synthesised temp).

* EVCD ($dumpports) inout conflict states: sys_evcd.c walks vpiDriver on an
  inout's net, separates module-side from external drives by scope, and maps
  the pair to the full IEEE 1364-2005 18.4.3 state characters (0/1/?/F, the
  A/a/B/b/C/c conflicts, and d/u/l/h by drive strength) instead of collapsing
  a genuine bus conflict to '?'. New ivtest evcd_inout covers it.

Full Verilog regression (regress-vlg.list) stays clean: the only failures are
pre-existing (gold-less Expected-Fail tests, a VHDL test, a test needing
-gno-io-range-error, and a pre-existing .port_info bug).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 18:53:47 -06:00
..
COPYING.lesser Move GNU lesser to tgt-vvp since that is the only place where LGPL code is located 2020-11-14 19:03:27 -08:00
Makefile.in Fix possible parallel build race with compile and dep directory 2026-03-27 18:38:34 -07:00
cppcheck.sup Cleanup cppcheck 2026-02-24 23:53:57 -08:00
draw_class.c Support multi-dimensional packed vectors as class properties 2026-06-09 21:33:18 -07:00
draw_delay.c Some cppcheck cleanup 2025-10-12 17:37:50 -07:00
draw_enum.c updated FSF-address 2012-08-29 10:12:10 -07:00
draw_mux.c Fix for GitHub issue #96 - support mixed constant/variable delays in vvp. 2016-04-02 19:55:56 +01:00
draw_net_input.c vpi: add native structural-connectivity object model 2026-06-19 18:53:47 -06:00
draw_substitute.c Handle some tricky conditions assignments to parts. 2014-07-14 16:46:58 -07:00
draw_switch.c Increase the thread flag count from 256 to 512 2020-05-31 12:39:54 -07:00
draw_ufunc.c Functions that return strings pass the return value on the stack. 2016-03-01 15:38:28 -08:00
draw_vpi.c tgt-vvp: Handle signedness when passing struct member to system function 2022-05-24 11:32:19 +02:00
eval_condit.c tgt-vvp: Short circuit logical operators 2021-12-30 18:56:39 +01:00
eval_expr.c Some cppcheck cleanup 2025-10-12 17:37:50 -07:00
eval_object.c Some cppcheck cleanup 2025-10-12 17:37:50 -07:00
eval_real.c tgt-vvp: Remove implicit casts between vector and real 2025-01-02 17:40:29 -08:00
eval_string.c Add support for pop_back/front without () 2020-07-25 22:16:54 -07:00
eval_vec4.c tgt-vvp: Remove implicit casts between vector and real 2025-01-02 17:40:29 -08:00
modpath.c Fix GitHub issue #315 - support modpath delays on multiply-driven nets. 2020-04-02 10:56:03 +01:00
stmt_assign.c Support multi-dimensional packed vectors as class properties 2026-06-09 21:33:18 -07:00
vvp-s.conf.in Remove redundant back-end selections. 2008-09-07 16:43:54 -07:00
vvp.c Update program copyright to 2026 2026-01-13 02:04:37 -08:00
vvp.conf.in Remove redundant back-end selections. 2008-09-07 16:43:54 -07:00
vvp_config.h.in Remove "using namespace std" from vvp header files and fix the fallout. 2021-11-04 17:02:07 +00:00
vvp_priv.h Some cppcheck cleanup 2025-10-12 17:37:50 -07:00
vvp_proc_loops.c tgt-vvp: Replace `%pushi ...; %op` with `%opi` 2024-08-31 13:46:30 +02:00
vvp_process.c vpi: add native structural-connectivity object model 2026-06-19 18:53:47 -06:00
vvp_scope.c vpi: add native structural-connectivity object model 2026-06-19 18:53:47 -06:00