Save top level attrs and store current step
This commit is contained in:
parent
ef1a5fa606
commit
d9b0bac248
@ -550,6 +550,9 @@ struct BaseCtx
|
|||||||
// Floorplanning regions
|
// Floorplanning regions
|
||||||
std::unordered_map<IdString, std::unique_ptr<Region>> region;
|
std::unordered_map<IdString, std::unique_ptr<Region>> region;
|
||||||
|
|
||||||
|
// Context meta data
|
||||||
|
std::unordered_map<IdString, Property> attrs;
|
||||||
|
|
||||||
BaseCtx()
|
BaseCtx()
|
||||||
{
|
{
|
||||||
idstring_str_to_idx = new std::unordered_map<std::string, int>;
|
idstring_str_to_idx = new std::unordered_map<std::string, int>;
|
||||||
|
@ -524,6 +524,7 @@ bool Arch::place()
|
|||||||
}
|
}
|
||||||
|
|
||||||
permute_luts();
|
permute_luts();
|
||||||
|
getCtx()->attrs[getCtx()->id("step")] = "place";
|
||||||
archInfoToAttributes();
|
archInfoToAttributes();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -560,6 +561,7 @@ bool Arch::route()
|
|||||||
log_info(" base %d adder %d\n", speed_grade->pip_classes[locInfo(slowest_pip)->pip_data[slowest_pip.index].timing_class].max_base_delay,
|
log_info(" base %d adder %d\n", speed_grade->pip_classes[locInfo(slowest_pip)->pip_data[slowest_pip.index].timing_class].max_base_delay,
|
||||||
speed_grade->pip_classes[locInfo(slowest_pip)->pip_data[slowest_pip.index].timing_class].max_fanout_adder);
|
speed_grade->pip_classes[locInfo(slowest_pip)->pip_data[slowest_pip.index].timing_class].max_fanout_adder);
|
||||||
#endif
|
#endif
|
||||||
|
getCtx()->attrs[getCtx()->id("step")] = "route";
|
||||||
archInfoToAttributes();
|
archInfoToAttributes();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -2429,6 +2429,7 @@ bool Arch::pack()
|
|||||||
Ecp5Packer(ctx).pack();
|
Ecp5Packer(ctx).pack();
|
||||||
log_info("Checksum: 0x%08x\n", ctx->checksum());
|
log_info("Checksum: 0x%08x\n", ctx->checksum());
|
||||||
assignArchInfo();
|
assignArchInfo();
|
||||||
|
ctx->attrs[ctx->id("step")] = "pack";
|
||||||
archInfoToAttributes();
|
archInfoToAttributes();
|
||||||
return true;
|
return true;
|
||||||
} catch (log_execution_error_exception) {
|
} catch (log_execution_error_exception) {
|
||||||
|
@ -496,13 +496,21 @@ bool Arch::place()
|
|||||||
std::string placer = str_or_default(settings, id("placer"), defaultPlacer);
|
std::string placer = str_or_default(settings, id("placer"), defaultPlacer);
|
||||||
// FIXME: No HeAP because it needs a list of IO buffers
|
// FIXME: No HeAP because it needs a list of IO buffers
|
||||||
if (placer == "sa") {
|
if (placer == "sa") {
|
||||||
return placer1(getCtx(), Placer1Cfg(getCtx()));
|
bool retVal = placer1(getCtx(), Placer1Cfg(getCtx()));
|
||||||
|
getCtx()->attrs[getCtx()->id("step")] = "place";
|
||||||
|
archInfoToAttributes();
|
||||||
|
return retVal;
|
||||||
} else {
|
} else {
|
||||||
log_error("Generic architecture does not support placer '%s'\n", placer.c_str());
|
log_error("Generic architecture does not support placer '%s'\n", placer.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Arch::route() { return router1(getCtx(), Router1Cfg(getCtx())); }
|
bool Arch::route() {
|
||||||
|
bool retVal = router1(getCtx(), Router1Cfg(getCtx()));
|
||||||
|
getCtx()->attrs[getCtx()->id("step")] = "route";
|
||||||
|
archInfoToAttributes();
|
||||||
|
return retVal;
|
||||||
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------
|
// ---------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -282,6 +282,7 @@ bool Arch::pack()
|
|||||||
pack_io(ctx);
|
pack_io(ctx);
|
||||||
pack_lut_lutffs(ctx);
|
pack_lut_lutffs(ctx);
|
||||||
pack_nonlut_ffs(ctx);
|
pack_nonlut_ffs(ctx);
|
||||||
|
ctx->attrs[ctx->id("step")] = "pack";
|
||||||
ctx->assignArchInfo();
|
ctx->assignArchInfo();
|
||||||
log_info("Checksum: 0x%08x\n", ctx->checksum());
|
log_info("Checksum: 0x%08x\n", ctx->checksum());
|
||||||
return true;
|
return true;
|
||||||
|
@ -689,12 +689,14 @@ bool Arch::place()
|
|||||||
tocfg.cellTypes.insert(id_ICESTORM_LC);
|
tocfg.cellTypes.insert(id_ICESTORM_LC);
|
||||||
retVal = timing_opt(getCtx(), tocfg);
|
retVal = timing_opt(getCtx(), tocfg);
|
||||||
}
|
}
|
||||||
|
getCtx()->attrs[getCtx()->id("step")] = "place";
|
||||||
archInfoToAttributes();
|
archInfoToAttributes();
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Arch::route() {
|
bool Arch::route() {
|
||||||
bool retVal = router1(getCtx(), Router1Cfg(getCtx()));
|
bool retVal = router1(getCtx(), Router1Cfg(getCtx()));
|
||||||
|
getCtx()->attrs[getCtx()->id("step")] = "route";
|
||||||
archInfoToAttributes();
|
archInfoToAttributes();
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
@ -1421,6 +1421,7 @@ bool Arch::pack()
|
|||||||
ctx->assignArchInfo();
|
ctx->assignArchInfo();
|
||||||
constrain_chains(ctx);
|
constrain_chains(ctx);
|
||||||
ctx->assignArchInfo();
|
ctx->assignArchInfo();
|
||||||
|
ctx->attrs[ctx->id("step")] = "pack";
|
||||||
archInfoToAttributes();
|
archInfoToAttributes();
|
||||||
log_info("Checksum: 0x%08x\n", ctx->checksum());
|
log_info("Checksum: 0x%08x\n", ctx->checksum());
|
||||||
return true;
|
return true;
|
||||||
|
@ -355,6 +355,27 @@ void json_import_net_attrib(Context *ctx, string &modname, NetInfo *net, JsonNod
|
|||||||
pId.c_str(ctx), net->attrs[pId].c_str(), net->name.c_str(ctx), modname.c_str());
|
pId.c_str(ctx), net->attrs[pId].c_str(), net->name.c_str(ctx), modname.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void json_import_top_attrib(Context *ctx, string &modname, JsonNode *param_node,
|
||||||
|
std::unordered_map<IdString, Property> *dest, int param_id)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
JsonNode *param;
|
||||||
|
IdString pId;
|
||||||
|
//
|
||||||
|
param = param_node->data_dict.at(param_node->data_dict_keys[param_id]);
|
||||||
|
|
||||||
|
pId = ctx->id(param_node->data_dict_keys[param_id]);
|
||||||
|
if (param->type == 'N') {
|
||||||
|
(*dest)[pId].setNumber(param->data_number);
|
||||||
|
} else if (param->type == 'S')
|
||||||
|
(*dest)[pId].setString(param->data_string);
|
||||||
|
else
|
||||||
|
log_error("JSON parameter type of \"%s\' of module not supported\n", pId.c_str(ctx));
|
||||||
|
if (json_debug)
|
||||||
|
log_info(" Added parameter \'%s\'=%s module \'%s\'\n",
|
||||||
|
pId.c_str(ctx), (*dest)[pId].c_str(), modname.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
static int const_net_idx = 0;
|
static int const_net_idx = 0;
|
||||||
|
|
||||||
template <typename F>
|
template <typename F>
|
||||||
@ -714,7 +735,14 @@ void json_import(Context *ctx, string modname, JsonNode *node)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
log_info("Importing module %s\n", modname.c_str());
|
log_info("Importing module %s\n", modname.c_str());
|
||||||
|
ctx->attrs[ctx->id("module")] = modname;
|
||||||
|
JsonNode *attr_node = node->data_dict.at("attributes");
|
||||||
|
for (int attrid = 0; attrid < GetSize(attr_node->data_dict_keys); attrid++) {
|
||||||
|
json_import_top_attrib(ctx, modname, attr_node, &ctx->attrs, attrid);
|
||||||
|
}
|
||||||
|
if (ctx->attrs.find(ctx->id("step")) == ctx->attrs.end())
|
||||||
|
ctx->attrs[ctx->id("step")] = "synth";
|
||||||
|
|
||||||
JsonNode *ports_parent = nullptr;
|
JsonNode *ports_parent = nullptr;
|
||||||
if (node->data_dict.count("ports") > 0)
|
if (node->data_dict.count("ports") > 0)
|
||||||
ports_parent = node->data_dict.at("ports");
|
ports_parent = node->data_dict.at("ports");
|
||||||
|
@ -64,13 +64,17 @@ void write_parameters(std::ostream &f, Context *ctx, const std::unordered_map<Id
|
|||||||
|
|
||||||
void write_module(std::ostream &f, Context *ctx)
|
void write_module(std::ostream &f, Context *ctx)
|
||||||
{
|
{
|
||||||
f << stringf(" %s: {\n", get_string("top").c_str());
|
auto val = ctx->attrs.find(ctx->id("module"));
|
||||||
|
if (val != ctx->attrs.end())
|
||||||
|
f << stringf(" %s: {\n", get_string(val->second.str).c_str());
|
||||||
|
else
|
||||||
|
f << stringf(" %s: {\n", get_string("top").c_str());
|
||||||
// TODO: check if this is better to be separate
|
// TODO: check if this is better to be separate
|
||||||
/*f << stringf(" \"settings\": {");
|
/*f << stringf(" \"settings\": {");
|
||||||
write_parameters(f, ctx, ctx->settings, true);
|
write_parameters(f, ctx, ctx->settings, true);
|
||||||
f << stringf("\n },\n");*/
|
f << stringf("\n },\n");*/
|
||||||
f << stringf(" \"attributes\": {");
|
f << stringf(" \"attributes\": {");
|
||||||
// TODO: Top level attributes
|
write_parameters(f, ctx, ctx->attrs, true);
|
||||||
f << stringf("\n },\n");
|
f << stringf("\n },\n");
|
||||||
f << stringf(" \"ports\": {");
|
f << stringf(" \"ports\": {");
|
||||||
// TODO: Top level ports
|
// TODO: Top level ports
|
||||||
|
Loading…
Reference in New Issue
Block a user