Capturing SystemVerilog unpacked arrays/memories from C: expand small arrays, record writes for big ones
Design notes from planning unpacked-array support in a DPI-based waveform capture (not yet measured): - A DPI tap that passes one packed vector per group can't take an unpacked array (logic [31:0] mem [0:1023]) directly. Options: one tap entry per element, an open-array handle argument (svOpenArrayHandle), or capturing writes. - Per-element combinational taps scale badly for memories: any element write re-runs the tap, and cost tracks wake-ups × bits per wake. - A practical split: expand small arrays (below a cap such as 64 elements) into ordinary signals; for large memories, record (time, index, value) per write and rebuild per-element histories in the output, so readers still see normal signals. - Check against the reference dumper's documented behaviour: in VCS FSDB, MDA/memory dumping is opt-in (+mda), and arrays of structs appeared only with +all in our fixtures. State the dumper options whenever you claim content parity. - When unsupported, fail with a named rejection instead of skipping silently or crashing. A silently dropped array makes 'same content' claims false. - Test fixture worth having: a large memory (>=4K entries), partial writes, multi-dimensional arrays, arrays of structs and initial contents. Keep byte identity for non-array signals as a regression gate.