frontend: Support for loading settings and nextpnr state
Signed-off-by: David Shah <dave@ds0.me>
This commit is contained in:
parent
28279b18fe
commit
14b18cb6fa
@ -76,6 +76,10 @@
|
|||||||
* calls Func(const std::string &name, const Property &value);
|
* calls Func(const std::string &name, const Property &value);
|
||||||
* for each parameter of a cell
|
* for each parameter of a cell
|
||||||
*
|
*
|
||||||
|
* void foreach_setting(const ModuleDataType &obj, Func) const;
|
||||||
|
* calls Func(const std::string &name, const Property &value);
|
||||||
|
* for each module-level setting
|
||||||
|
*
|
||||||
* void foreach_port_dir(const CellDataType &cell, Func) const;
|
* void foreach_port_dir(const CellDataType &cell, Func) const;
|
||||||
* calls Func(const std::string &name, PortType dir);
|
* calls Func(const std::string &name, PortType dir);
|
||||||
* for each port direction of a cell
|
* for each port direction of a cell
|
||||||
@ -261,11 +265,23 @@ template <typename FrontendType> struct GenericFrontend
|
|||||||
// Just create a list of ports for netname resolution
|
// Just create a list of ports for netname resolution
|
||||||
impl.foreach_port(data,
|
impl.foreach_port(data,
|
||||||
[&](const std::string &name, const mod_port_dat_t &) { m.port_to_bus[ctx->id(name)]; });
|
[&](const std::string &name, const mod_port_dat_t &) { m.port_to_bus[ctx->id(name)]; });
|
||||||
|
// Import module-level attributes
|
||||||
|
impl.foreach_attr(
|
||||||
|
data, [&](const std::string &name, const Property &value) { ctx->attrs[ctx->id(name)] = value; });
|
||||||
|
// Import settings
|
||||||
|
impl.foreach_setting(data, [&](const std::string &name, const Property &value) {
|
||||||
|
ctx->settings[ctx->id(name)] = value;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
import_module_netnames(m, data);
|
import_module_netnames(m, data);
|
||||||
import_module_cells(m, data);
|
import_module_cells(m, data);
|
||||||
if (m.is_toplevel)
|
if (m.is_toplevel) {
|
||||||
import_toplevel_ports(m, data);
|
import_toplevel_ports(m, data);
|
||||||
|
// Mark design as loaded through nextpnr
|
||||||
|
ctx->settings[ctx->id("synth")] = 1;
|
||||||
|
// Process nextpnr-specific attributes
|
||||||
|
ctx->attributesToArchInfo();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Multiple labels might refer to the same net. Resolve conflicts for the primary name thus:
|
// Multiple labels might refer to the same net. Resolve conflicts for the primary name thus:
|
||||||
|
@ -134,6 +134,16 @@ struct JsonFrontendImpl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename TFunc> void foreach_setting(const Json &obj, TFunc Func) const
|
||||||
|
{
|
||||||
|
const auto &settings = obj["settings"];
|
||||||
|
if (settings.is_null())
|
||||||
|
return;
|
||||||
|
for (const auto &setting : settings.object_items()) {
|
||||||
|
Func(setting.first, parse_property(setting.second));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
template <typename TFunc> void foreach_port_dir(const CellDataType &cell, TFunc Func) const
|
template <typename TFunc> void foreach_port_dir(const CellDataType &cell, TFunc Func) const
|
||||||
{
|
{
|
||||||
for (const auto &pdir : cell["port_directions"].object_items())
|
for (const auto &pdir : cell["port_directions"].object_items())
|
||||||
|
Loading…
Reference in New Issue
Block a user