mirror of https://github.com/YosysHQ/yosys.git
Import more std:: stuff into Yosys namespace
This commit is contained in:
parent
da923c198e
commit
207736b4ee
|
@ -244,8 +244,8 @@ struct Smt2Worker
|
||||||
int width = GetSize(sig_y);
|
int width = GetSize(sig_y);
|
||||||
|
|
||||||
if (type == 's' || type == 'd' || type == 'b') {
|
if (type == 's' || type == 'd' || type == 'b') {
|
||||||
width = std::max(width, GetSize(cell->getPort("\\A")));
|
width = max(width, GetSize(cell->getPort("\\A")));
|
||||||
width = std::max(width, GetSize(cell->getPort("\\B")));
|
width = max(width, GetSize(cell->getPort("\\B")));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cell->hasPort("\\A")) {
|
if (cell->hasPort("\\A")) {
|
||||||
|
|
|
@ -244,13 +244,13 @@ struct SmvWorker
|
||||||
|
|
||||||
int width_y = GetSize(cell->getPort("\\Y"));
|
int width_y = GetSize(cell->getPort("\\Y"));
|
||||||
int shift_b_width = GetSize(sig_b);
|
int shift_b_width = GetSize(sig_b);
|
||||||
int width_ay = std::max(GetSize(sig_a), width_y);
|
int width_ay = max(GetSize(sig_a), width_y);
|
||||||
int width = width_ay;
|
int width = width_ay;
|
||||||
|
|
||||||
for (int i = 1, j = 0;; i <<= 1, j++)
|
for (int i = 1, j = 0;; i <<= 1, j++)
|
||||||
if (width_ay < i) {
|
if (width_ay < i) {
|
||||||
width = i-1;
|
width = i-1;
|
||||||
shift_b_width = std::min(shift_b_width, j);
|
shift_b_width = min(shift_b_width, j);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -361,8 +361,8 @@ struct SmvWorker
|
||||||
if (cell->type.in("$div", "$mod"))
|
if (cell->type.in("$div", "$mod"))
|
||||||
{
|
{
|
||||||
int width_y = GetSize(cell->getPort("\\Y"));
|
int width_y = GetSize(cell->getPort("\\Y"));
|
||||||
int width = std::max(width_y, GetSize(cell->getPort("\\A")));
|
int width = max(width_y, GetSize(cell->getPort("\\A")));
|
||||||
width = std::max(width, GetSize(cell->getPort("\\B")));
|
width = max(width, GetSize(cell->getPort("\\B")));
|
||||||
string expr_a, expr_b, op;
|
string expr_a, expr_b, op;
|
||||||
|
|
||||||
if (cell->type == "$div") op = "/";
|
if (cell->type == "$div") op = "/";
|
||||||
|
@ -384,7 +384,7 @@ struct SmvWorker
|
||||||
|
|
||||||
if (cell->type.in("$eq", "$ne", "$eqx", "$nex", "$lt", "$le", "$ge", "$gt"))
|
if (cell->type.in("$eq", "$ne", "$eqx", "$nex", "$lt", "$le", "$ge", "$gt"))
|
||||||
{
|
{
|
||||||
int width = std::max(GetSize(cell->getPort("\\A")), GetSize(cell->getPort("\\B")));
|
int width = max(GetSize(cell->getPort("\\A")), GetSize(cell->getPort("\\B")));
|
||||||
string expr_a, expr_b, op;
|
string expr_a, expr_b, op;
|
||||||
|
|
||||||
if (cell->type == "$eq") op = "=";
|
if (cell->type == "$eq") op = "=";
|
||||||
|
|
|
@ -547,14 +547,14 @@ void AstNode::detectSignWidthWorker(int &width_hint, bool &sign_hint, bool *foun
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case AST_CONSTANT:
|
case AST_CONSTANT:
|
||||||
width_hint = std::max(width_hint, int(bits.size()));
|
width_hint = max(width_hint, int(bits.size()));
|
||||||
if (!is_signed)
|
if (!is_signed)
|
||||||
sign_hint = false;
|
sign_hint = false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AST_REALVALUE:
|
case AST_REALVALUE:
|
||||||
*found_real = true;
|
*found_real = true;
|
||||||
width_hint = std::max(width_hint, 32);
|
width_hint = max(width_hint, 32);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AST_IDENTIFIER:
|
case AST_IDENTIFIER:
|
||||||
|
@ -617,7 +617,7 @@ void AstNode::detectSignWidthWorker(int &width_hint, bool &sign_hint, bool *foun
|
||||||
this_width = range->range_left - range->range_right + 1;
|
this_width = range->range_left - range->range_right + 1;
|
||||||
sign_hint = false;
|
sign_hint = false;
|
||||||
}
|
}
|
||||||
width_hint = std::max(width_hint, this_width);
|
width_hint = max(width_hint, this_width);
|
||||||
if (!id_ast->is_signed)
|
if (!id_ast->is_signed)
|
||||||
sign_hint = false;
|
sign_hint = false;
|
||||||
break;
|
break;
|
||||||
|
@ -627,7 +627,7 @@ void AstNode::detectSignWidthWorker(int &width_hint, bool &sign_hint, bool *foun
|
||||||
if (children[0]->type != AST_CONSTANT)
|
if (children[0]->type != AST_CONSTANT)
|
||||||
log_error("Left operand of tobits expression is not constant at %s:%d!\n", filename.c_str(), linenum);
|
log_error("Left operand of tobits expression is not constant at %s:%d!\n", filename.c_str(), linenum);
|
||||||
children[1]->detectSignWidthWorker(sub_width_hint, sign_hint);
|
children[1]->detectSignWidthWorker(sub_width_hint, sign_hint);
|
||||||
width_hint = std::max(width_hint, children[0]->bitsAsConst().as_int());
|
width_hint = max(width_hint, children[0]->bitsAsConst().as_int());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AST_TO_SIGNED:
|
case AST_TO_SIGNED:
|
||||||
|
@ -646,7 +646,7 @@ void AstNode::detectSignWidthWorker(int &width_hint, bool &sign_hint, bool *foun
|
||||||
child->detectSignWidthWorker(sub_width_hint, sub_sign_hint);
|
child->detectSignWidthWorker(sub_width_hint, sub_sign_hint);
|
||||||
this_width += sub_width_hint;
|
this_width += sub_width_hint;
|
||||||
}
|
}
|
||||||
width_hint = std::max(width_hint, this_width);
|
width_hint = max(width_hint, this_width);
|
||||||
sign_hint = false;
|
sign_hint = false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -655,7 +655,7 @@ void AstNode::detectSignWidthWorker(int &width_hint, bool &sign_hint, bool *foun
|
||||||
if (children[0]->type != AST_CONSTANT)
|
if (children[0]->type != AST_CONSTANT)
|
||||||
log_error("Left operand of replicate expression is not constant at %s:%d!\n", filename.c_str(), linenum);
|
log_error("Left operand of replicate expression is not constant at %s:%d!\n", filename.c_str(), linenum);
|
||||||
children[1]->detectSignWidthWorker(sub_width_hint, sub_sign_hint);
|
children[1]->detectSignWidthWorker(sub_width_hint, sub_sign_hint);
|
||||||
width_hint = std::max(width_hint, children[0]->bitsAsConst().as_int() * sub_width_hint);
|
width_hint = max(width_hint, children[0]->bitsAsConst().as_int() * sub_width_hint);
|
||||||
sign_hint = false;
|
sign_hint = false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -678,7 +678,7 @@ void AstNode::detectSignWidthWorker(int &width_hint, bool &sign_hint, bool *foun
|
||||||
case AST_REDUCE_XOR:
|
case AST_REDUCE_XOR:
|
||||||
case AST_REDUCE_XNOR:
|
case AST_REDUCE_XNOR:
|
||||||
case AST_REDUCE_BOOL:
|
case AST_REDUCE_BOOL:
|
||||||
width_hint = std::max(width_hint, 1);
|
width_hint = max(width_hint, 1);
|
||||||
sign_hint = false;
|
sign_hint = false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -698,7 +698,7 @@ void AstNode::detectSignWidthWorker(int &width_hint, bool &sign_hint, bool *foun
|
||||||
case AST_NEX:
|
case AST_NEX:
|
||||||
case AST_GE:
|
case AST_GE:
|
||||||
case AST_GT:
|
case AST_GT:
|
||||||
width_hint = std::max(width_hint, 1);
|
width_hint = max(width_hint, 1);
|
||||||
sign_hint = false;
|
sign_hint = false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -714,7 +714,7 @@ void AstNode::detectSignWidthWorker(int &width_hint, bool &sign_hint, bool *foun
|
||||||
case AST_LOGIC_AND:
|
case AST_LOGIC_AND:
|
||||||
case AST_LOGIC_OR:
|
case AST_LOGIC_OR:
|
||||||
case AST_LOGIC_NOT:
|
case AST_LOGIC_NOT:
|
||||||
width_hint = std::max(width_hint, 1);
|
width_hint = max(width_hint, 1);
|
||||||
sign_hint = false;
|
sign_hint = false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -729,7 +729,7 @@ void AstNode::detectSignWidthWorker(int &width_hint, bool &sign_hint, bool *foun
|
||||||
if (!id2ast->children[0]->range_valid)
|
if (!id2ast->children[0]->range_valid)
|
||||||
log_error("Failed to detect with of memory access `%s' at %s:%d!\n", str.c_str(), filename.c_str(), linenum);
|
log_error("Failed to detect with of memory access `%s' at %s:%d!\n", str.c_str(), filename.c_str(), linenum);
|
||||||
this_width = id2ast->children[0]->range_left - id2ast->children[0]->range_right + 1;
|
this_width = id2ast->children[0]->range_left - id2ast->children[0]->range_right + 1;
|
||||||
width_hint = std::max(width_hint, this_width);
|
width_hint = max(width_hint, this_width);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// everything should have been handled above -> print error if not.
|
// everything should have been handled above -> print error if not.
|
||||||
|
@ -1054,7 +1054,7 @@ RTLIL::SigSpec AstNode::genRTLIL(int width_hint, bool sign_hint)
|
||||||
detectSignWidth(width_hint, sign_hint);
|
detectSignWidth(width_hint, sign_hint);
|
||||||
RTLIL::SigSpec left = children[0]->genRTLIL(width_hint, sign_hint);
|
RTLIL::SigSpec left = children[0]->genRTLIL(width_hint, sign_hint);
|
||||||
RTLIL::SigSpec right = children[1]->genRTLIL(width_hint, sign_hint);
|
RTLIL::SigSpec right = children[1]->genRTLIL(width_hint, sign_hint);
|
||||||
int width = std::max(left.size(), right.size());
|
int width = max(left.size(), right.size());
|
||||||
if (width_hint > 0)
|
if (width_hint > 0)
|
||||||
width = width_hint;
|
width = width_hint;
|
||||||
is_signed = children[0]->is_signed && children[1]->is_signed;
|
is_signed = children[0]->is_signed && children[1]->is_signed;
|
||||||
|
@ -1068,7 +1068,7 @@ RTLIL::SigSpec AstNode::genRTLIL(int width_hint, bool sign_hint)
|
||||||
if (0) { case AST_REDUCE_XNOR: type_name = "$reduce_xnor"; }
|
if (0) { case AST_REDUCE_XNOR: type_name = "$reduce_xnor"; }
|
||||||
{
|
{
|
||||||
RTLIL::SigSpec arg = children[0]->genRTLIL();
|
RTLIL::SigSpec arg = children[0]->genRTLIL();
|
||||||
RTLIL::SigSpec sig = uniop2rtlil(this, type_name, std::max(width_hint, 1), arg);
|
RTLIL::SigSpec sig = uniop2rtlil(this, type_name, max(width_hint, 1), arg);
|
||||||
return sig;
|
return sig;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1077,7 +1077,7 @@ RTLIL::SigSpec AstNode::genRTLIL(int width_hint, bool sign_hint)
|
||||||
if (0) { case AST_REDUCE_BOOL: type_name = "$reduce_bool"; }
|
if (0) { case AST_REDUCE_BOOL: type_name = "$reduce_bool"; }
|
||||||
{
|
{
|
||||||
RTLIL::SigSpec arg = children[0]->genRTLIL();
|
RTLIL::SigSpec arg = children[0]->genRTLIL();
|
||||||
RTLIL::SigSpec sig = arg.size() > 1 ? uniop2rtlil(this, type_name, std::max(width_hint, 1), arg) : arg;
|
RTLIL::SigSpec sig = arg.size() > 1 ? uniop2rtlil(this, type_name, max(width_hint, 1), arg) : arg;
|
||||||
return sig;
|
return sig;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1123,7 +1123,7 @@ RTLIL::SigSpec AstNode::genRTLIL(int width_hint, bool sign_hint)
|
||||||
if (0) { case AST_GE: type_name = "$ge"; }
|
if (0) { case AST_GE: type_name = "$ge"; }
|
||||||
if (0) { case AST_GT: type_name = "$gt"; }
|
if (0) { case AST_GT: type_name = "$gt"; }
|
||||||
{
|
{
|
||||||
int width = std::max(width_hint, 1);
|
int width = max(width_hint, 1);
|
||||||
width_hint = -1, sign_hint = true;
|
width_hint = -1, sign_hint = true;
|
||||||
children[0]->detectSignWidthWorker(width_hint, sign_hint);
|
children[0]->detectSignWidthWorker(width_hint, sign_hint);
|
||||||
children[1]->detectSignWidthWorker(width_hint, sign_hint);
|
children[1]->detectSignWidthWorker(width_hint, sign_hint);
|
||||||
|
@ -1145,7 +1145,7 @@ RTLIL::SigSpec AstNode::genRTLIL(int width_hint, bool sign_hint)
|
||||||
RTLIL::SigSpec left = children[0]->genRTLIL(width_hint, sign_hint);
|
RTLIL::SigSpec left = children[0]->genRTLIL(width_hint, sign_hint);
|
||||||
RTLIL::SigSpec right = children[1]->genRTLIL(width_hint, sign_hint);
|
RTLIL::SigSpec right = children[1]->genRTLIL(width_hint, sign_hint);
|
||||||
#if 0
|
#if 0
|
||||||
int width = std::max(left.size(), right.size());
|
int width = max(left.size(), right.size());
|
||||||
if (width > width_hint && width_hint > 0)
|
if (width > width_hint && width_hint > 0)
|
||||||
width = width_hint;
|
width = width_hint;
|
||||||
if (width < width_hint) {
|
if (width < width_hint) {
|
||||||
|
@ -1154,10 +1154,10 @@ RTLIL::SigSpec AstNode::genRTLIL(int width_hint, bool sign_hint)
|
||||||
if (type == AST_SUB && (!children[0]->is_signed || !children[1]->is_signed))
|
if (type == AST_SUB && (!children[0]->is_signed || !children[1]->is_signed))
|
||||||
width = width_hint;
|
width = width_hint;
|
||||||
if (type == AST_MUL)
|
if (type == AST_MUL)
|
||||||
width = std::min(left.size() + right.size(), width_hint);
|
width = min(left.size() + right.size(), width_hint);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
int width = std::max(std::max(left.size(), right.size()), width_hint);
|
int width = max(max(left.size(), right.size()), width_hint);
|
||||||
#endif
|
#endif
|
||||||
is_signed = children[0]->is_signed && children[1]->is_signed;
|
is_signed = children[0]->is_signed && children[1]->is_signed;
|
||||||
return binop2rtlil(this, type_name, width, left, right);
|
return binop2rtlil(this, type_name, width, left, right);
|
||||||
|
@ -1169,14 +1169,14 @@ RTLIL::SigSpec AstNode::genRTLIL(int width_hint, bool sign_hint)
|
||||||
{
|
{
|
||||||
RTLIL::SigSpec left = children[0]->genRTLIL();
|
RTLIL::SigSpec left = children[0]->genRTLIL();
|
||||||
RTLIL::SigSpec right = children[1]->genRTLIL();
|
RTLIL::SigSpec right = children[1]->genRTLIL();
|
||||||
return binop2rtlil(this, type_name, std::max(width_hint, 1), left, right);
|
return binop2rtlil(this, type_name, max(width_hint, 1), left, right);
|
||||||
}
|
}
|
||||||
|
|
||||||
// generate cells for unary operations: $logic_not
|
// generate cells for unary operations: $logic_not
|
||||||
case AST_LOGIC_NOT:
|
case AST_LOGIC_NOT:
|
||||||
{
|
{
|
||||||
RTLIL::SigSpec arg = children[0]->genRTLIL();
|
RTLIL::SigSpec arg = children[0]->genRTLIL();
|
||||||
return uniop2rtlil(this, "$logic_not", std::max(width_hint, 1), arg);
|
return uniop2rtlil(this, "$logic_not", max(width_hint, 1), arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
// generate multiplexer for ternary operator (aka ?:-operator)
|
// generate multiplexer for ternary operator (aka ?:-operator)
|
||||||
|
@ -1192,7 +1192,7 @@ RTLIL::SigSpec AstNode::genRTLIL(int width_hint, bool sign_hint)
|
||||||
if (cond.size() > 1)
|
if (cond.size() > 1)
|
||||||
cond = uniop2rtlil(this, "$reduce_bool", 1, cond, false);
|
cond = uniop2rtlil(this, "$reduce_bool", 1, cond, false);
|
||||||
|
|
||||||
int width = std::max(val1.size(), val2.size());
|
int width = max(val1.size(), val2.size());
|
||||||
is_signed = children[1]->is_signed && children[2]->is_signed;
|
is_signed = children[1]->is_signed && children[2]->is_signed;
|
||||||
widthExtend(this, val1, width, is_signed);
|
widthExtend(this, val1, width, is_signed);
|
||||||
widthExtend(this, val2, width, is_signed);
|
widthExtend(this, val2, width, is_signed);
|
||||||
|
|
|
@ -398,7 +398,7 @@ bool AstNode::simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage,
|
||||||
did_something = true;
|
did_something = true;
|
||||||
children[0]->detectSignWidth(backup_width_hint, backup_sign_hint);
|
children[0]->detectSignWidth(backup_width_hint, backup_sign_hint);
|
||||||
children[1]->detectSignWidth(width_hint, sign_hint);
|
children[1]->detectSignWidth(width_hint, sign_hint);
|
||||||
width_hint = std::max(width_hint, backup_width_hint);
|
width_hint = max(width_hint, backup_width_hint);
|
||||||
child_0_is_self_determined = true;
|
child_0_is_self_determined = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -412,7 +412,7 @@ bool AstNode::simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage,
|
||||||
did_something = true;
|
did_something = true;
|
||||||
if (!children[1]->range_valid)
|
if (!children[1]->range_valid)
|
||||||
log_error("Non-constant width range on parameter decl at %s:%d.\n", filename.c_str(), linenum);
|
log_error("Non-constant width range on parameter decl at %s:%d.\n", filename.c_str(), linenum);
|
||||||
width_hint = std::max(width_hint, children[1]->range_left - children[1]->range_right + 1);
|
width_hint = max(width_hint, children[1]->range_left - children[1]->range_right + 1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -733,8 +733,8 @@ bool AstNode::simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage,
|
||||||
for (auto range : children[1]->children) {
|
for (auto range : children[1]->children) {
|
||||||
if (!range->range_valid)
|
if (!range->range_valid)
|
||||||
log_error("Non-constant range on memory decl at %s:%d.\n", filename.c_str(), linenum);
|
log_error("Non-constant range on memory decl at %s:%d.\n", filename.c_str(), linenum);
|
||||||
multirange_dimensions.push_back(std::min(range->range_left, range->range_right));
|
multirange_dimensions.push_back(min(range->range_left, range->range_right));
|
||||||
multirange_dimensions.push_back(std::max(range->range_left, range->range_right) - std::min(range->range_left, range->range_right) + 1);
|
multirange_dimensions.push_back(max(range->range_left, range->range_right) - min(range->range_left, range->range_right) + 1);
|
||||||
total_size *= multirange_dimensions.back();
|
total_size *= multirange_dimensions.back();
|
||||||
}
|
}
|
||||||
delete children[1];
|
delete children[1];
|
||||||
|
@ -1169,7 +1169,7 @@ bool AstNode::simplify(bool const_fold, bool at_zero, bool in_lvalue, int stage,
|
||||||
log_error("Non-constant array range on cell array at %s:%d.\n", filename.c_str(), linenum);
|
log_error("Non-constant array range on cell array at %s:%d.\n", filename.c_str(), linenum);
|
||||||
|
|
||||||
newNode = new AstNode(AST_GENBLOCK);
|
newNode = new AstNode(AST_GENBLOCK);
|
||||||
int num = std::max(children.at(0)->range_left, children.at(0)->range_right) - std::min(children.at(0)->range_left, children.at(0)->range_right) + 1;
|
int num = max(children.at(0)->range_left, children.at(0)->range_right) - min(children.at(0)->range_left, children.at(0)->range_right) + 1;
|
||||||
|
|
||||||
for (int i = 0; i < num; i++) {
|
for (int i = 0; i < num; i++) {
|
||||||
int idx = children.at(0)->range_left > children.at(0)->range_right ? children.at(0)->range_right + i : children.at(0)->range_right - i;
|
int idx = children.at(0)->range_left > children.at(0)->range_right ? children.at(0)->range_right + i : children.at(0)->range_right - i;
|
||||||
|
@ -2043,7 +2043,7 @@ skip_dynamic_range_lvalue_expansion:;
|
||||||
if (0) { case AST_GE: const_func = RTLIL::const_ge; }
|
if (0) { case AST_GE: const_func = RTLIL::const_ge; }
|
||||||
if (0) { case AST_GT: const_func = RTLIL::const_gt; }
|
if (0) { case AST_GT: const_func = RTLIL::const_gt; }
|
||||||
if (children[0]->type == AST_CONSTANT && children[1]->type == AST_CONSTANT) {
|
if (children[0]->type == AST_CONSTANT && children[1]->type == AST_CONSTANT) {
|
||||||
int cmp_width = std::max(children[0]->bits.size(), children[1]->bits.size());
|
int cmp_width = max(children[0]->bits.size(), children[1]->bits.size());
|
||||||
bool cmp_signed = children[0]->is_signed && children[1]->is_signed;
|
bool cmp_signed = children[0]->is_signed && children[1]->is_signed;
|
||||||
RTLIL::Const y = const_func(children[0]->bitsAsConst(cmp_width, cmp_signed),
|
RTLIL::Const y = const_func(children[0]->bitsAsConst(cmp_width, cmp_signed),
|
||||||
children[1]->bitsAsConst(cmp_width, cmp_signed), cmp_signed, cmp_signed, 1);
|
children[1]->bitsAsConst(cmp_width, cmp_signed), cmp_signed, cmp_signed, 1);
|
||||||
|
@ -2236,7 +2236,7 @@ AstNode *AstNode::readmem(bool is_readmemh, std::string mem_filename, AstNode *m
|
||||||
|
|
||||||
log_assert(GetSize(memory->children) == 2 && memory->children[1]->type == AST_RANGE && memory->children[1]->range_valid);
|
log_assert(GetSize(memory->children) == 2 && memory->children[1]->type == AST_RANGE && memory->children[1]->range_valid);
|
||||||
int range_left = memory->children[1]->range_left, range_right = memory->children[1]->range_right;
|
int range_left = memory->children[1]->range_left, range_right = memory->children[1]->range_right;
|
||||||
int range_min = std::min(range_left, range_right), range_max = std::max(range_left, range_right);
|
int range_min = min(range_left, range_right), range_max = max(range_left, range_right);
|
||||||
|
|
||||||
if (start_addr < 0)
|
if (start_addr < 0)
|
||||||
start_addr = range_min;
|
start_addr = range_min;
|
||||||
|
@ -2720,7 +2720,7 @@ void AstNode::meminfo(int &mem_width, int &mem_size, int &addr_bits)
|
||||||
|
|
||||||
if (mem_size < 0)
|
if (mem_size < 0)
|
||||||
mem_size *= -1;
|
mem_size *= -1;
|
||||||
mem_size += std::min(children[1]->range_left, children[1]->range_right) + 1;
|
mem_size += min(children[1]->range_left, children[1]->range_right) + 1;
|
||||||
|
|
||||||
addr_bits = 1;
|
addr_bits = 1;
|
||||||
while ((1 << addr_bits) < mem_size)
|
while ((1 << addr_bits) < mem_size)
|
||||||
|
@ -2756,8 +2756,8 @@ void AstNode::replace_variables(std::map<std::string, AstNode::varinfo_t> &varia
|
||||||
if (!children.at(0)->range_valid)
|
if (!children.at(0)->range_valid)
|
||||||
log_error("Non-constant range in %s:%d (called from %s:%d).\n",
|
log_error("Non-constant range in %s:%d (called from %s:%d).\n",
|
||||||
filename.c_str(), linenum, fcall->filename.c_str(), fcall->linenum);
|
filename.c_str(), linenum, fcall->filename.c_str(), fcall->linenum);
|
||||||
offset = std::min(children.at(0)->range_left, children.at(0)->range_right);
|
offset = min(children.at(0)->range_left, children.at(0)->range_right);
|
||||||
width = std::min(std::abs(children.at(0)->range_left - children.at(0)->range_right) + 1, width);
|
width = min(std::abs(children.at(0)->range_left - children.at(0)->range_right) + 1, width);
|
||||||
}
|
}
|
||||||
offset -= variables.at(str).offset;
|
offset -= variables.at(str).offset;
|
||||||
std::vector<RTLIL::State> &var_bits = variables.at(str).val.bits;
|
std::vector<RTLIL::State> &var_bits = variables.at(str).val.bits;
|
||||||
|
@ -2797,7 +2797,7 @@ AstNode *AstNode::eval_const_function(AstNode *fcall)
|
||||||
log_error("Can't determine size of variable %s in %s:%d (called from %s:%d).\n",
|
log_error("Can't determine size of variable %s in %s:%d (called from %s:%d).\n",
|
||||||
child->str.c_str(), child->filename.c_str(), child->linenum, fcall->filename.c_str(), fcall->linenum);
|
child->str.c_str(), child->filename.c_str(), child->linenum, fcall->filename.c_str(), fcall->linenum);
|
||||||
variables[child->str].val = RTLIL::Const(RTLIL::State::Sx, abs(child->range_left - child->range_right)+1);
|
variables[child->str].val = RTLIL::Const(RTLIL::State::Sx, abs(child->range_left - child->range_right)+1);
|
||||||
variables[child->str].offset = std::min(child->range_left, child->range_right);
|
variables[child->str].offset = min(child->range_left, child->range_right);
|
||||||
variables[child->str].is_signed = child->is_signed;
|
variables[child->str].is_signed = child->is_signed;
|
||||||
if (child->is_input && argidx < fcall->children.size())
|
if (child->is_input && argidx < fcall->children.size())
|
||||||
variables[child->str].val = fcall->children.at(argidx++)->bitsAsConst(variables[child->str].val.bits.size());
|
variables[child->str].val = fcall->children.at(argidx++)->bitsAsConst(variables[child->str].val.bits.size());
|
||||||
|
@ -2856,7 +2856,7 @@ AstNode *AstNode::eval_const_function(AstNode *fcall)
|
||||||
if (!range->range_valid)
|
if (!range->range_valid)
|
||||||
log_error("Non-constant range in %s:%d (called from %s:%d).\n",
|
log_error("Non-constant range in %s:%d (called from %s:%d).\n",
|
||||||
range->filename.c_str(), range->linenum, fcall->filename.c_str(), fcall->linenum);
|
range->filename.c_str(), range->linenum, fcall->filename.c_str(), fcall->linenum);
|
||||||
int offset = std::min(range->range_left, range->range_right);
|
int offset = min(range->range_left, range->range_right);
|
||||||
int width = std::abs(range->range_left - range->range_right) + 1;
|
int width = std::abs(range->range_left - range->range_right) + 1;
|
||||||
varinfo_t &v = variables[stmt->children.at(0)->str];
|
varinfo_t &v = variables[stmt->children.at(0)->str];
|
||||||
RTLIL::Const r = stmt->children.at(1)->bitsAsConst(v.val.bits.size());
|
RTLIL::Const r = stmt->children.at(1)->bitsAsConst(v.val.bits.size());
|
||||||
|
|
|
@ -121,7 +121,7 @@ attr_stmt:
|
||||||
|
|
||||||
autoidx_stmt:
|
autoidx_stmt:
|
||||||
TOK_AUTOIDX TOK_INT EOL {
|
TOK_AUTOIDX TOK_INT EOL {
|
||||||
autoidx = std::max(autoidx, $2);
|
autoidx = max(autoidx, $2);
|
||||||
};
|
};
|
||||||
|
|
||||||
wire_stmt:
|
wire_stmt:
|
||||||
|
|
|
@ -541,7 +541,7 @@ static void import_netlist(RTLIL::Design *design, Netlist *nl, std::set<Netlist*
|
||||||
// log(" importing portbus %s.\n", portbus->Name());
|
// log(" importing portbus %s.\n", portbus->Name());
|
||||||
|
|
||||||
RTLIL::Wire *wire = module->addWire(RTLIL::escape_id(portbus->Name()), portbus->Size());
|
RTLIL::Wire *wire = module->addWire(RTLIL::escape_id(portbus->Name()), portbus->Size());
|
||||||
wire->start_offset = std::min(portbus->LeftIndex(), portbus->RightIndex());
|
wire->start_offset = min(portbus->LeftIndex(), portbus->RightIndex());
|
||||||
import_attributes(wire->attributes, portbus);
|
import_attributes(wire->attributes, portbus);
|
||||||
|
|
||||||
if (portbus->GetDir() == DIR_INOUT || portbus->GetDir() == DIR_IN)
|
if (portbus->GetDir() == DIR_INOUT || portbus->GetDir() == DIR_IN)
|
||||||
|
@ -580,11 +580,11 @@ static void import_netlist(RTLIL::Design *design, Netlist *nl, std::set<Netlist*
|
||||||
int bits_in_word = number_of_bits;
|
int bits_in_word = number_of_bits;
|
||||||
FOREACH_PORTREF_OF_NET(net, si, pr) {
|
FOREACH_PORTREF_OF_NET(net, si, pr) {
|
||||||
if (pr->GetInst()->Type() == OPER_READ_PORT) {
|
if (pr->GetInst()->Type() == OPER_READ_PORT) {
|
||||||
bits_in_word = std::min<int>(bits_in_word, pr->GetInst()->OutputSize());
|
bits_in_word = min<int>(bits_in_word, pr->GetInst()->OutputSize());
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (pr->GetInst()->Type() == OPER_WRITE_PORT || pr->GetInst()->Type() == OPER_CLOCKED_WRITE_PORT) {
|
if (pr->GetInst()->Type() == OPER_WRITE_PORT || pr->GetInst()->Type() == OPER_CLOCKED_WRITE_PORT) {
|
||||||
bits_in_word = std::min<int>(bits_in_word, pr->GetInst()->Input2Size());
|
bits_in_word = min<int>(bits_in_word, pr->GetInst()->Input2Size());
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
log_error("Verific RamNet %s is connected to unsupported instance type %s (%s).\n",
|
log_error("Verific RamNet %s is connected to unsupported instance type %s (%s).\n",
|
||||||
|
@ -630,7 +630,7 @@ static void import_netlist(RTLIL::Design *design, Netlist *nl, std::set<Netlist*
|
||||||
|
|
||||||
RTLIL::IdString wire_name = module->uniquify(RTLIL::escape_id(netbus->Name()));
|
RTLIL::IdString wire_name = module->uniquify(RTLIL::escape_id(netbus->Name()));
|
||||||
RTLIL::Wire *wire = module->addWire(wire_name, netbus->Size());
|
RTLIL::Wire *wire = module->addWire(wire_name, netbus->Size());
|
||||||
wire->start_offset = std::min(netbus->LeftIndex(), netbus->RightIndex());
|
wire->start_offset = min(netbus->LeftIndex(), netbus->RightIndex());
|
||||||
import_attributes(wire->attributes, netbus);
|
import_attributes(wire->attributes, netbus);
|
||||||
|
|
||||||
for (int i = netbus->LeftIndex();; i += netbus->IsUp() ? +1 : -1) {
|
for (int i = netbus->LeftIndex();; i += netbus->IsUp() ? +1 : -1) {
|
||||||
|
@ -752,7 +752,7 @@ static void import_netlist(RTLIL::Design *design, Netlist *nl, std::set<Netlist*
|
||||||
if (pr->GetPort()->Bus()) {
|
if (pr->GetPort()->Bus()) {
|
||||||
port_name = pr->GetPort()->Bus()->Name();
|
port_name = pr->GetPort()->Bus()->Name();
|
||||||
port_offset = pr->GetPort()->Bus()->IndexOf(pr->GetPort()) -
|
port_offset = pr->GetPort()->Bus()->IndexOf(pr->GetPort()) -
|
||||||
std::min(pr->GetPort()->Bus()->LeftIndex(), pr->GetPort()->Bus()->RightIndex());
|
min(pr->GetPort()->Bus()->LeftIndex(), pr->GetPort()->Bus()->RightIndex());
|
||||||
}
|
}
|
||||||
RTLIL::SigSpec conn;
|
RTLIL::SigSpec conn;
|
||||||
if (cell->hasPort(RTLIL::escape_id(port_name)))
|
if (cell->hasPort(RTLIL::escape_id(port_name)))
|
||||||
|
|
|
@ -154,7 +154,7 @@ static RTLIL::Const logic_wrapper(RTLIL::State(*logic_func)(RTLIL::State, RTLIL:
|
||||||
RTLIL::Const arg1, RTLIL::Const arg2, bool signed1, bool signed2, int result_len = -1)
|
RTLIL::Const arg1, RTLIL::Const arg2, bool signed1, bool signed2, int result_len = -1)
|
||||||
{
|
{
|
||||||
if (result_len < 0)
|
if (result_len < 0)
|
||||||
result_len = std::max(arg1.bits.size(), arg2.bits.size());
|
result_len = max(arg1.bits.size(), arg2.bits.size());
|
||||||
|
|
||||||
extend_u0(arg1, result_len, signed1);
|
extend_u0(arg1, result_len, signed1);
|
||||||
extend_u0(arg2, result_len, signed2);
|
extend_u0(arg2, result_len, signed2);
|
||||||
|
@ -310,7 +310,7 @@ RTLIL::Const RTLIL::const_shl(const RTLIL::Const &arg1, const RTLIL::Const &arg2
|
||||||
RTLIL::Const RTLIL::const_shr(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool, int result_len)
|
RTLIL::Const RTLIL::const_shr(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool, int result_len)
|
||||||
{
|
{
|
||||||
RTLIL::Const arg1_ext = arg1;
|
RTLIL::Const arg1_ext = arg1;
|
||||||
extend_u0(arg1_ext, std::max(result_len, GetSize(arg1)), signed1);
|
extend_u0(arg1_ext, max(result_len, GetSize(arg1)), signed1);
|
||||||
return const_shift_worker(arg1_ext, arg2, false, +1, result_len);
|
return const_shift_worker(arg1_ext, arg2, false, +1, result_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -389,7 +389,7 @@ RTLIL::Const RTLIL::const_eq(const RTLIL::Const &arg1, const RTLIL::Const &arg2,
|
||||||
RTLIL::Const arg2_ext = arg2;
|
RTLIL::Const arg2_ext = arg2;
|
||||||
RTLIL::Const result(RTLIL::State::S0, result_len);
|
RTLIL::Const result(RTLIL::State::S0, result_len);
|
||||||
|
|
||||||
int width = std::max(arg1_ext.bits.size(), arg2_ext.bits.size());
|
int width = max(arg1_ext.bits.size(), arg2_ext.bits.size());
|
||||||
extend_u0(arg1_ext, width, signed1 && signed2);
|
extend_u0(arg1_ext, width, signed1 && signed2);
|
||||||
extend_u0(arg2_ext, width, signed1 && signed2);
|
extend_u0(arg2_ext, width, signed1 && signed2);
|
||||||
|
|
||||||
|
@ -423,7 +423,7 @@ RTLIL::Const RTLIL::const_eqx(const RTLIL::Const &arg1, const RTLIL::Const &arg2
|
||||||
RTLIL::Const arg2_ext = arg2;
|
RTLIL::Const arg2_ext = arg2;
|
||||||
RTLIL::Const result(RTLIL::State::S0, result_len);
|
RTLIL::Const result(RTLIL::State::S0, result_len);
|
||||||
|
|
||||||
int width = std::max(arg1_ext.bits.size(), arg2_ext.bits.size());
|
int width = max(arg1_ext.bits.size(), arg2_ext.bits.size());
|
||||||
extend_u0(arg1_ext, width, signed1 && signed2);
|
extend_u0(arg1_ext, width, signed1 && signed2);
|
||||||
extend_u0(arg2_ext, width, signed1 && signed2);
|
extend_u0(arg2_ext, width, signed1 && signed2);
|
||||||
|
|
||||||
|
@ -472,21 +472,21 @@ RTLIL::Const RTLIL::const_add(const RTLIL::Const &arg1, const RTLIL::Const &arg2
|
||||||
{
|
{
|
||||||
int undef_bit_pos = -1;
|
int undef_bit_pos = -1;
|
||||||
BigInteger y = const2big(arg1, signed1, undef_bit_pos) + const2big(arg2, signed2, undef_bit_pos);
|
BigInteger y = const2big(arg1, signed1, undef_bit_pos) + const2big(arg2, signed2, undef_bit_pos);
|
||||||
return big2const(y, result_len >= 0 ? result_len : std::max(arg1.bits.size(), arg2.bits.size()), undef_bit_pos);
|
return big2const(y, result_len >= 0 ? result_len : max(arg1.bits.size(), arg2.bits.size()), undef_bit_pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
RTLIL::Const RTLIL::const_sub(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
|
RTLIL::Const RTLIL::const_sub(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
|
||||||
{
|
{
|
||||||
int undef_bit_pos = -1;
|
int undef_bit_pos = -1;
|
||||||
BigInteger y = const2big(arg1, signed1, undef_bit_pos) - const2big(arg2, signed2, undef_bit_pos);
|
BigInteger y = const2big(arg1, signed1, undef_bit_pos) - const2big(arg2, signed2, undef_bit_pos);
|
||||||
return big2const(y, result_len >= 0 ? result_len : std::max(arg1.bits.size(), arg2.bits.size()), undef_bit_pos);
|
return big2const(y, result_len >= 0 ? result_len : max(arg1.bits.size(), arg2.bits.size()), undef_bit_pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
RTLIL::Const RTLIL::const_mul(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
|
RTLIL::Const RTLIL::const_mul(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
|
||||||
{
|
{
|
||||||
int undef_bit_pos = -1;
|
int undef_bit_pos = -1;
|
||||||
BigInteger y = const2big(arg1, signed1, undef_bit_pos) * const2big(arg2, signed2, undef_bit_pos);
|
BigInteger y = const2big(arg1, signed1, undef_bit_pos) * const2big(arg2, signed2, undef_bit_pos);
|
||||||
return big2const(y, result_len >= 0 ? result_len : std::max(arg1.bits.size(), arg2.bits.size()), std::min(undef_bit_pos, 0));
|
return big2const(y, result_len >= 0 ? result_len : max(arg1.bits.size(), arg2.bits.size()), min(undef_bit_pos, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
RTLIL::Const RTLIL::const_div(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
|
RTLIL::Const RTLIL::const_div(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
|
||||||
|
@ -499,7 +499,7 @@ RTLIL::Const RTLIL::const_div(const RTLIL::Const &arg1, const RTLIL::Const &arg2
|
||||||
bool result_neg = (a.getSign() == BigInteger::negative) != (b.getSign() == BigInteger::negative);
|
bool result_neg = (a.getSign() == BigInteger::negative) != (b.getSign() == BigInteger::negative);
|
||||||
a = a.getSign() == BigInteger::negative ? -a : a;
|
a = a.getSign() == BigInteger::negative ? -a : a;
|
||||||
b = b.getSign() == BigInteger::negative ? -b : b;
|
b = b.getSign() == BigInteger::negative ? -b : b;
|
||||||
return big2const(result_neg ? -(a / b) : (a / b), result_len >= 0 ? result_len : std::max(arg1.bits.size(), arg2.bits.size()), std::min(undef_bit_pos, 0));
|
return big2const(result_neg ? -(a / b) : (a / b), result_len >= 0 ? result_len : max(arg1.bits.size(), arg2.bits.size()), min(undef_bit_pos, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
RTLIL::Const RTLIL::const_mod(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
|
RTLIL::Const RTLIL::const_mod(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
|
||||||
|
@ -512,7 +512,7 @@ RTLIL::Const RTLIL::const_mod(const RTLIL::Const &arg1, const RTLIL::Const &arg2
|
||||||
bool result_neg = a.getSign() == BigInteger::negative;
|
bool result_neg = a.getSign() == BigInteger::negative;
|
||||||
a = a.getSign() == BigInteger::negative ? -a : a;
|
a = a.getSign() == BigInteger::negative ? -a : a;
|
||||||
b = b.getSign() == BigInteger::negative ? -b : b;
|
b = b.getSign() == BigInteger::negative ? -b : b;
|
||||||
return big2const(result_neg ? -(a % b) : (a % b), result_len >= 0 ? result_len : std::max(arg1.bits.size(), arg2.bits.size()), std::min(undef_bit_pos, 0));
|
return big2const(result_neg ? -(a % b) : (a % b), result_len >= 0 ? result_len : max(arg1.bits.size(), arg2.bits.size()), min(undef_bit_pos, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
RTLIL::Const RTLIL::const_pow(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
|
RTLIL::Const RTLIL::const_pow(const RTLIL::Const &arg1, const RTLIL::Const &arg2, bool signed1, bool signed2, int result_len)
|
||||||
|
@ -563,7 +563,7 @@ RTLIL::Const RTLIL::const_pow(const RTLIL::Const &arg1, const RTLIL::Const &arg2
|
||||||
y *= -1;
|
y *= -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return big2const(y, result_len >= 0 ? result_len : std::max(arg1.bits.size(), arg2.bits.size()), std::min(undef_bit_pos, 0));
|
return big2const(y, result_len >= 0 ? result_len : max(arg1.bits.size(), arg2.bits.size()), min(undef_bit_pos, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
RTLIL::Const RTLIL::const_pos(const RTLIL::Const &arg1, const RTLIL::Const&, bool signed1, bool, int result_len)
|
RTLIL::Const RTLIL::const_pos(const RTLIL::Const &arg1, const RTLIL::Const&, bool signed1, bool, int result_len)
|
||||||
|
|
|
@ -392,7 +392,7 @@ Aig::Aig(Cell *cell)
|
||||||
|
|
||||||
if (cell->type.in("$eq", "$ne"))
|
if (cell->type.in("$eq", "$ne"))
|
||||||
{
|
{
|
||||||
int width = std::max(GetSize(cell->getPort("\\A")), GetSize(cell->getPort("\\B")));
|
int width = max(GetSize(cell->getPort("\\A")), GetSize(cell->getPort("\\B")));
|
||||||
vector<int> A = mk.inport_vec("\\A", width);
|
vector<int> A = mk.inport_vec("\\A", width);
|
||||||
vector<int> B = mk.inport_vec("\\B", width);
|
vector<int> B = mk.inport_vec("\\B", width);
|
||||||
int Y = mk.bool_node(false);
|
int Y = mk.bool_node(false);
|
||||||
|
|
|
@ -404,7 +404,7 @@ int main(int argc, char **argv)
|
||||||
log("%s\n", yosys_version_str);
|
log("%s\n", yosys_version_str);
|
||||||
|
|
||||||
int64_t total_ns = 0;
|
int64_t total_ns = 0;
|
||||||
std::set<std::tuple<int64_t, int, std::string>> timedat;
|
std::set<tuple<int64_t, int, std::string>> timedat;
|
||||||
|
|
||||||
for (auto &it : pass_register)
|
for (auto &it : pass_register)
|
||||||
if (it.second->call_counter) {
|
if (it.second->call_counter) {
|
||||||
|
|
|
@ -158,8 +158,8 @@ struct Macc
|
||||||
int max_size = 0, num_bits = 0;
|
int max_size = 0, num_bits = 0;
|
||||||
|
|
||||||
for (auto &port : ports) {
|
for (auto &port : ports) {
|
||||||
max_size = std::max(max_size, GetSize(port.in_a));
|
max_size = max(max_size, GetSize(port.in_a));
|
||||||
max_size = std::max(max_size, GetSize(port.in_b));
|
max_size = max(max_size, GetSize(port.in_b));
|
||||||
}
|
}
|
||||||
|
|
||||||
while (max_size)
|
while (max_size)
|
||||||
|
|
|
@ -981,11 +981,11 @@ namespace {
|
||||||
param("\\SIZE");
|
param("\\SIZE");
|
||||||
param("\\OFFSET");
|
param("\\OFFSET");
|
||||||
param("\\INIT");
|
param("\\INIT");
|
||||||
param_bits("\\RD_CLK_ENABLE", std::max(1, param("\\RD_PORTS")));
|
param_bits("\\RD_CLK_ENABLE", max(1, param("\\RD_PORTS")));
|
||||||
param_bits("\\RD_CLK_POLARITY", std::max(1, param("\\RD_PORTS")));
|
param_bits("\\RD_CLK_POLARITY", max(1, param("\\RD_PORTS")));
|
||||||
param_bits("\\RD_TRANSPARENT", std::max(1, param("\\RD_PORTS")));
|
param_bits("\\RD_TRANSPARENT", max(1, param("\\RD_PORTS")));
|
||||||
param_bits("\\WR_CLK_ENABLE", std::max(1, param("\\WR_PORTS")));
|
param_bits("\\WR_CLK_ENABLE", max(1, param("\\WR_PORTS")));
|
||||||
param_bits("\\WR_CLK_POLARITY", std::max(1, param("\\WR_PORTS")));
|
param_bits("\\WR_CLK_POLARITY", max(1, param("\\WR_PORTS")));
|
||||||
port("\\RD_CLK", param("\\RD_PORTS"));
|
port("\\RD_CLK", param("\\RD_PORTS"));
|
||||||
port("\\RD_EN", param("\\RD_PORTS"));
|
port("\\RD_EN", param("\\RD_PORTS"));
|
||||||
port("\\RD_ADDR", param("\\RD_PORTS") * param("\\ABITS"));
|
port("\\RD_ADDR", param("\\RD_PORTS") * param("\\ABITS"));
|
||||||
|
@ -1601,10 +1601,10 @@ DEF_METHOD(LogicNot, 1, "$logic_not")
|
||||||
add ## _func(name, sig_a, sig_b, sig_y, is_signed); \
|
add ## _func(name, sig_a, sig_b, sig_y, is_signed); \
|
||||||
return sig_y; \
|
return sig_y; \
|
||||||
}
|
}
|
||||||
DEF_METHOD(And, std::max(sig_a.size(), sig_b.size()), "$and")
|
DEF_METHOD(And, max(sig_a.size(), sig_b.size()), "$and")
|
||||||
DEF_METHOD(Or, std::max(sig_a.size(), sig_b.size()), "$or")
|
DEF_METHOD(Or, max(sig_a.size(), sig_b.size()), "$or")
|
||||||
DEF_METHOD(Xor, std::max(sig_a.size(), sig_b.size()), "$xor")
|
DEF_METHOD(Xor, max(sig_a.size(), sig_b.size()), "$xor")
|
||||||
DEF_METHOD(Xnor, std::max(sig_a.size(), sig_b.size()), "$xnor")
|
DEF_METHOD(Xnor, max(sig_a.size(), sig_b.size()), "$xnor")
|
||||||
DEF_METHOD(Shl, sig_a.size(), "$shl")
|
DEF_METHOD(Shl, sig_a.size(), "$shl")
|
||||||
DEF_METHOD(Shr, sig_a.size(), "$shr")
|
DEF_METHOD(Shr, sig_a.size(), "$shr")
|
||||||
DEF_METHOD(Sshl, sig_a.size(), "$sshl")
|
DEF_METHOD(Sshl, sig_a.size(), "$sshl")
|
||||||
|
@ -1619,11 +1619,11 @@ DEF_METHOD(Eqx, 1, "$eqx")
|
||||||
DEF_METHOD(Nex, 1, "$nex")
|
DEF_METHOD(Nex, 1, "$nex")
|
||||||
DEF_METHOD(Ge, 1, "$ge")
|
DEF_METHOD(Ge, 1, "$ge")
|
||||||
DEF_METHOD(Gt, 1, "$gt")
|
DEF_METHOD(Gt, 1, "$gt")
|
||||||
DEF_METHOD(Add, std::max(sig_a.size(), sig_b.size()), "$add")
|
DEF_METHOD(Add, max(sig_a.size(), sig_b.size()), "$add")
|
||||||
DEF_METHOD(Sub, std::max(sig_a.size(), sig_b.size()), "$sub")
|
DEF_METHOD(Sub, max(sig_a.size(), sig_b.size()), "$sub")
|
||||||
DEF_METHOD(Mul, std::max(sig_a.size(), sig_b.size()), "$mul")
|
DEF_METHOD(Mul, max(sig_a.size(), sig_b.size()), "$mul")
|
||||||
DEF_METHOD(Div, std::max(sig_a.size(), sig_b.size()), "$div")
|
DEF_METHOD(Div, max(sig_a.size(), sig_b.size()), "$div")
|
||||||
DEF_METHOD(Mod, std::max(sig_a.size(), sig_b.size()), "$mod")
|
DEF_METHOD(Mod, max(sig_a.size(), sig_b.size()), "$mod")
|
||||||
DEF_METHOD(LogicAnd, 1, "$logic_and")
|
DEF_METHOD(LogicAnd, 1, "$logic_and")
|
||||||
DEF_METHOD(LogicOr, 1, "$logic_or")
|
DEF_METHOD(LogicOr, 1, "$logic_or")
|
||||||
#undef DEF_METHOD
|
#undef DEF_METHOD
|
||||||
|
|
|
@ -980,7 +980,7 @@ struct SatGen
|
||||||
div_zero_result.insert(div_zero_result.end(), y.size() - div_zero_result.size(), ez->CONST_FALSE);
|
div_zero_result.insert(div_zero_result.end(), y.size() - div_zero_result.size(), ez->CONST_FALSE);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
int copy_a_bits = std::min(cell->getPort("\\A").size(), cell->getPort("\\B").size());
|
int copy_a_bits = min(cell->getPort("\\A").size(), cell->getPort("\\B").size());
|
||||||
div_zero_result.insert(div_zero_result.end(), a.begin(), a.begin() + copy_a_bits);
|
div_zero_result.insert(div_zero_result.end(), a.begin(), a.begin() + copy_a_bits);
|
||||||
if (cell->parameters["\\A_SIGNED"].as_bool() && cell->parameters["\\B_SIGNED"].as_bool())
|
if (cell->parameters["\\A_SIGNED"].as_bool() && cell->parameters["\\B_SIGNED"].as_bool())
|
||||||
div_zero_result.insert(div_zero_result.end(), y.size() - div_zero_result.size(), div_zero_result.back());
|
div_zero_result.insert(div_zero_result.end(), y.size() - div_zero_result.size(), div_zero_result.back());
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <set>
|
#include <set>
|
||||||
|
#include <tuple>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
@ -138,8 +139,14 @@ YOSYS_NAMESPACE_BEGIN
|
||||||
|
|
||||||
using std::vector;
|
using std::vector;
|
||||||
using std::string;
|
using std::string;
|
||||||
|
using std::tuple;
|
||||||
using std::pair;
|
using std::pair;
|
||||||
|
|
||||||
|
using std::make_tuple;
|
||||||
|
using std::make_pair;
|
||||||
|
using std::min;
|
||||||
|
using std::max;
|
||||||
|
|
||||||
// A primitive shared string implementation that does not
|
// A primitive shared string implementation that does not
|
||||||
// move its .c_str() when the object is copied or moved.
|
// move its .c_str() when the object is copied or moved.
|
||||||
struct shared_str {
|
struct shared_str {
|
||||||
|
|
|
@ -52,7 +52,7 @@ struct EdgetypePass : public Pass {
|
||||||
for (auto module : design->selected_modules())
|
for (auto module : design->selected_modules())
|
||||||
{
|
{
|
||||||
SigMap sigmap(module);
|
SigMap sigmap(module);
|
||||||
dict<SigBit, pool<std::tuple<IdString, IdString, int>>> bit_sources, bit_sinks;
|
dict<SigBit, pool<tuple<IdString, IdString, int>>> bit_sources, bit_sinks;
|
||||||
pool<std::pair<IdString, IdString>> multibit_ports;
|
pool<std::pair<IdString, IdString>> multibit_ports;
|
||||||
|
|
||||||
for (auto cell : module->selected_cells())
|
for (auto cell : module->selected_cells())
|
||||||
|
@ -67,9 +67,9 @@ struct EdgetypePass : public Pass {
|
||||||
|
|
||||||
for (int i = 0; i < GetSize(sig); i++) {
|
for (int i = 0; i < GetSize(sig); i++) {
|
||||||
if (cell->output(port_name))
|
if (cell->output(port_name))
|
||||||
bit_sources[sig[i]].insert(std::tuple<IdString, IdString, int>(cell_type, port_name, i));
|
bit_sources[sig[i]].insert(tuple<IdString, IdString, int>(cell_type, port_name, i));
|
||||||
if (cell->input(port_name))
|
if (cell->input(port_name))
|
||||||
bit_sinks[sig[i]].insert(std::tuple<IdString, IdString, int>(cell_type, port_name, i));
|
bit_sinks[sig[i]].insert(tuple<IdString, IdString, int>(cell_type, port_name, i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -115,7 +115,7 @@ struct PluginPass : public Pass {
|
||||||
log("\n");
|
log("\n");
|
||||||
int max_alias_len = 1;
|
int max_alias_len = 1;
|
||||||
for (auto &it : loaded_plugin_aliases)
|
for (auto &it : loaded_plugin_aliases)
|
||||||
max_alias_len = std::max(max_alias_len, GetSize(it.first));
|
max_alias_len = max(max_alias_len, GetSize(it.first));
|
||||||
for (auto &it : loaded_plugin_aliases)
|
for (auto &it : loaded_plugin_aliases)
|
||||||
log("Alias: %-*s %s\n", max_alias_len, it.first.c_str(), it.second.c_str());
|
log("Alias: %-*s %s\n", max_alias_len, it.first.c_str(), it.second.c_str());
|
||||||
}
|
}
|
||||||
|
|
|
@ -342,8 +342,8 @@ struct QwpWorker
|
||||||
double r = alt_mode ? alt_radius : radius;
|
double r = alt_mode ? alt_radius : radius;
|
||||||
|
|
||||||
if (std::isfinite(v)) {
|
if (std::isfinite(v)) {
|
||||||
v = std::min(v, c+r);
|
v = min(v, c+r);
|
||||||
v = std::max(v, c-r);
|
v = max(v, c-r);
|
||||||
} else {
|
} else {
|
||||||
v = c;
|
v = c;
|
||||||
}
|
}
|
||||||
|
@ -524,15 +524,15 @@ struct QwpWorker
|
||||||
if (rel_pos < 0) {
|
if (rel_pos < 0) {
|
||||||
node.pos = midpos + left_scale*rel_pos;
|
node.pos = midpos + left_scale*rel_pos;
|
||||||
if (std::isfinite(node.pos)) {
|
if (std::isfinite(node.pos)) {
|
||||||
node.pos = std::min(node.pos, midpos);
|
node.pos = min(node.pos, midpos);
|
||||||
node.pos = std::max(node.pos, midpos - radius);
|
node.pos = max(node.pos, midpos - radius);
|
||||||
} else
|
} else
|
||||||
node.pos = midpos - radius/2;
|
node.pos = midpos - radius/2;
|
||||||
} else {
|
} else {
|
||||||
node.pos = midpos + right_scale*rel_pos;
|
node.pos = midpos + right_scale*rel_pos;
|
||||||
if (std::isfinite(node.pos)) {
|
if (std::isfinite(node.pos)) {
|
||||||
node.pos = std::max(node.pos, midpos);
|
node.pos = max(node.pos, midpos);
|
||||||
node.pos = std::min(node.pos, midpos + radius);
|
node.pos = min(node.pos, midpos + radius);
|
||||||
} else
|
} else
|
||||||
node.pos = midpos + radius/2;
|
node.pos = midpos + radius/2;
|
||||||
}
|
}
|
||||||
|
@ -666,8 +666,8 @@ struct QwpWorker
|
||||||
double max_value = values.front();
|
double max_value = values.front();
|
||||||
|
|
||||||
for (auto &v : values) {
|
for (auto &v : values) {
|
||||||
min_value = std::min(min_value, v);
|
min_value = min(min_value, v);
|
||||||
max_value = std::max(max_value, v);
|
max_value = max(max_value, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fabs(max_value - min_value) < 0.001) {
|
if (fabs(max_value - min_value) < 0.001) {
|
||||||
|
@ -679,8 +679,8 @@ struct QwpWorker
|
||||||
int max_bucket_val = 0;
|
int max_bucket_val = 0;
|
||||||
|
|
||||||
for (auto &v : values) {
|
for (auto &v : values) {
|
||||||
int idx = std::min(int(GetSize(buckets) * (v - min_value) / (max_value - min_value)), GetSize(buckets)-1);
|
int idx = min(int(GetSize(buckets) * (v - min_value) / (max_value - min_value)), GetSize(buckets)-1);
|
||||||
max_bucket_val = std::max(max_bucket_val, ++buckets.at(idx));
|
max_bucket_val = max(max_bucket_val, ++buckets.at(idx));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 4; i >= 0; i--) {
|
for (int i = 4; i >= 0; i--) {
|
||||||
|
|
|
@ -69,10 +69,10 @@ struct SccWorker
|
||||||
for (auto nextCell : cellToNextCell[cell])
|
for (auto nextCell : cellToNextCell[cell])
|
||||||
if (cellLabels.count(nextCell) == 0) {
|
if (cellLabels.count(nextCell) == 0) {
|
||||||
run(nextCell, depth+1, maxDepth);
|
run(nextCell, depth+1, maxDepth);
|
||||||
cellLabels[cell].second = std::min(cellLabels[cell].second, cellLabels[nextCell].second);
|
cellLabels[cell].second = min(cellLabels[cell].second, cellLabels[nextCell].second);
|
||||||
} else
|
} else
|
||||||
if (cellsOnStack.count(nextCell) > 0 && (maxDepth < 0 || cellDepth[nextCell] + maxDepth > depth)) {
|
if (cellsOnStack.count(nextCell) > 0 && (maxDepth < 0 || cellDepth[nextCell] + maxDepth > depth)) {
|
||||||
cellLabels[cell].second = std::min(cellLabels[cell].second, cellLabels[nextCell].second);
|
cellLabels[cell].second = min(cellLabels[cell].second, cellLabels[nextCell].second);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cellLabels[cell].first == cellLabels[cell].second)
|
if (cellLabels[cell].first == cellLabels[cell].second)
|
||||||
|
|
|
@ -140,8 +140,8 @@ struct SplitnetsPass : public Pass {
|
||||||
|
|
||||||
for (auto wire : module->wires())
|
for (auto wire : module->wires())
|
||||||
if (wire->port_id != 0) {
|
if (wire->port_id != 0) {
|
||||||
normalized_port_factor = std::max(normalized_port_factor, wire->port_id+1);
|
normalized_port_factor = max(normalized_port_factor, wire->port_id+1);
|
||||||
normalized_port_factor = std::max(normalized_port_factor, GetSize(wire)+1);
|
normalized_port_factor = max(normalized_port_factor, GetSize(wire)+1);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto wire : module->wires())
|
for (auto wire : module->wires())
|
||||||
|
|
|
@ -110,7 +110,7 @@ struct statdata_t
|
||||||
int width_a = it.second->hasPort("\\A") ? GetSize(it.second->getPort("\\A")) : 0;
|
int width_a = it.second->hasPort("\\A") ? GetSize(it.second->getPort("\\A")) : 0;
|
||||||
int width_b = it.second->hasPort("\\B") ? GetSize(it.second->getPort("\\B")) : 0;
|
int width_b = it.second->hasPort("\\B") ? GetSize(it.second->getPort("\\B")) : 0;
|
||||||
int width_y = it.second->hasPort("\\Y") ? GetSize(it.second->getPort("\\Y")) : 0;
|
int width_y = it.second->hasPort("\\Y") ? GetSize(it.second->getPort("\\Y")) : 0;
|
||||||
cell_type = stringf("%s_%d", cell_type.c_str(), std::max<int>({width_a, width_b, width_y}));
|
cell_type = stringf("%s_%d", cell_type.c_str(), max<int>({width_a, width_b, width_y}));
|
||||||
}
|
}
|
||||||
else if (cell_type.in("$mux", "$pmux"))
|
else if (cell_type.in("$mux", "$pmux"))
|
||||||
cell_type = stringf("%s_%d", cell_type.c_str(), GetSize(it.second->getPort("\\Y")));
|
cell_type = stringf("%s_%d", cell_type.c_str(), GetSize(it.second->getPort("\\Y")));
|
||||||
|
|
|
@ -63,7 +63,7 @@ struct EquivAddPass : public Pass {
|
||||||
auto port = conn.first;
|
auto port = conn.first;
|
||||||
SigSpec gold_sig = gold_cell->getPort(port);
|
SigSpec gold_sig = gold_cell->getPort(port);
|
||||||
SigSpec gate_sig = gate_cell->getPort(port);
|
SigSpec gate_sig = gate_cell->getPort(port);
|
||||||
int width = std::min(GetSize(gold_sig), GetSize(gate_sig));
|
int width = min(GetSize(gold_sig), GetSize(gate_sig));
|
||||||
|
|
||||||
if (gold_cell->input(port) && gate_cell->input(port))
|
if (gold_cell->input(port) && gate_cell->input(port))
|
||||||
{
|
{
|
||||||
|
|
|
@ -39,7 +39,7 @@ struct FsmData
|
||||||
int state_num_log2 = 0;
|
int state_num_log2 = 0;
|
||||||
for (int i = state_table.size(); i > 0; i = i >> 1)
|
for (int i = state_table.size(); i > 0; i = i >> 1)
|
||||||
state_num_log2++;
|
state_num_log2++;
|
||||||
state_num_log2 = std::max(state_num_log2, 1);
|
state_num_log2 = max(state_num_log2, 1);
|
||||||
|
|
||||||
cell->parameters["\\STATE_BITS"] = RTLIL::Const(state_bits);
|
cell->parameters["\\STATE_BITS"] = RTLIL::Const(state_bits);
|
||||||
cell->parameters["\\STATE_NUM"] = RTLIL::Const(state_table.size());
|
cell->parameters["\\STATE_NUM"] = RTLIL::Const(state_table.size());
|
||||||
|
|
|
@ -66,7 +66,7 @@ void generate(RTLIL::Design *design, const std::vector<std::string> &celltypes,
|
||||||
for (auto &conn : i2.second->connections()) {
|
for (auto &conn : i2.second->connections()) {
|
||||||
if (conn.first[0] != '$')
|
if (conn.first[0] != '$')
|
||||||
portnames.insert(conn.first);
|
portnames.insert(conn.first);
|
||||||
portwidths[conn.first] = std::max(portwidths[conn.first], conn.second.size());
|
portwidths[conn.first] = max(portwidths[conn.first], conn.second.size());
|
||||||
}
|
}
|
||||||
for (auto ¶ : i2.second->parameters)
|
for (auto ¶ : i2.second->parameters)
|
||||||
parameters.insert(para.first);
|
parameters.insert(para.first);
|
||||||
|
@ -84,8 +84,8 @@ void generate(RTLIL::Design *design, const std::vector<std::string> &celltypes,
|
||||||
|
|
||||||
for (auto &decl : portdecls)
|
for (auto &decl : portdecls)
|
||||||
if (decl.index > 0) {
|
if (decl.index > 0) {
|
||||||
portwidths[decl.portname] = std::max(portwidths[decl.portname], 1);
|
portwidths[decl.portname] = max(portwidths[decl.portname], 1);
|
||||||
portwidths[decl.portname] = std::max(portwidths[decl.portname], portwidths[stringf("$%d", decl.index)]);
|
portwidths[decl.portname] = max(portwidths[decl.portname], portwidths[stringf("$%d", decl.index)]);
|
||||||
log(" port %d: %s [%d:0] %s\n", decl.index, decl.input ? decl.output ? "inout" : "input" : "output", portwidths[decl.portname]-1, RTLIL::id2cstr(decl.portname));
|
log(" port %d: %s [%d:0] %s\n", decl.index, decl.input ? decl.output ? "inout" : "input" : "output", portwidths[decl.portname]-1, RTLIL::id2cstr(decl.portname));
|
||||||
if (indices.count(decl.index) > ports.size())
|
if (indices.count(decl.index) > ports.size())
|
||||||
log_error("Port index (%d) exceeds number of found ports (%d).\n", decl.index, int(ports.size()));
|
log_error("Port index (%d) exceeds number of found ports (%d).\n", decl.index, int(ports.size()));
|
||||||
|
@ -106,7 +106,7 @@ void generate(RTLIL::Design *design, const std::vector<std::string> &celltypes,
|
||||||
log_assert(!indices.empty());
|
log_assert(!indices.empty());
|
||||||
indices.erase(d.index);
|
indices.erase(d.index);
|
||||||
ports[d.index-1] = d;
|
ports[d.index-1] = d;
|
||||||
portwidths[d.portname] = std::max(portwidths[d.portname], 1);
|
portwidths[d.portname] = max(portwidths[d.portname], 1);
|
||||||
log(" port %d: %s [%d:0] %s\n", d.index, d.input ? d.output ? "inout" : "input" : "output", portwidths[d.portname]-1, RTLIL::id2cstr(d.portname));
|
log(" port %d: %s [%d:0] %s\n", d.index, d.input ? d.output ? "inout" : "input" : "output", portwidths[d.portname]-1, RTLIL::id2cstr(d.portname));
|
||||||
goto found_matching_decl;
|
goto found_matching_decl;
|
||||||
}
|
}
|
||||||
|
@ -327,7 +327,7 @@ int find_top_mod_score(Design *design, Module *module, dict<Module*, int> &db)
|
||||||
db[module] = 0;
|
db[module] = 0;
|
||||||
for (auto cell : module->cells())
|
for (auto cell : module->cells())
|
||||||
if (design->module(cell->type))
|
if (design->module(cell->type))
|
||||||
db[module] = std::max(db[module], find_top_mod_score(design, design->module(cell->type), db) + 1);
|
db[module] = max(db[module], find_top_mod_score(design, design->module(cell->type), db) + 1);
|
||||||
}
|
}
|
||||||
return db.at(module);
|
return db.at(module);
|
||||||
}
|
}
|
||||||
|
|
|
@ -387,9 +387,9 @@ bool replace_cell(Cell *cell, const rules_t &rules, const rules_t::bram_t &bram,
|
||||||
if (pi.clkpol > 1)
|
if (pi.clkpol > 1)
|
||||||
clkpol_wr_ports.insert(pi.clkpol);
|
clkpol_wr_ports.insert(pi.clkpol);
|
||||||
}
|
}
|
||||||
clocks_max = std::max(clocks_max, pi.clocks);
|
clocks_max = max(clocks_max, pi.clocks);
|
||||||
clkpol_max = std::max(clkpol_max, pi.clkpol);
|
clkpol_max = max(clkpol_max, pi.clkpol);
|
||||||
transp_max = std::max(transp_max, pi.transp);
|
transp_max = max(transp_max, pi.transp);
|
||||||
}
|
}
|
||||||
|
|
||||||
log(" Mapping to bram type %s (variant %d):\n", log_id(bram.name), bram.variant);
|
log(" Mapping to bram type %s (variant %d):\n", log_id(bram.name), bram.variant);
|
||||||
|
@ -977,7 +977,7 @@ void handle_cell(Cell *cell, const rules_t &rules)
|
||||||
log("\n");
|
log("\n");
|
||||||
|
|
||||||
pool<pair<IdString, int>> failed_brams;
|
pool<pair<IdString, int>> failed_brams;
|
||||||
dict<pair<int, int>, std::tuple<int, int, int>> best_rule_cache;
|
dict<pair<int, int>, tuple<int, int, int>> best_rule_cache;
|
||||||
|
|
||||||
for (int i = 0; i < GetSize(rules.matches); i++)
|
for (int i = 0; i < GetSize(rules.matches); i++)
|
||||||
{
|
{
|
||||||
|
@ -1078,7 +1078,7 @@ void handle_cell(Cell *cell, const rules_t &rules)
|
||||||
}
|
}
|
||||||
|
|
||||||
log(" Storing for later selection.\n");
|
log(" Storing for later selection.\n");
|
||||||
best_rule_cache[pair<int, int>(i, vi)] = std::tuple<int, int, int>(match_properties["efficiency"], -match_properties["cells"], -match_properties["acells"]);
|
best_rule_cache[pair<int, int>(i, vi)] = tuple<int, int, int>(match_properties["efficiency"], -match_properties["cells"], -match_properties["acells"]);
|
||||||
|
|
||||||
next_match_rule:
|
next_match_rule:
|
||||||
if (or_next_if_better || best_rule_cache.empty())
|
if (or_next_if_better || best_rule_cache.empty())
|
||||||
|
|
|
@ -64,7 +64,7 @@ Cell *handle_memory(Module *module, RTLIL::Memory *memory)
|
||||||
for (auto &cell_it : module->cells_) {
|
for (auto &cell_it : module->cells_) {
|
||||||
Cell *cell = cell_it.second;
|
Cell *cell = cell_it.second;
|
||||||
if (cell->type.in("$memrd", "$memwr", "$meminit") && memory->name == cell->parameters["\\MEMID"].decode_string()) {
|
if (cell->type.in("$memrd", "$memwr", "$meminit") && memory->name == cell->parameters["\\MEMID"].decode_string()) {
|
||||||
addr_bits = std::max(addr_bits, cell->getParam("\\ABITS").as_int());
|
addr_bits = max(addr_bits, cell->getParam("\\ABITS").as_int());
|
||||||
memcells.push_back(cell);
|
memcells.push_back(cell);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -210,7 +210,7 @@ struct MemoryShareWorker
|
||||||
if (non_feedback_nets.count(sig_data[i]))
|
if (non_feedback_nets.count(sig_data[i]))
|
||||||
goto not_pure_feedback_port;
|
goto not_pure_feedback_port;
|
||||||
|
|
||||||
async_rd_bits[sig_addr].resize(std::max(async_rd_bits.size(), sig_data.size()));
|
async_rd_bits[sig_addr].resize(max(async_rd_bits.size(), sig_data.size()));
|
||||||
for (int i = 0; i < int(sig_data.size()); i++)
|
for (int i = 0; i < int(sig_data.size()); i++)
|
||||||
async_rd_bits[sig_addr][i].insert(sig_data[i]);
|
async_rd_bits[sig_addr][i].insert(sig_data[i]);
|
||||||
|
|
||||||
|
|
|
@ -589,7 +589,7 @@ void replace_const_cells(RTLIL::Design *design, RTLIL::Module *module, bool cons
|
||||||
RTLIL::SigSpec b = cell->getPort("\\B");
|
RTLIL::SigSpec b = cell->getPort("\\B");
|
||||||
|
|
||||||
if (cell->parameters["\\A_WIDTH"].as_int() != cell->parameters["\\B_WIDTH"].as_int()) {
|
if (cell->parameters["\\A_WIDTH"].as_int() != cell->parameters["\\B_WIDTH"].as_int()) {
|
||||||
int width = std::max(cell->parameters["\\A_WIDTH"].as_int(), cell->parameters["\\B_WIDTH"].as_int());
|
int width = max(cell->parameters["\\A_WIDTH"].as_int(), cell->parameters["\\B_WIDTH"].as_int());
|
||||||
a.extend_u0(width, cell->parameters["\\A_SIGNED"].as_bool() && cell->parameters["\\B_SIGNED"].as_bool());
|
a.extend_u0(width, cell->parameters["\\A_SIGNED"].as_bool() && cell->parameters["\\B_SIGNED"].as_bool());
|
||||||
b.extend_u0(width, cell->parameters["\\A_SIGNED"].as_bool() && cell->parameters["\\B_SIGNED"].as_bool());
|
b.extend_u0(width, cell->parameters["\\A_SIGNED"].as_bool() && cell->parameters["\\B_SIGNED"].as_bool());
|
||||||
}
|
}
|
||||||
|
|
|
@ -113,8 +113,8 @@ struct ShareWorker
|
||||||
static int bits_macc_port(const Macc::port_t &p, int width)
|
static int bits_macc_port(const Macc::port_t &p, int width)
|
||||||
{
|
{
|
||||||
if (GetSize(p.in_a) == 0 || GetSize(p.in_b) == 0)
|
if (GetSize(p.in_a) == 0 || GetSize(p.in_b) == 0)
|
||||||
return std::min(std::max(GetSize(p.in_a), GetSize(p.in_b)), width);
|
return min(max(GetSize(p.in_a), GetSize(p.in_b)), width);
|
||||||
return std::min(GetSize(p.in_a), width) * std::min(GetSize(p.in_b), width) / 2;
|
return min(GetSize(p.in_a), width) * min(GetSize(p.in_b), width) / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int bits_macc(const Macc &m, int width)
|
static int bits_macc(const Macc &m, int width)
|
||||||
|
@ -224,13 +224,13 @@ struct ShareWorker
|
||||||
supermacc->ports.push_back(p);
|
supermacc->ports.push_back(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
int score = 1000 + abs(GetSize(p1.in_a) - GetSize(p2.in_a)) * std::max(abs(GetSize(p1.in_b) - GetSize(p2.in_b)), 1);
|
int score = 1000 + abs(GetSize(p1.in_a) - GetSize(p2.in_a)) * max(abs(GetSize(p1.in_b) - GetSize(p2.in_b)), 1);
|
||||||
|
|
||||||
for (int i = 0; i < std::min(GetSize(p1.in_a), GetSize(p2.in_a)); i++)
|
for (int i = 0; i < min(GetSize(p1.in_a), GetSize(p2.in_a)); i++)
|
||||||
if (p1.in_a[i] == p2.in_a[i] && score > 0)
|
if (p1.in_a[i] == p2.in_a[i] && score > 0)
|
||||||
score--;
|
score--;
|
||||||
|
|
||||||
for (int i = 0; i < std::min(GetSize(p1.in_b), GetSize(p2.in_b)); i++)
|
for (int i = 0; i < min(GetSize(p1.in_b), GetSize(p2.in_b)); i++)
|
||||||
if (p1.in_b[i] == p2.in_b[i] && score > 0)
|
if (p1.in_b[i] == p2.in_b[i] && score > 0)
|
||||||
score--;
|
score--;
|
||||||
|
|
||||||
|
@ -243,7 +243,7 @@ struct ShareWorker
|
||||||
Macc m1(c1), m2(c2), supermacc;
|
Macc m1(c1), m2(c2), supermacc;
|
||||||
|
|
||||||
int w1 = GetSize(c1->getPort("\\Y")), w2 = GetSize(c2->getPort("\\Y"));
|
int w1 = GetSize(c1->getPort("\\Y")), w2 = GetSize(c2->getPort("\\Y"));
|
||||||
int width = std::max(w1, w2);
|
int width = max(w1, w2);
|
||||||
|
|
||||||
m1.optimize(w1);
|
m1.optimize(w1);
|
||||||
m2.optimize(w2);
|
m2.optimize(w2);
|
||||||
|
@ -419,8 +419,8 @@ struct ShareWorker
|
||||||
int a2_width = c2->parameters.at("\\A_WIDTH").as_int();
|
int a2_width = c2->parameters.at("\\A_WIDTH").as_int();
|
||||||
int y2_width = c2->parameters.at("\\Y_WIDTH").as_int();
|
int y2_width = c2->parameters.at("\\Y_WIDTH").as_int();
|
||||||
|
|
||||||
if (std::max(a1_width, a2_width) > 2 * std::min(a1_width, a2_width)) return false;
|
if (max(a1_width, a2_width) > 2 * min(a1_width, a2_width)) return false;
|
||||||
if (std::max(y1_width, y2_width) > 2 * std::min(y1_width, y2_width)) return false;
|
if (max(y1_width, y2_width) > 2 * min(y1_width, y2_width)) return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -438,9 +438,9 @@ struct ShareWorker
|
||||||
int b2_width = c2->parameters.at("\\B_WIDTH").as_int();
|
int b2_width = c2->parameters.at("\\B_WIDTH").as_int();
|
||||||
int y2_width = c2->parameters.at("\\Y_WIDTH").as_int();
|
int y2_width = c2->parameters.at("\\Y_WIDTH").as_int();
|
||||||
|
|
||||||
if (std::max(a1_width, a2_width) > 2 * std::min(a1_width, a2_width)) return false;
|
if (max(a1_width, a2_width) > 2 * min(a1_width, a2_width)) return false;
|
||||||
if (std::max(b1_width, b2_width) > 2 * std::min(b1_width, b2_width)) return false;
|
if (max(b1_width, b2_width) > 2 * min(b1_width, b2_width)) return false;
|
||||||
if (std::max(y1_width, y2_width) > 2 * std::min(y1_width, y2_width)) return false;
|
if (max(y1_width, y2_width) > 2 * min(y1_width, y2_width)) return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -458,15 +458,15 @@ struct ShareWorker
|
||||||
int b2_width = c2->parameters.at("\\B_WIDTH").as_int();
|
int b2_width = c2->parameters.at("\\B_WIDTH").as_int();
|
||||||
int y2_width = c2->parameters.at("\\Y_WIDTH").as_int();
|
int y2_width = c2->parameters.at("\\Y_WIDTH").as_int();
|
||||||
|
|
||||||
int min1_width = std::min(a1_width, b1_width);
|
int min1_width = min(a1_width, b1_width);
|
||||||
int max1_width = std::max(a1_width, b1_width);
|
int max1_width = max(a1_width, b1_width);
|
||||||
|
|
||||||
int min2_width = std::min(a2_width, b2_width);
|
int min2_width = min(a2_width, b2_width);
|
||||||
int max2_width = std::max(a2_width, b2_width);
|
int max2_width = max(a2_width, b2_width);
|
||||||
|
|
||||||
if (std::max(min1_width, min2_width) > 2 * std::min(min1_width, min2_width)) return false;
|
if (max(min1_width, min2_width) > 2 * min(min1_width, min2_width)) return false;
|
||||||
if (std::max(max1_width, max2_width) > 2 * std::min(max1_width, max2_width)) return false;
|
if (max(max1_width, max2_width) > 2 * min(max1_width, max2_width)) return false;
|
||||||
if (std::max(y1_width, y2_width) > 2 * std::min(y1_width, y2_width)) return false;
|
if (max(y1_width, y2_width) > 2 * min(y1_width, y2_width)) return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -475,7 +475,7 @@ struct ShareWorker
|
||||||
if (c1->type == "$macc")
|
if (c1->type == "$macc")
|
||||||
{
|
{
|
||||||
if (!config.opt_aggressive)
|
if (!config.opt_aggressive)
|
||||||
if (share_macc(c1, c2) > 2 * std::min(bits_macc(c1), bits_macc(c2))) return false;
|
if (share_macc(c1, c2) > 2 * min(bits_macc(c1), bits_macc(c2))) return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -532,8 +532,8 @@ struct ShareWorker
|
||||||
RTLIL::SigSpec a2 = c2->getPort("\\A");
|
RTLIL::SigSpec a2 = c2->getPort("\\A");
|
||||||
RTLIL::SigSpec y2 = c2->getPort("\\Y");
|
RTLIL::SigSpec y2 = c2->getPort("\\Y");
|
||||||
|
|
||||||
int a_width = std::max(a1.size(), a2.size());
|
int a_width = max(a1.size(), a2.size());
|
||||||
int y_width = std::max(y1.size(), y2.size());
|
int y_width = max(y1.size(), y2.size());
|
||||||
|
|
||||||
a1.extend_u0(a_width, a_signed);
|
a1.extend_u0(a_width, a_signed);
|
||||||
a2.extend_u0(a_width, a_signed);
|
a2.extend_u0(a_width, a_signed);
|
||||||
|
@ -563,11 +563,11 @@ struct ShareWorker
|
||||||
|
|
||||||
if (config.generic_cbin_ops.count(c1->type))
|
if (config.generic_cbin_ops.count(c1->type))
|
||||||
{
|
{
|
||||||
int score_unflipped = std::max(c1->parameters.at("\\A_WIDTH").as_int(), c2->parameters.at("\\A_WIDTH").as_int()) +
|
int score_unflipped = max(c1->parameters.at("\\A_WIDTH").as_int(), c2->parameters.at("\\A_WIDTH").as_int()) +
|
||||||
std::max(c1->parameters.at("\\B_WIDTH").as_int(), c2->parameters.at("\\B_WIDTH").as_int());
|
max(c1->parameters.at("\\B_WIDTH").as_int(), c2->parameters.at("\\B_WIDTH").as_int());
|
||||||
|
|
||||||
int score_flipped = std::max(c1->parameters.at("\\A_WIDTH").as_int(), c2->parameters.at("\\B_WIDTH").as_int()) +
|
int score_flipped = max(c1->parameters.at("\\A_WIDTH").as_int(), c2->parameters.at("\\B_WIDTH").as_int()) +
|
||||||
std::max(c1->parameters.at("\\B_WIDTH").as_int(), c2->parameters.at("\\A_WIDTH").as_int());
|
max(c1->parameters.at("\\B_WIDTH").as_int(), c2->parameters.at("\\A_WIDTH").as_int());
|
||||||
|
|
||||||
if (score_flipped < score_unflipped)
|
if (score_flipped < score_unflipped)
|
||||||
{
|
{
|
||||||
|
@ -630,13 +630,13 @@ struct ShareWorker
|
||||||
RTLIL::SigSpec b2 = c2->getPort("\\B");
|
RTLIL::SigSpec b2 = c2->getPort("\\B");
|
||||||
RTLIL::SigSpec y2 = c2->getPort("\\Y");
|
RTLIL::SigSpec y2 = c2->getPort("\\Y");
|
||||||
|
|
||||||
int a_width = std::max(a1.size(), a2.size());
|
int a_width = max(a1.size(), a2.size());
|
||||||
int b_width = std::max(b1.size(), b2.size());
|
int b_width = max(b1.size(), b2.size());
|
||||||
int y_width = std::max(y1.size(), y2.size());
|
int y_width = max(y1.size(), y2.size());
|
||||||
|
|
||||||
if (c1->type == "$shr" && a_signed)
|
if (c1->type == "$shr" && a_signed)
|
||||||
{
|
{
|
||||||
a_width = std::max(y_width, a_width);
|
a_width = max(y_width, a_width);
|
||||||
|
|
||||||
if (a1.size() < y1.size()) a1.extend_u0(y1.size(), true);
|
if (a1.size() < y1.size()) a1.extend_u0(y1.size(), true);
|
||||||
if (a2.size() < y2.size()) a2.extend_u0(y2.size(), true);
|
if (a2.size() < y2.size()) a2.extend_u0(y2.size(), true);
|
||||||
|
|
|
@ -188,8 +188,8 @@ struct WreduceWorker
|
||||||
int max_port_b_size = cell->hasPort("\\B") ? GetSize(cell->getPort("\\B")) : -1;
|
int max_port_b_size = cell->hasPort("\\B") ? GetSize(cell->getPort("\\B")) : -1;
|
||||||
|
|
||||||
if (cell->type.in("$not", "$pos", "$neg", "$and", "$or", "$xor", "$add", "$sub")) {
|
if (cell->type.in("$not", "$pos", "$neg", "$and", "$or", "$xor", "$add", "$sub")) {
|
||||||
max_port_a_size = std::min(max_port_a_size, GetSize(sig));
|
max_port_a_size = min(max_port_a_size, GetSize(sig));
|
||||||
max_port_b_size = std::min(max_port_b_size, GetSize(sig));
|
max_port_b_size = min(max_port_b_size, GetSize(sig));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool port_a_signed = false;
|
bool port_a_signed = false;
|
||||||
|
@ -228,7 +228,7 @@ struct WreduceWorker
|
||||||
if (cell->hasPort("\\A")) a_size = GetSize(cell->getPort("\\A"));
|
if (cell->hasPort("\\A")) a_size = GetSize(cell->getPort("\\A"));
|
||||||
if (cell->hasPort("\\B")) b_size = GetSize(cell->getPort("\\B"));
|
if (cell->hasPort("\\B")) b_size = GetSize(cell->getPort("\\B"));
|
||||||
|
|
||||||
int max_y_size = std::max(a_size, b_size);
|
int max_y_size = max(a_size, b_size);
|
||||||
|
|
||||||
if (cell->type == "$add")
|
if (cell->type == "$add")
|
||||||
max_y_size++;
|
max_y_size++;
|
||||||
|
|
|
@ -568,7 +568,7 @@ struct EvalPass : public Pass {
|
||||||
if (tab_column_width.size() < row.size())
|
if (tab_column_width.size() < row.size())
|
||||||
tab_column_width.resize(row.size());
|
tab_column_width.resize(row.size());
|
||||||
for (size_t i = 0; i < row.size(); i++)
|
for (size_t i = 0; i < row.size(); i++)
|
||||||
tab_column_width[i] = std::max(tab_column_width[i], int(row[i].size()));
|
tab_column_width[i] = max(tab_column_width[i], int(row[i].size()));
|
||||||
}
|
}
|
||||||
|
|
||||||
log("\n");
|
log("\n");
|
||||||
|
|
|
@ -265,7 +265,7 @@ struct PerformReduction
|
||||||
}
|
}
|
||||||
int max_child_depth = 0;
|
int max_child_depth = 0;
|
||||||
for (auto &bit : drv.second)
|
for (auto &bit : drv.second)
|
||||||
max_child_depth = std::max(register_cone_worker(celldone, sigdepth, bit), max_child_depth);
|
max_child_depth = max(register_cone_worker(celldone, sigdepth, bit), max_child_depth);
|
||||||
sigdepth[out] = max_child_depth + 1;
|
sigdepth[out] = max_child_depth + 1;
|
||||||
} else {
|
} else {
|
||||||
pi_bits.push_back(out);
|
pi_bits.push_back(out);
|
||||||
|
|
|
@ -606,8 +606,8 @@ struct SatHelper
|
||||||
int maxModelWidth = 10;
|
int maxModelWidth = 10;
|
||||||
|
|
||||||
for (auto &info : modelInfo) {
|
for (auto &info : modelInfo) {
|
||||||
maxModelName = std::max(maxModelName, int(info.description.size()));
|
maxModelName = max(maxModelName, int(info.description.size()));
|
||||||
maxModelWidth = std::max(maxModelWidth, info.width);
|
maxModelWidth = max(maxModelWidth, info.width);
|
||||||
}
|
}
|
||||||
|
|
||||||
log("\n");
|
log("\n");
|
||||||
|
@ -781,9 +781,9 @@ struct SatHelper
|
||||||
|
|
||||||
wavedata[info.description].first = info.width;
|
wavedata[info.description].first = info.width;
|
||||||
wavedata[info.description].second[info.timestep] = value;
|
wavedata[info.description].second[info.timestep] = value;
|
||||||
mintime = std::min(mintime, info.timestep);
|
mintime = min(mintime, info.timestep);
|
||||||
maxtime = std::max(maxtime, info.timestep);
|
maxtime = max(maxtime, info.timestep);
|
||||||
maxwidth = std::max(maxwidth, info.width);
|
maxwidth = max(maxwidth, info.width);
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(f, "{ \"signal\": [");
|
fprintf(f, "{ \"signal\": [");
|
||||||
|
@ -1116,7 +1116,7 @@ struct SatPass : public Pass {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (args[argidx] == "-stepsize" && argidx+1 < args.size()) {
|
if (args[argidx] == "-stepsize" && argidx+1 < args.size()) {
|
||||||
stepsize = std::max(1, atoi(args[++argidx].c_str()));
|
stepsize = max(1, atoi(args[++argidx].c_str()));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (args[argidx] == "-ignore_div_by_zero") {
|
if (args[argidx] == "-ignore_div_by_zero") {
|
||||||
|
|
|
@ -1399,7 +1399,7 @@ struct AbcPass : public Pass {
|
||||||
std::set<RTLIL::Cell*> expand_queue_up, next_expand_queue_up;
|
std::set<RTLIL::Cell*> expand_queue_up, next_expand_queue_up;
|
||||||
std::set<RTLIL::Cell*> expand_queue_down, next_expand_queue_down;
|
std::set<RTLIL::Cell*> expand_queue_down, next_expand_queue_down;
|
||||||
|
|
||||||
typedef std::tuple<bool, RTLIL::SigSpec, bool, RTLIL::SigSpec> clkdomain_t;
|
typedef tuple<bool, RTLIL::SigSpec, bool, RTLIL::SigSpec> clkdomain_t;
|
||||||
std::map<clkdomain_t, std::vector<RTLIL::Cell*>> assigned_cells;
|
std::map<clkdomain_t, std::vector<RTLIL::Cell*>> assigned_cells;
|
||||||
std::map<RTLIL::Cell*, clkdomain_t> assigned_cells_reverse;
|
std::map<RTLIL::Cell*, clkdomain_t> assigned_cells_reverse;
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ struct AlumaccWorker
|
||||||
{
|
{
|
||||||
std::vector<RTLIL::Cell*> cells;
|
std::vector<RTLIL::Cell*> cells;
|
||||||
RTLIL::SigSpec a, b, c, y;
|
RTLIL::SigSpec a, b, c, y;
|
||||||
std::vector<std::tuple<bool, bool, bool, bool, RTLIL::SigSpec>> cmp;
|
std::vector<tuple<bool, bool, bool, bool, RTLIL::SigSpec>> cmp;
|
||||||
bool is_signed, invert_b;
|
bool is_signed, invert_b;
|
||||||
|
|
||||||
RTLIL::Cell *alu_cell;
|
RTLIL::Cell *alu_cell;
|
||||||
|
@ -138,7 +138,7 @@ struct AlumaccWorker
|
||||||
n->users = 0;
|
n->users = 0;
|
||||||
|
|
||||||
for (auto bit : n->y)
|
for (auto bit : n->y)
|
||||||
n->users = std::max(n->users, bit_users.at(bit) - 1);
|
n->users = max(n->users, bit_users.at(bit) - 1);
|
||||||
|
|
||||||
if (cell->type.in("$pos", "$neg"))
|
if (cell->type.in("$pos", "$neg"))
|
||||||
{
|
{
|
||||||
|
@ -409,7 +409,7 @@ struct AlumaccWorker
|
||||||
n->a = A;
|
n->a = A;
|
||||||
n->b = B;
|
n->b = B;
|
||||||
n->c = RTLIL::S1;
|
n->c = RTLIL::S1;
|
||||||
n->y = module->addWire(NEW_ID, std::max(GetSize(A), GetSize(B)));
|
n->y = module->addWire(NEW_ID, max(GetSize(A), GetSize(B)));
|
||||||
n->is_signed = is_signed;
|
n->is_signed = is_signed;
|
||||||
n->invert_b = true;
|
n->invert_b = true;
|
||||||
sig_alu[RTLIL::SigSig(A, B)].insert(n);
|
sig_alu[RTLIL::SigSig(A, B)].insert(n);
|
||||||
|
|
|
@ -68,7 +68,7 @@ struct DffinitPass : public Pass {
|
||||||
for (auto wire : module->selected_wires()) {
|
for (auto wire : module->selected_wires()) {
|
||||||
if (wire->attributes.count("\\init")) {
|
if (wire->attributes.count("\\init")) {
|
||||||
Const value = wire->attributes.at("\\init");
|
Const value = wire->attributes.at("\\init");
|
||||||
for (int i = 0; i < std::min(GetSize(value), GetSize(wire)); i++)
|
for (int i = 0; i < min(GetSize(value), GetSize(wire)); i++)
|
||||||
init_bits[sigmap(SigBit(wire, i))] = value[i];
|
init_bits[sigmap(SigBit(wire, i))] = value[i];
|
||||||
}
|
}
|
||||||
if (wire->port_output)
|
if (wire->port_output)
|
||||||
|
@ -116,7 +116,7 @@ struct DffinitPass : public Pass {
|
||||||
if (wire->attributes.count("\\init")) {
|
if (wire->attributes.count("\\init")) {
|
||||||
Const &value = wire->attributes.at("\\init");
|
Const &value = wire->attributes.at("\\init");
|
||||||
bool do_cleanup = true;
|
bool do_cleanup = true;
|
||||||
for (int i = 0; i < std::min(GetSize(value), GetSize(wire)); i++) {
|
for (int i = 0; i < min(GetSize(value), GetSize(wire)); i++) {
|
||||||
SigBit bit = sigmap(SigBit(wire, i));
|
SigBit bit = sigmap(SigBit(wire, i));
|
||||||
if (cleanup_bits.count(bit) || !used_bits.count(bit))
|
if (cleanup_bits.count(bit) || !used_bits.count(bit))
|
||||||
value[i] = State::Sx;
|
value[i] = State::Sx;
|
||||||
|
|
|
@ -130,7 +130,7 @@ public:
|
||||||
RTLIL::SigSpec needleSig = conn.second;
|
RTLIL::SigSpec needleSig = conn.second;
|
||||||
RTLIL::SigSpec haystackSig = haystackCell->getPort(portMapping.at(conn.first.str()));
|
RTLIL::SigSpec haystackSig = haystackCell->getPort(portMapping.at(conn.first.str()));
|
||||||
|
|
||||||
for (int i = 0; i < std::min(needleSig.size(), haystackSig.size()); i++) {
|
for (int i = 0; i < min(needleSig.size(), haystackSig.size()); i++) {
|
||||||
RTLIL::Wire *needleWire = needleSig[i].wire, *haystackWire = haystackSig[i].wire;
|
RTLIL::Wire *needleWire = needleSig[i].wire, *haystackWire = haystackSig[i].wire;
|
||||||
if (needleWire != lastNeedleWire || haystackWire != lastHaystackWire)
|
if (needleWire != lastNeedleWire || haystackWire != lastHaystackWire)
|
||||||
if (!compareAttributes(wire_attr, needleWire ? needleWire->attributes : emptyAttr, haystackWire ? haystackWire->attributes : emptyAttr))
|
if (!compareAttributes(wire_attr, needleWire ? needleWire->attributes : emptyAttr, haystackWire ? haystackWire->attributes : emptyAttr))
|
||||||
|
|
|
@ -134,7 +134,7 @@ struct MaccmapWorker
|
||||||
}
|
}
|
||||||
return retval;
|
return retval;
|
||||||
#else
|
#else
|
||||||
return std::max(n - 1, 0);
|
return max(n - 1, 0);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,8 +49,8 @@ struct MuxcoverWorker
|
||||||
|
|
||||||
vector<tree_t> tree_list;
|
vector<tree_t> tree_list;
|
||||||
|
|
||||||
dict<std::tuple<SigBit, SigBit, SigBit>, std::tuple<SigBit, pool<SigBit>, bool>> decode_mux_cache;
|
dict<tuple<SigBit, SigBit, SigBit>, tuple<SigBit, pool<SigBit>, bool>> decode_mux_cache;
|
||||||
dict<SigBit, std::tuple<SigBit, SigBit, SigBit>> decode_mux_reverse_cache;
|
dict<SigBit, tuple<SigBit, SigBit, SigBit>> decode_mux_reverse_cache;
|
||||||
int decode_mux_counter;
|
int decode_mux_counter;
|
||||||
|
|
||||||
bool use_mux4;
|
bool use_mux4;
|
||||||
|
@ -142,7 +142,7 @@ struct MuxcoverWorker
|
||||||
if (A == B)
|
if (A == B)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
std::tuple<SigBit, SigBit, SigBit> key(A, B, sel);
|
tuple<SigBit, SigBit, SigBit> key(A, B, sel);
|
||||||
if (decode_mux_cache.count(key) == 0) {
|
if (decode_mux_cache.count(key) == 0) {
|
||||||
auto &entry = decode_mux_cache[key];
|
auto &entry = decode_mux_cache[key];
|
||||||
std::get<0>(entry) = module->addWire(NEW_ID);
|
std::get<0>(entry) = module->addWire(NEW_ID);
|
||||||
|
|
|
@ -247,7 +247,7 @@ void simplemap_eqne(RTLIL::Module *module, RTLIL::Cell *cell)
|
||||||
bool is_signed = cell->parameters.at("\\A_SIGNED").as_bool();
|
bool is_signed = cell->parameters.at("\\A_SIGNED").as_bool();
|
||||||
bool is_ne = cell->type == "$ne" || cell->type == "$nex";
|
bool is_ne = cell->type == "$ne" || cell->type == "$nex";
|
||||||
|
|
||||||
RTLIL::SigSpec xor_out = module->addWire(NEW_ID, std::max(GetSize(sig_a), GetSize(sig_b)));
|
RTLIL::SigSpec xor_out = module->addWire(NEW_ID, max(GetSize(sig_a), GetSize(sig_b)));
|
||||||
RTLIL::Cell *xor_cell = module->addXor(NEW_ID, sig_a, sig_b, xor_out, is_signed);
|
RTLIL::Cell *xor_cell = module->addXor(NEW_ID, sig_a, sig_b, xor_out, is_signed);
|
||||||
xor_cell->add_strpool_attribute("\\src", cell->get_strpool_attribute("\\src"));
|
xor_cell->add_strpool_attribute("\\src", cell->get_strpool_attribute("\\src"));
|
||||||
simplemap_bitop(module, xor_cell);
|
simplemap_bitop(module, xor_cell);
|
||||||
|
|
|
@ -256,7 +256,7 @@ static void create_gold_module(RTLIL::Design *design, RTLIL::IdString cell_type,
|
||||||
case 2:
|
case 2:
|
||||||
n = xorshift32(GetSize(sig));
|
n = xorshift32(GetSize(sig));
|
||||||
m = xorshift32(GetSize(sig));
|
m = xorshift32(GetSize(sig));
|
||||||
for (int i = std::min(n, m); i < std::max(n, m); i++)
|
for (int i = min(n, m); i < max(n, m); i++)
|
||||||
sig[i] = xorshift32(2) == 1 ? RTLIL::S1 : RTLIL::S0;
|
sig[i] = xorshift32(2) == 1 ? RTLIL::S1 : RTLIL::S0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue