mirror of
https://github.com/YosysHQ/yosys
synced 2025-06-06 22:23:23 +00:00
Added sat -set-init-zero support
This commit is contained in:
parent
19029f377b
commit
80a1cdb0e2
1 changed files with 22 additions and 2 deletions
|
@ -50,7 +50,7 @@ struct SatHelper
|
||||||
bool prove_asserts;
|
bool prove_asserts;
|
||||||
|
|
||||||
// undef constraints
|
// undef constraints
|
||||||
bool enable_undef, set_init_undef, ignore_unknown_cells;
|
bool enable_undef, set_init_undef, set_init_zero, ignore_unknown_cells;
|
||||||
std::vector<std::string> sets_def, sets_any_undef, sets_all_undef;
|
std::vector<std::string> sets_def, sets_any_undef, sets_all_undef;
|
||||||
std::map<int, std::vector<std::string>> sets_def_at, sets_any_undef_at, sets_all_undef_at;
|
std::map<int, std::vector<std::string>> sets_def_at, sets_any_undef_at, sets_all_undef_at;
|
||||||
|
|
||||||
|
@ -67,6 +67,7 @@ struct SatHelper
|
||||||
this->enable_undef = enable_undef;
|
this->enable_undef = enable_undef;
|
||||||
satgen.model_undef = enable_undef;
|
satgen.model_undef = enable_undef;
|
||||||
set_init_undef = false;
|
set_init_undef = false;
|
||||||
|
set_init_zero = false;
|
||||||
ignore_unknown_cells = false;
|
ignore_unknown_cells = false;
|
||||||
max_timestep = -1;
|
max_timestep = -1;
|
||||||
timeout = 0;
|
timeout = 0;
|
||||||
|
@ -139,6 +140,13 @@ struct SatHelper
|
||||||
big_rhs.append(RTLIL::SigSpec(RTLIL::State::Sx, rem.width));
|
big_rhs.append(RTLIL::SigSpec(RTLIL::State::Sx, rem.width));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (set_init_zero) {
|
||||||
|
RTLIL::SigSpec rem = satgen.initial_state.export_all();
|
||||||
|
rem.remove(big_lhs);
|
||||||
|
big_lhs.append(rem);
|
||||||
|
big_rhs.append(RTLIL::SigSpec(RTLIL::State::S0, rem.width));
|
||||||
|
}
|
||||||
|
|
||||||
if (big_lhs.width == 0) {
|
if (big_lhs.width == 0) {
|
||||||
log("No constraints for initial state found.\n\n");
|
log("No constraints for initial state found.\n\n");
|
||||||
return;
|
return;
|
||||||
|
@ -749,6 +757,9 @@ struct SatPass : public Pass {
|
||||||
log(" -set-init-undef\n");
|
log(" -set-init-undef\n");
|
||||||
log(" set all initial states (not set using -set-init) to undef\n");
|
log(" set all initial states (not set using -set-init) to undef\n");
|
||||||
log("\n");
|
log("\n");
|
||||||
|
log(" -set-init-zero\n");
|
||||||
|
log(" set all initial states (not set using -set-init) to zero\n");
|
||||||
|
log("\n");
|
||||||
log("The following additional options can be used to set up a proof. If also -seq\n");
|
log("The following additional options can be used to set up a proof. If also -seq\n");
|
||||||
log("is passed, a temporal induction proof is performed.\n");
|
log("is passed, a temporal induction proof is performed.\n");
|
||||||
log("\n");
|
log("\n");
|
||||||
|
@ -794,7 +805,7 @@ struct SatPass : public Pass {
|
||||||
std::vector<std::string> shows, sets_def, sets_any_undef, sets_all_undef;
|
std::vector<std::string> shows, sets_def, sets_any_undef, sets_all_undef;
|
||||||
int loopcount = 0, seq_len = 0, maxsteps = 0, timeout = 0;
|
int loopcount = 0, seq_len = 0, maxsteps = 0, timeout = 0;
|
||||||
bool verify = false, fail_on_timeout = false, enable_undef = false, set_def_inputs = false;
|
bool verify = false, fail_on_timeout = false, enable_undef = false, set_def_inputs = false;
|
||||||
bool ignore_div_by_zero = false, set_init_undef = false, max_undef = false;
|
bool ignore_div_by_zero = false, set_init_undef = false, set_init_zero = false, max_undef = false;
|
||||||
bool tempinduct = false, prove_asserts = false, show_inputs = false, show_outputs = false;
|
bool tempinduct = false, prove_asserts = false, show_inputs = false, show_outputs = false;
|
||||||
bool ignore_unknown_cells = false, falsify = false;
|
bool ignore_unknown_cells = false, falsify = false;
|
||||||
|
|
||||||
|
@ -941,6 +952,10 @@ struct SatPass : public Pass {
|
||||||
enable_undef = true;
|
enable_undef = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (args[argidx] == "-set-init-zero") {
|
||||||
|
set_init_zero = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (args[argidx] == "-show" && argidx+1 < args.size()) {
|
if (args[argidx] == "-show" && argidx+1 < args.size()) {
|
||||||
shows.push_back(args[++argidx]);
|
shows.push_back(args[++argidx]);
|
||||||
continue;
|
continue;
|
||||||
|
@ -975,6 +990,9 @@ struct SatPass : public Pass {
|
||||||
if (!prove.size() && !prove_x.size() && !prove_asserts && tempinduct)
|
if (!prove.size() && !prove_x.size() && !prove_asserts && tempinduct)
|
||||||
log_cmd_error("Got -tempinduct but nothing to prove!\n");
|
log_cmd_error("Got -tempinduct but nothing to prove!\n");
|
||||||
|
|
||||||
|
if (set_init_undef && set_init_zero)
|
||||||
|
log_cmd_error("Got -set-init-undef and -set-init-zero!\n");
|
||||||
|
|
||||||
if (set_def_inputs) {
|
if (set_def_inputs) {
|
||||||
for (auto &it : module->wires)
|
for (auto &it : module->wires)
|
||||||
if (it.second->port_input)
|
if (it.second->port_input)
|
||||||
|
@ -1017,6 +1035,7 @@ struct SatPass : public Pass {
|
||||||
basecase.sets_all_undef_at = sets_all_undef_at;
|
basecase.sets_all_undef_at = sets_all_undef_at;
|
||||||
basecase.sets_init = sets_init;
|
basecase.sets_init = sets_init;
|
||||||
basecase.set_init_undef = set_init_undef;
|
basecase.set_init_undef = set_init_undef;
|
||||||
|
basecase.set_init_zero = set_init_zero;
|
||||||
basecase.satgen.ignore_div_by_zero = ignore_div_by_zero;
|
basecase.satgen.ignore_div_by_zero = ignore_div_by_zero;
|
||||||
basecase.ignore_unknown_cells = ignore_unknown_cells;
|
basecase.ignore_unknown_cells = ignore_unknown_cells;
|
||||||
|
|
||||||
|
@ -1133,6 +1152,7 @@ struct SatPass : public Pass {
|
||||||
sathelper.sets_all_undef_at = sets_all_undef_at;
|
sathelper.sets_all_undef_at = sets_all_undef_at;
|
||||||
sathelper.sets_init = sets_init;
|
sathelper.sets_init = sets_init;
|
||||||
sathelper.set_init_undef = set_init_undef;
|
sathelper.set_init_undef = set_init_undef;
|
||||||
|
sathelper.set_init_zero = set_init_zero;
|
||||||
sathelper.satgen.ignore_div_by_zero = ignore_div_by_zero;
|
sathelper.satgen.ignore_div_by_zero = ignore_div_by_zero;
|
||||||
sathelper.ignore_unknown_cells = ignore_unknown_cells;
|
sathelper.ignore_unknown_cells = ignore_unknown_cells;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue