diff options
author | Eddie Hung <eddie@fpgeh.com> | 2019-06-20 10:18:01 -0700 |
---|---|---|
committer | Eddie Hung <eddie@fpgeh.com> | 2019-06-20 10:18:01 -0700 |
commit | f374e0ab7e9a91fa86814b0f750660e92ed16ae6 (patch) | |
tree | ae525a0ffa0e9588c833cf864f1eea62436afa4f /frontends/ast/genrtlil.cc | |
parent | 4e8f0fbce84db96f8cd3d4e1594b30cbc8ec1020 (diff) | |
parent | 477e566e8d203ec7754c90fc845d7f3f759f2974 (diff) | |
download | yosys-f374e0ab7e9a91fa86814b0f750660e92ed16ae6.tar.gz yosys-f374e0ab7e9a91fa86814b0f750660e92ed16ae6.tar.bz2 yosys-f374e0ab7e9a91fa86814b0f750660e92ed16ae6.zip |
Merge remote-tracking branch 'origin/master' into xc7mux
Diffstat (limited to 'frontends/ast/genrtlil.cc')
-rw-r--r-- | frontends/ast/genrtlil.cc | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/frontends/ast/genrtlil.cc b/frontends/ast/genrtlil.cc index 32ed401eb..079fc11e5 100644 --- a/frontends/ast/genrtlil.cc +++ b/frontends/ast/genrtlil.cc @@ -853,7 +853,6 @@ RTLIL::SigSpec AstNode::genRTLIL(int width_hint, bool sign_hint) case AST_FUNCTION: case AST_DPI_FUNCTION: case AST_AUTOWIRE: - case AST_LOCALPARAM: case AST_DEFPARAM: case AST_GENVAR: case AST_GENFOR: @@ -895,6 +894,26 @@ RTLIL::SigSpec AstNode::genRTLIL(int width_hint, bool sign_hint) // remember the parameter, needed for example in techmap case AST_PARAMETER: current_module->avail_parameters.insert(str); + /* fall through */ + case AST_LOCALPARAM: + if (flag_pwires) + { + if (GetSize(children) < 1 || children[0]->type != AST_CONSTANT) + log_file_error(filename, linenum, "Parameter `%s' with non-constant value!\n", str.c_str()); + + RTLIL::Const val = children[0]->bitsAsConst(); + RTLIL::Wire *wire = current_module->addWire(str, GetSize(val)); + current_module->connect(wire, val); + + wire->attributes["\\src"] = stringf("%s:%d", filename.c_str(), linenum); + wire->attributes[type == AST_PARAMETER ? "\\parameter" : "\\localparam"] = 1; + + for (auto &attr : attributes) { + if (attr.second->type != AST_CONSTANT) + log_file_error(filename, linenum, "Attribute `%s' with non-constant value!\n", attr.first.c_str()); + wire->attributes[attr.first] = attr.second->asAttrConst(); + } + } break; // create an RTLIL::Wire for an AST_WIRE node |