3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2025-04-28 03:15:50 +00:00

Allow reals as constant function parameters

This commit is contained in:
Zachary Snow 2020-07-19 20:27:09 -06:00
parent eed05953f8
commit f285f7b769
2 changed files with 23 additions and 3 deletions

View file

@ -3029,7 +3029,7 @@ skip_dynamic_range_lvalue_expansion:;
bool all_args_const = true;
for (auto child : children) {
while (child->simplify(true, false, false, 1, -1, false, true)) { }
if (child->type != AST_CONSTANT)
if (child->type != AST_CONSTANT && child->type != AST_REALVALUE)
all_args_const = false;
}
@ -4349,8 +4349,16 @@ AstNode *AstNode::eval_const_function(AstNode *fcall)
variables[child->str].val = RTLIL::Const(RTLIL::State::Sx, abs(child->range_left - child->range_right)+1);
variables[child->str].offset = min(child->range_left, child->range_right);
variables[child->str].is_signed = child->is_signed;
if (child->is_input && argidx < fcall->children.size())
variables[child->str].val = fcall->children.at(argidx++)->bitsAsConst(variables[child->str].val.bits.size());
if (child->is_input && argidx < fcall->children.size()) {
int width = variables[child->str].val.bits.size();
auto* arg_node = fcall->children.at(argidx++);
if (arg_node->type == AST_CONSTANT) {
variables[child->str].val = arg_node->bitsAsConst(width);
} else {
log_assert(arg_node->type == AST_REALVALUE);
variables[child->str].val = arg_node->realAsConst(width);
}
}
backup_scope[child->str] = current_scope[child->str];
current_scope[child->str] = child;
continue;