From: Aki Van Ness Date: Fri, 3 Dec 2021 18:44:09 +0000 (-0500) Subject: pass metadata: added the machinery to write param and attributes X-Git-Tag: yosys-0.17~47 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=bdf14557ca3a25b10b6300a76d974d95988ebdf4;p=yosys.git pass metadata: added the machinery to write param and attributes --- diff --git a/backends/metadata/metadata.cc b/backends/metadata/metadata.cc index 8f73e474f..103db533f 100644 --- a/backends/metadata/metadata.cc +++ b/backends/metadata/metadata.cc @@ -172,6 +172,21 @@ struct MetadataWriter f << " ]\n"; f << " }"; } + + void write_param_val(const Const& v) + { + if ((v.flags & RTLIL::ConstFlags::CONST_FLAG_STRING) == RTLIL::ConstFlags::CONST_FLAG_STRING) { + const auto str = v.decode_string(); + + + f << get_string(str); + } else if ((v.flags & RTLIL::ConstFlags::CONST_FLAG_SIGNED) == RTLIL::ConstFlags::CONST_FLAG_SIGNED) { + f << stringf("\"%dsd %d\"", v.size(), v.as_int()); + } else if ((v.flags & RTLIL::ConstFlags::CONST_FLAG_REAL) == RTLIL::ConstFlags::CONST_FLAG_REAL) { + + } else { + f << get_string(v.as_string()); + } } void write_cell(Cell* cell) @@ -187,10 +202,12 @@ struct MetadataWriter if (!first_attr) f << stringf(",\n"); const auto attr_val = attr.second; - if (!attr_val.empty()) - f << stringf(" %s: \"%s\"\n", get_string(RTLIL::unescape_id(attr.first)).c_str(), attr_val.decode_string().c_str()); - else - f << stringf(" %s: true\n", get_string(RTLIL::unescape_id(attr.first)).c_str()); + if (!attr_val.empty()) { + f << stringf(" %s: ", get_string(RTLIL::unescape_id(attr.first)).c_str()); + write_param_val(attr_val); + } else { + f << stringf(" %s: true", get_string(RTLIL::unescape_id(attr.first)).c_str()); + } first_attr = false; } @@ -204,10 +221,12 @@ struct MetadataWriter if (!first_param) f << stringf(",\n"); const auto param_val = param.second; - if (!param_val.empty()) - f << stringf(" %s: \"%s\"\n", get_string(RTLIL::unescape_id(param.first)).c_str(), param_val.decode_string().c_str()); - else - f << stringf(" %s: true\n", get_string(RTLIL::unescape_id(param.first)).c_str()); + if (!param_val.empty()) { + f << stringf(" %s: ", get_string(RTLIL::unescape_id(param.first)).c_str()); + write_param_val(param_val); + } else { + f << stringf(" %s: true", get_string(RTLIL::unescape_id(param.first)).c_str()); + } first_param = false; }