mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-12 20:18:20 +00:00
Our techmap rules for $shift and $shiftx cells contained a special path that aimed to decompose the shift LSB-first instead of MSB-first in select cases that come up in pmux lowering. This path was needlessly overcomplicated and contained bugs. Instead of doing that, just switch over the main path to iterate LSB-first (except for the specially-handled MSB for signed shifts and overflow handling). This also makes the code consistent with shl/shr/sshl/sshr cells, which are already decomposed LSB-first. Fixes #2346.
89 lines
3.4 KiB
Plaintext
89 lines
3.4 KiB
Plaintext
read_verilog ../common/mux.v
|
|
design -save read
|
|
|
|
|
|
hierarchy -top mux2
|
|
proc
|
|
equiv_opt -assert -map +/intel_alm/common/alm_sim.v synth_intel_alm -family cyclonev # equivalency check
|
|
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
|
|
cd mux2 # Constrain all select calls below inside the top module
|
|
select -assert-count 1 t:MISTRAL_ALUT3
|
|
select -assert-none t:MISTRAL_ALUT3 %% t:* %D
|
|
|
|
|
|
design -load read
|
|
hierarchy -top mux2
|
|
proc
|
|
equiv_opt -assert -map +/intel_alm/common/alm_sim.v synth_intel_alm -family cyclone10gx # equivalency check
|
|
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
|
|
cd mux2 # Constrain all select calls below inside the top module
|
|
select -assert-count 1 t:MISTRAL_ALUT3
|
|
select -assert-none t:MISTRAL_ALUT3 %% t:* %D
|
|
|
|
|
|
design -load read
|
|
hierarchy -top mux4
|
|
proc
|
|
equiv_opt -assert -map +/intel_alm/common/alm_sim.v synth_intel_alm -family cyclonev # equivalency check
|
|
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
|
|
cd mux4 # Constrain all select calls below inside the top module
|
|
select -assert-count 1 t:MISTRAL_ALUT6
|
|
select -assert-none t:MISTRAL_ALUT6 %% t:* %D
|
|
|
|
|
|
design -load read
|
|
hierarchy -top mux4
|
|
proc
|
|
equiv_opt -assert -map +/intel_alm/common/alm_sim.v synth_intel_alm -family cyclone10gx # equivalency check
|
|
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
|
|
cd mux4 # Constrain all select calls below inside the top module
|
|
select -assert-count 1 t:MISTRAL_ALUT6
|
|
select -assert-none t:MISTRAL_ALUT6 %% t:* %D
|
|
|
|
|
|
design -load read
|
|
hierarchy -top mux8
|
|
proc
|
|
equiv_opt -assert -map +/intel_alm/common/alm_sim.v synth_intel_alm -family cyclonev # equivalency check
|
|
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
|
|
cd mux8 # Constrain all select calls below inside the top module
|
|
select -assert-count 1 t:MISTRAL_ALUT3
|
|
select -assert-count 2 t:MISTRAL_ALUT6
|
|
select -assert-none t:MISTRAL_ALUT3 t:MISTRAL_ALUT6 %% t:* %D
|
|
|
|
|
|
design -load read
|
|
hierarchy -top mux8
|
|
proc
|
|
equiv_opt -assert -map +/intel_alm/common/alm_sim.v synth_intel_alm -family cyclone10gx # equivalency check
|
|
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
|
|
cd mux8 # Constrain all select calls below inside the top module
|
|
select -assert-count 1 t:MISTRAL_ALUT3
|
|
select -assert-count 2 t:MISTRAL_ALUT6
|
|
select -assert-none t:MISTRAL_ALUT3 t:MISTRAL_ALUT6 %% t:* %D
|
|
|
|
|
|
design -load read
|
|
hierarchy -top mux16
|
|
proc
|
|
equiv_opt -assert -map +/intel_alm/common/alm_sim.v synth_intel_alm -family cyclonev # equivalency check
|
|
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
|
|
cd mux16 # Constrain all select calls below inside the top module
|
|
select -assert-count 1 t:MISTRAL_ALUT3
|
|
select -assert-max 2 t:MISTRAL_ALUT5
|
|
select -assert-max 5 t:MISTRAL_ALUT6
|
|
select -assert-none t:MISTRAL_ALUT3 t:MISTRAL_ALUT5 t:MISTRAL_ALUT6 %% t:* %D
|
|
|
|
|
|
design -load read
|
|
hierarchy -top mux16
|
|
proc
|
|
equiv_opt -assert -map +/intel_alm/common/alm_sim.v synth_intel_alm -family cyclone10gx # equivalency check
|
|
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
|
|
cd mux16 # Constrain all select calls below inside the top module
|
|
select -assert-count 1 t:MISTRAL_ALUT3
|
|
select -assert-count 2 t:MISTRAL_ALUT5
|
|
select -assert-count 4 t:MISTRAL_ALUT6
|
|
|
|
select -assert-none t:MISTRAL_ALUT3 t:MISTRAL_ALUT5 t:MISTRAL_ALUT6 %% t:* %D
|