diff options
author | Clifford Wolf <clifford@clifford.at> | 2019-05-06 15:41:13 +0200 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2019-05-06 15:41:13 +0200 |
commit | d187be39d608966f53d6c2ba4d45de94a584d476 (patch) | |
tree | 30b9820eddba4341c7270d5b255758967ed7eaf0 /passes/opt/opt_expr.cc | |
parent | 5c2c0b4bb2ade51396da3acbcce0d5916fb1c7d6 (diff) | |
parent | 20268d12a51e157effc209de5613f0ac8308a61f (diff) | |
download | yosys-d187be39d608966f53d6c2ba4d45de94a584d476.tar.gz yosys-d187be39d608966f53d6c2ba4d45de94a584d476.tar.bz2 yosys-d187be39d608966f53d6c2ba4d45de94a584d476.zip |
Merge branch 'master' of github.com:YosysHQ/yosys into clifford/fix968
Diffstat (limited to 'passes/opt/opt_expr.cc')
-rw-r--r-- | passes/opt/opt_expr.cc | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/passes/opt/opt_expr.cc b/passes/opt/opt_expr.cc index b445afdc8..512ef0cbf 100644 --- a/passes/opt/opt_expr.cc +++ b/passes/opt/opt_expr.cc @@ -61,7 +61,7 @@ void replace_undriven(RTLIL::Design *design, RTLIL::Module *module) } if (wire->port_input) driven_signals.add(sigmap(wire)); - if (wire->port_output) + if (wire->port_output || wire->get_bool_attribute("\\keep")) used_signals.add(sigmap(wire)); all_signals.add(sigmap(wire)); } @@ -88,7 +88,7 @@ void replace_undriven(RTLIL::Design *design, RTLIL::Module *module) } } - log_debug("Setting undriven signal in %s to constant: %s = %s\n", RTLIL::id2cstr(module->name), log_signal(sig), log_signal(val)); + log_debug("Setting undriven signal in %s to constant: %s = %s\n", log_id(module), log_signal(sig), log_signal(val)); module->connect(sig, val); did_something = true; } @@ -104,10 +104,15 @@ void replace_undriven(RTLIL::Design *design, RTLIL::Module *module) if (SigBit(initval[i]) == sig[i]) initval[i] = State::Sx; } - if (initval.is_fully_undef()) + if (initval.is_fully_undef()) { + log_debug("Removing init attribute from %s/%s.\n", log_id(module), log_id(wire)); wire->attributes.erase("\\init"); - else + did_something = true; + } else if (initval != wire->attributes.at("\\init")) { + log_debug("Updating init attribute on %s/%s: %s\n", log_id(module), log_id(wire), log_signal(initval)); wire->attributes["\\init"] = initval; + did_something = true; + } } } } |