mirror of
https://github.com/YosysHQ/yosys
synced 2025-06-25 07:13:42 +00:00
proc_dff: optimize repeated values at bit granularity
This commit is contained in:
parent
480abc09c7
commit
2780875e8c
1 changed files with 16 additions and 2 deletions
|
@ -154,10 +154,24 @@ public:
|
||||||
|
|
||||||
// Combine adjacent async rules that assign the same value into one rule
|
// Combine adjacent async rules that assign the same value into one rule
|
||||||
// with a disjunction of triggers. The resulting trigger is optimized by
|
// with a disjunction of triggers. The resulting trigger is optimized by
|
||||||
// constant evaluation.
|
// constant evaluation. We apply all of these optimizations that can be
|
||||||
|
// done to the LSB and shrink the size of the signal we are considering if
|
||||||
|
// higher bits cannot be optimized in the same way.
|
||||||
void optimize_same_value(ConstEval& ce) {
|
void optimize_same_value(ConstEval& ce) {
|
||||||
for (size_t i = 0; i + 1 < async_rules.size();) {
|
for (size_t i = 0; i + 1 < async_rules.size();) {
|
||||||
if (async_rules[i].value != async_rules[i + 1].value) {
|
const auto bit_optimizable = [&](const size_t bit) {
|
||||||
|
return async_rules[i].value[bit] == async_rules[i + 1].value[bit];
|
||||||
|
};
|
||||||
|
|
||||||
|
const bool lsb_optimizable = bit_optimizable(0);
|
||||||
|
|
||||||
|
size_t new_size;
|
||||||
|
for (new_size = 1; new_size < size(); new_size++)
|
||||||
|
if (bit_optimizable(new_size) != lsb_optimizable)
|
||||||
|
break;
|
||||||
|
resize(new_size);
|
||||||
|
|
||||||
|
if (!lsb_optimizable) {
|
||||||
i++;
|
i++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue