diff options
Diffstat (limited to 'common/command.cc')
-rw-r--r-- | common/command.cc | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/common/command.cc b/common/command.cc index d0ef5174..d700f4ee 100644 --- a/common/command.cc +++ b/common/command.cc @@ -28,6 +28,7 @@ #endif #include <boost/algorithm/string/join.hpp> +#include <boost/algorithm/string.hpp> #include <boost/filesystem/convenience.hpp> #include <boost/program_options.hpp> #include <fstream> @@ -317,15 +318,27 @@ int CommandHandler::executeMain(std::unique_ptr<Context> ctx) auto constr_child = c->attrs.find(ctx->id("NEXTPNR_CONSTR_CHILDREN")); if (constr_main!=c->attrs.end()) { - std::vector<std::string> val = split(constr_main->second.str.c_str(),";"); + std::vector<std::string> val; + boost::split(val,constr_main->second.str,boost::is_any_of(";")); c->constr_x = std::stoi(val[0]); c->constr_y = std::stoi(val[1]); c->constr_z = std::stoi(val[2]); - c->constr_abs_z = val[3]=="1" ? true : false; + c->constr_abs_z = val[3]=="1"; c->constr_parent = nullptr; - if (val.size()==5) + if (!val[4].empty()) c->constr_parent = ctx->cells.find(ctx->id(val[4].c_str()))->second.get(); - + #ifdef ARCH_ECP5 + c->sliceInfo.using_dff = val[5]=="1"; + c->sliceInfo.has_l6mux = val[6]=="1"; + c->sliceInfo.is_carry = val[7]=="1"; + c->sliceInfo.clk_sig = ctx->id(val[8]); + c->sliceInfo.lsr_sig = ctx->id(val[9]); + c->sliceInfo.clkmux = ctx->id(val[10]); + c->sliceInfo.lsrmux = ctx->id(val[11]); + c->sliceInfo.srmode = ctx->id(val[12]); + c->sliceInfo.sd0 = std::stoi(val[13]); + c->sliceInfo.sd1 = std::stoi(val[14]); + #endif } if (constr_child!=c->attrs.end()) { |