3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2026-04-27 14:23:37 +00:00
yosys/tests/proc/proc_mux_dominant.ys

40 lines
1.6 KiB
Text

# Test that proc_mux uses a dominant-value pre-scan to avoid generating
# unnecessary mux cells when a full_case switch has a majority of arms
# assigning the same value.
# 3 of 4 arms assign identical constants for both outputs.
# The optimization should seed the result with the dominant values (3'b001,
# 2'b00) so only the one differing arm (2'b00 -> 3'b110, 2'b11) generates
# cells. Each output word is a separate SigSnippet, so we expect one
# $logic_not + one $mux per word = 2 of each total.
read_verilog proc_mux_dominant.v
hierarchy -top dominant_explicit
proc
select -assert-count 2 t:$logic_not
select -assert-count 2 t:$mux
select -assert-count 0 t:$eq
select -assert-count 0 t:$pmux
# 3 of 4 arms pass through an input wire 'a'. The dominant value is a wire
# signal rather than a constant; the optimization must still recognise it.
# Only one arm differs (2'b00 -> 3'b110), producing 1 $logic_not + 1 $mux.
design -reset
read_verilog proc_mux_dominant.v
hierarchy -top dominant_wire
proc
select -assert-count 1 t:$logic_not
select -assert-count 1 t:$mux
select -assert-count 0 t:$eq
select -assert-count 0 t:$pmux
# All four arms assign distinct values; no majority exists. The optimization
# must not fire and the generated netlist must be functionally correct.
design -reset
read_verilog proc_mux_dominant.v
hierarchy -top no_dominant
proc
# Three explicit non-zero compare arms each produce an $eq; the 2'b00 arm
# uses $logic_not (all-zero check); all results are merged into one $pmux.
select -assert-count 3 t:$eq
select -assert-count 1 t:$logic_not
select -assert-count 1 t:$pmux