mirror of
https://github.com/YosysHQ/yosys
synced 2026-08-09 23:51:08 +00:00
Leaving signorm dropped the $input_port markers but left the $connect
cells standing. A $connect is not decoration -- it is how the index
spells "these two already-driven nets are the same net" -- so once the
index is gone it is an opaque two-input cell, and the net that reached
its driver through it now has no driver at all. Outside the index that
fact is a module connection, so emit one.
Found via techmap, which is where it does real damage: templates are
copied cell by cell, so a $connect surviving in a map module reappears in
every module the template is instantiated into. `techmap.v`'s `_80_mul`
picks up four of them (plus their setup_driven_wires helper wires) while
the map design is briefly normalized by a _TECHMAP_DO_ command, and
techmap then splices them into the parent. opt_expr -undriven finds the
helper wires driverless, ties them to x, and the multiplier cone
evaporates: 103 cells -> 2 on
read_verilog <<EOT
module top(input signed [24:0] A, input signed [17:0] B, output [47:0] P);
assign P = A * B;
endmodule
EOT
synth_analogdevices
techmap -autoproc -wb -map +/analogdevices/cells_sim.v
opt_expr -undriven
That is arch/{analogdevices/dsp_abc9,intel_alm/mul,nexus/mul,
nexus/fuse_mac} -- every failure that keeping the index across opt_dff
introduced -- and sat/share, which predates it. `make -C tests` goes from
12 failures to 7; the benchmark is unchanged at 3.14s.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MQU5XCqDYY8MbivGkNRrDo
|
||
|---|---|---|
| .. | ||
| unstable | ||
| binding.cc | ||
| binding.h | ||
| bitpattern.h | ||
| calc.cc | ||
| cellaigs.cc | ||
| cellaigs.h | ||
| celledges.cc | ||
| celledges.h | ||
| cellhelp.py | ||
| celltypes.h | ||
| CMakeLists.txt | ||
| compressor_tree.cc | ||
| compressor_tree.h | ||
| compute_graph.h | ||
| consteval.h | ||
| constids.inc | ||
| cost.cc | ||
| cost.h | ||
| driver.cc | ||
| drivertools.cc | ||
| drivertools.h | ||
| ff.cc | ||
| ff.h | ||
| ffinit.h | ||
| ffmerge.cc | ||
| ffmerge.h | ||
| fmt.cc | ||
| fmt.h | ||
| fstdata.cc | ||
| fstdata.h | ||
| functional.cc | ||
| functional.h | ||
| gzip.cc | ||
| gzip.h | ||
| hashlib.h | ||
| io.cc | ||
| io.h | ||
| json.cc | ||
| json.h | ||
| log.cc | ||
| log.h | ||
| log_compat.cc | ||
| log_help.cc | ||
| log_help.h | ||
| macc.h | ||
| mem.cc | ||
| mem.h | ||
| modtools.h | ||
| newcelltypes.h | ||
| pattern.h | ||
| pmux.h | ||
| qcsat.cc | ||
| qcsat.h | ||
| register.cc | ||
| register.h | ||
| rtlil.cc | ||
| rtlil.h | ||
| rtlil_bufnorm.cc | ||
| satgen.cc | ||
| satgen.h | ||
| scopeinfo.cc | ||
| scopeinfo.h | ||
| sexpr.cc | ||
| sexpr.h | ||
| sigtools.h | ||
| tclapi.cc | ||
| threading.cc | ||
| threading.h | ||
| timinginfo.h | ||
| topo_scc.h | ||
| twine.cc | ||
| twine.h | ||
| utils.h | ||
| version.cc.in | ||
| yosys.cc | ||
| yosys.h | ||
| yosys_common.h | ||
| yosys_config.h.in | ||
| yw.cc | ||
| yw.h | ||