mirror of https://github.com/YosysHQ/yosys.git
Add fileinfo to firrtl backend for modules and wires
This commit is contained in:
parent
bdce9c28c2
commit
59236314f8
|
@ -96,6 +96,17 @@ void dump_const(std::ostream &f, const RTLIL::Const &data, int width = -1, int o
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string getFileinfo(dict<RTLIL::IdString, RTLIL::Const> attributes)
|
||||||
|
{
|
||||||
|
std::ostringstream fileinfo;
|
||||||
|
for (auto &it : attributes) {
|
||||||
|
if (it.first == "\\src") {
|
||||||
|
dump_const(fileinfo, it.second);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return fileinfo.str();
|
||||||
|
}
|
||||||
|
|
||||||
// Get a port direction with respect to a specific module.
|
// Get a port direction with respect to a specific module.
|
||||||
FDirection getPortFDirection(IdString id, Module *module)
|
FDirection getPortFDirection(IdString id, Module *module)
|
||||||
{
|
{
|
||||||
|
@ -448,12 +459,15 @@ struct FirrtlWorker
|
||||||
|
|
||||||
void run()
|
void run()
|
||||||
{
|
{
|
||||||
f << stringf(" module %s:\n", make_id(module->name));
|
auto moduleFileinfo = getFileinfo(module->attributes);
|
||||||
|
f << stringf(" module %s: @[%s]\n", make_id(module->name), moduleFileinfo.c_str());
|
||||||
vector<string> port_decls, wire_decls, cell_exprs, wire_exprs;
|
vector<string> port_decls, wire_decls, cell_exprs, wire_exprs;
|
||||||
|
|
||||||
for (auto wire : module->wires())
|
for (auto wire : module->wires())
|
||||||
{
|
{
|
||||||
const auto wireName = make_id(wire->name);
|
const auto wireName = make_id(wire->name);
|
||||||
|
auto wireFileinfo = getFileinfo(wire->attributes);
|
||||||
|
|
||||||
// If a wire has initial data, issue a warning since FIRRTL doesn't currently support it.
|
// If a wire has initial data, issue a warning since FIRRTL doesn't currently support it.
|
||||||
if (wire->attributes.count("\\init")) {
|
if (wire->attributes.count("\\init")) {
|
||||||
log_warning("Initial value (%s) for (%s.%s) not supported\n",
|
log_warning("Initial value (%s) for (%s.%s) not supported\n",
|
||||||
|
@ -464,12 +478,12 @@ struct FirrtlWorker
|
||||||
{
|
{
|
||||||
if (wire->port_input && wire->port_output)
|
if (wire->port_input && wire->port_output)
|
||||||
log_error("Module port %s.%s is inout!\n", log_id(module), log_id(wire));
|
log_error("Module port %s.%s is inout!\n", log_id(module), log_id(wire));
|
||||||
port_decls.push_back(stringf(" %s %s: UInt<%d>\n", wire->port_input ? "input" : "output",
|
port_decls.push_back(stringf(" %s %s: UInt<%d> @[%s]\n", wire->port_input ? "input" : "output",
|
||||||
wireName, wire->width));
|
wireName, wire->width, wireFileinfo.c_str()));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wire_decls.push_back(stringf(" wire %s: UInt<%d>\n", wireName, wire->width));
|
wire_decls.push_back(stringf(" wire %s: UInt<%d> @[%s]\n", wireName, wire->width, wireFileinfo.c_str()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1177,14 +1191,8 @@ struct FirrtlBackend : public Backend {
|
||||||
if (top == nullptr)
|
if (top == nullptr)
|
||||||
top = last;
|
top = last;
|
||||||
|
|
||||||
std::ostringstream fileinfo;
|
auto circuitFileinfo = getFileinfo(top->attributes);
|
||||||
for (auto &it : top->attributes) {
|
*f << stringf("circuit %s: @[%s]\n", make_id(top->name), circuitFileinfo.c_str());
|
||||||
if (it.first == "\\src") {
|
|
||||||
dump_const(fileinfo, it.second);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
*f << stringf("circuit %s: @[%s]\n", make_id(top->name), fileinfo.str().c_str());
|
|
||||||
|
|
||||||
for (auto module : design->modules())
|
for (auto module : design->modules())
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue