mirror of
https://github.com/YosysHQ/yosys
synced 2025-05-05 14:55:47 +00:00
Merge ef9772bd8d
into 026d161f91
This commit is contained in:
commit
47f231e23e
6 changed files with 84 additions and 10 deletions
|
@ -2124,11 +2124,9 @@ RTLIL::SigSpec AstNode::genRTLIL(int width_hint, bool sign_hint)
|
|||
if (sig.is_wire()) {
|
||||
// if the resulting SigSpec is a wire, its
|
||||
// signedness should match that of the AstNode
|
||||
if (arg->type == AST_IDENTIFIER && arg->id2ast && arg->id2ast->is_signed && !arg->is_signed)
|
||||
// fully-sliced signed wire will be resolved
|
||||
// once the module becomes available
|
||||
log_assert(attributes.count(ID::reprocess_after));
|
||||
else
|
||||
// unless this instantiation depends on module
|
||||
// information that isn't available yet
|
||||
if (!attributes.count(ID::reprocess_after))
|
||||
log_assert(arg->is_signed == sig.as_wire()->is_signed);
|
||||
} else if (arg->is_signed) {
|
||||
// non-trivial signed nodes are indirected through
|
||||
|
|
|
@ -1260,6 +1260,8 @@ bool AstNode::simplify(bool const_fold, int stage, int width_hint, bool sign_hin
|
|||
}
|
||||
|
||||
if (type == AST_CELL) {
|
||||
// when a module lookup is suggested, any port connection that is not a
|
||||
// plain identifier will be indirected through a new wire
|
||||
bool lookup_suggested = false;
|
||||
|
||||
for (AstNode *child : children) {
|
||||
|
@ -1282,7 +1284,7 @@ bool AstNode::simplify(bool const_fold, int stage, int width_hint, bool sign_hin
|
|||
continue;
|
||||
}
|
||||
if (elem->type == AST_MEMORY)
|
||||
// need to determine is the is a read or wire
|
||||
// need to determine is the is a read or write
|
||||
lookup_suggested = true;
|
||||
else if (elem->type == AST_WIRE && elem->is_signed && !value->children.empty())
|
||||
// this may be a fully sliced signed wire which needs
|
||||
|
@ -1292,6 +1294,15 @@ bool AstNode::simplify(bool const_fold, int stage, int width_hint, bool sign_hin
|
|||
else if (contains_unbased_unsized(value))
|
||||
// unbased unsized literals extend to width of the context
|
||||
lookup_suggested = true;
|
||||
else if (value->type == AST_TO_UNSIGNED)
|
||||
// inner expression may be signed by default
|
||||
lookup_suggested = true;
|
||||
else if (value->type == AST_CONCAT) {
|
||||
// concat of a single expression is equivalent to $unsigned;
|
||||
// concats could also contain one or references to memories,
|
||||
// which may ambiguously be reads or writes
|
||||
lookup_suggested = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue