mirror of
https://github.com/YosysHQ/yosys
synced 2025-06-14 09:56:16 +00:00
Do not SigSpec::extract() beyond bounds
This commit is contained in:
parent
e3d898dccb
commit
d90b8b081a
2 changed files with 10 additions and 8 deletions
|
@ -224,11 +224,11 @@ void create_ice40_dsp(ice40_dsp_pm &pm)
|
||||||
pm.autoremove(st.ffH);
|
pm.autoremove(st.ffH);
|
||||||
pm.autoremove(st.addAB);
|
pm.autoremove(st.addAB);
|
||||||
if (st.ffO_lo) {
|
if (st.ffO_lo) {
|
||||||
SigSpec O = st.sigO.extract(0,16);
|
SigSpec O = st.sigO.extract(0,GetSize(st.ffO_lo));
|
||||||
st.ffO_lo->connections_.at("\\Q").replace(O, pm.module->addWire(NEW_ID, GetSize(O)));
|
st.ffO_lo->connections_.at("\\Q").replace(O, pm.module->addWire(NEW_ID, GetSize(O)));
|
||||||
}
|
}
|
||||||
if (st.ffO_hi) {
|
if (st.ffO_hi) {
|
||||||
SigSpec O = st.sigO.extract(16,16);
|
SigSpec O = st.sigO.extract(16,GetSize(st.ffo_hi));
|
||||||
st.ffO_hi->connections_.at("\\Q").replace(O, pm.module->addWire(NEW_ID, GetSize(O)));
|
st.ffO_hi->connections_.at("\\Q").replace(O, pm.module->addWire(NEW_ID, GetSize(O)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -156,15 +156,17 @@ endcode
|
||||||
|
|
||||||
match ffO_lo
|
match ffO_lo
|
||||||
select ffO_lo->type.in($dff)
|
select ffO_lo->type.in($dff)
|
||||||
filter nusers(sigO.extract(0,16)) == 2
|
filter GetSize(sigO) >= param(ffO_lo, \WIDTH).as_int()
|
||||||
filter includes(port(ffO_lo, \D).to_sigbit_set(), sigO.extract(0,16).to_sigbit_set())
|
filter nusers(sigO.extract(0,param(ffO_lo, \WIDTH).as_int())) == 2
|
||||||
|
filter includes(port(ffO_lo, \D).to_sigbit_set(), sigO.extract(0,param(ffO_lo, \WIDTH).as_int()).to_sigbit_set())
|
||||||
optional
|
optional
|
||||||
endmatch
|
endmatch
|
||||||
|
|
||||||
match ffO_hi
|
match ffO_hi
|
||||||
select ffO_hi->type.in($dff)
|
select ffO_hi->type.in($dff)
|
||||||
filter nusers(sigO.extract(16,16)) == 2
|
filter GetSize(sigO) >= 16+param(ffO_hi, \WIDTH).as_int()
|
||||||
filter includes(port(ffO_hi, \D).to_sigbit_set(), sigO.extract(16,16).to_sigbit_set())
|
filter nusers(sigO.extract(16,param(ffO_hi, \WIDTH).as_int())) == 2
|
||||||
|
filter includes(port(ffO_hi, \D).to_sigbit_set(), sigO.extract(16,param(ffO_hi, \WIDTH).as_int()).to_sigbit_set())
|
||||||
optional
|
optional
|
||||||
endmatch
|
endmatch
|
||||||
|
|
||||||
|
@ -184,7 +186,7 @@ code clock clock_pol sigO sigCD
|
||||||
clock = c;
|
clock = c;
|
||||||
clock_pol = cp;
|
clock_pol = cp;
|
||||||
|
|
||||||
if (port(ffO_lo, \Q) != sigO.extract(0,16))
|
if (port(ffO_lo, \Q) != sigO.extract(0,param(ffO_lo, \WIDTH).as_int()))
|
||||||
sigO.replace(port(ffO_lo, \D), port(ffO_lo, \Q));
|
sigO.replace(port(ffO_lo, \D), port(ffO_lo, \Q));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -202,7 +204,7 @@ code clock clock_pol sigO sigCD
|
||||||
clock = c;
|
clock = c;
|
||||||
clock_pol = cp;
|
clock_pol = cp;
|
||||||
|
|
||||||
if (port(ffO_hi, \Q) != sigO.extract(16,16))
|
if (port(ffO_hi, \Q) != sigO.extract(16,param(ffO_hi, \WIDTH).as_int()))
|
||||||
sigO.replace(port(ffO_hi, \D), port(ffO_hi, \Q));
|
sigO.replace(port(ffO_hi, \D), port(ffO_hi, \Q));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue