aboutsummaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorMiodrag Milanovic <mmicko@gmail.com>2019-06-03 21:01:05 +0200
committerMiodrag Milanovic <mmicko@gmail.com>2019-06-03 21:01:05 +0200
commit44d6f16b66e5f7b89e8cf5711744d6e5f6a40b4a (patch)
tree1cf8d31f6e9b59a2535e1bae8d1d5f45996b9572 /common
parent82ed1803c726e912730c3053179f179b90c9b694 (diff)
downloadnextpnr-44d6f16b66e5f7b89e8cf5711744d6e5f6a40b4a.tar.gz
nextpnr-44d6f16b66e5f7b89e8cf5711744d6e5f6a40b4a.tar.bz2
nextpnr-44d6f16b66e5f7b89e8cf5711744d6e5f6a40b4a.zip
Support ecp5 read write additional cell info
Diffstat (limited to 'common')
-rw-r--r--common/command.cc21
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())
{