mirror of
https://github.com/YosysHQ/yosys
synced 2025-08-19 01:32:20 +00:00
Cleanup
This commit is contained in:
parent
174edbcb96
commit
dc10559f31
2 changed files with 25 additions and 26 deletions
|
@ -3,7 +3,7 @@ pattern ice40_dsp
|
|||
state <SigBit> clock
|
||||
state <bool> clock_pol cd_signed
|
||||
state <SigSpec> sigA sigB sigCD sigH sigO
|
||||
state <Cell*> addAB muxAB
|
||||
state <Cell*> addAB muxAB ffO
|
||||
|
||||
match mul
|
||||
select mul->type.in($mul, \SB_MAC16)
|
||||
|
@ -202,21 +202,21 @@ code muxAB sigO
|
|||
sigO = port(muxAB, \Y);
|
||||
endcode
|
||||
|
||||
match ffO
|
||||
match ffO_hilo
|
||||
// Ensure that register is not already used
|
||||
if mul->type != \SB_MAC16 || (mul->parameters.at(\TOPOUTPUT_SELECT, 0).as_int() != 1 && mul->parameters.at(\BOTOUTPUT_SELECT, 0).as_int() != 1)
|
||||
// Ensure that OLOADTOP/OLOADBOT is unused or zero
|
||||
if mul->type != \SB_MAC16 || (mul->connections_.at(\OLOADTOP, State::S0).is_fully_zero() && mul->connections_.at(\OLOADBOT, State::S0).is_fully_zero())
|
||||
if nusers(sigO) == 2
|
||||
select ffO->type.in($dff)
|
||||
filter GetSize(port(ffO, \D)) >= GetSize(sigO)
|
||||
slice offset GetSize(port(ffO, \D))
|
||||
filter offset+GetSize(sigO) <= GetSize(port(ffO, \D)) && port(ffO, \D).extract(offset, GetSize(sigO)) == sigO
|
||||
select ffO_hilo->type.in($dff)
|
||||
filter GetSize(port(ffO_hilo, \D)) >= GetSize(sigO)
|
||||
slice offset GetSize(port(ffO_hilo, \D))
|
||||
filter offset+GetSize(sigO) <= GetSize(port(ffO_hilo, \D)) && port(ffO_hilo, \D).extract(offset, GetSize(sigO)) == sigO
|
||||
optional
|
||||
endmatch
|
||||
|
||||
match ffO_lo
|
||||
if !ffO && GetSize(sigO) > 16
|
||||
if !ffO_hilo && GetSize(sigO) > 16
|
||||
// Ensure that register is not already used
|
||||
if mul->type != \SB_MAC16 || (mul->parameters.at(\TOPOUTPUT_SELECT, 0).as_int() != 1 && mul->parameters.at(\BOTOUTPUT_SELECT, 0).as_int() != 1)
|
||||
// Ensure that OLOADTOP/OLOADBOT is unused or zero
|
||||
|
@ -229,19 +229,19 @@ match ffO_lo
|
|||
optional
|
||||
endmatch
|
||||
|
||||
code clock clock_pol sigO sigCD cd_signed
|
||||
Cell* ff = nullptr;
|
||||
if (ffO)
|
||||
ff = ffO;
|
||||
code ffO clock clock_pol sigO sigCD cd_signed
|
||||
ffO = nullptr;
|
||||
if (ffO_hilo)
|
||||
ffO = ffO_hilo;
|
||||
else if (ffO_lo)
|
||||
ff = ffO_lo;
|
||||
if (ff) {
|
||||
for (auto b : port(ff, \Q))
|
||||
ffO = ffO_lo;
|
||||
if (ffO) {
|
||||
for (auto b : port(ffO, \Q))
|
||||
if (b.wire->get_bool_attribute(\keep))
|
||||
reject;
|
||||
|
||||
SigBit c = port(ff, \CLK).as_bit();
|
||||
bool cp = param(ff, \CLK_POLARITY).as_bool();
|
||||
SigBit c = port(ffO, \CLK).as_bit();
|
||||
bool cp = param(ffO, \CLK_POLARITY).as_bool();
|
||||
|
||||
if (clock != SigBit() && (c != clock || cp != clock_pol))
|
||||
reject;
|
||||
|
@ -249,7 +249,7 @@ code clock clock_pol sigO sigCD cd_signed
|
|||
clock = c;
|
||||
clock_pol = cp;
|
||||
|
||||
sigO.replace(port(ff, \D), port(ff, \Q));
|
||||
sigO.replace(port(ffO, \D), port(ffO, \Q));
|
||||
|
||||
// Loading value into output register is not
|
||||
// supported unless using accumulator
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue