mirror of
https://github.com/YosysHQ/yosys
synced 2025-06-06 14:13:23 +00:00
Now only use value from "initial" when no matching "always" block is found
This commit is contained in:
parent
161565be10
commit
f1a2fd966f
5 changed files with 32 additions and 21 deletions
|
@ -51,6 +51,7 @@ namespace AST_INTERNAL {
|
|||
std::map<std::string, AstNode*> current_scope;
|
||||
RTLIL::SigSpec *genRTLIL_subst_from = NULL;
|
||||
RTLIL::SigSpec *genRTLIL_subst_to = NULL;
|
||||
RTLIL::SigSpec ignoreThisSignalsInInitial;
|
||||
AstNode *current_top_block, *current_block, *current_block_child;
|
||||
AstModule *current_module;
|
||||
}
|
||||
|
@ -704,6 +705,9 @@ static AstModule* process_module(AstNode *ast)
|
|||
current_module->ast = NULL;
|
||||
current_module->name = ast->str;
|
||||
current_module->attributes["\\src"] = stringf("%s:%d", ast->filename.c_str(), ast->linenum);
|
||||
|
||||
ignoreThisSignalsInInitial = RTLIL::SigSpec();
|
||||
|
||||
for (auto &attr : ast->attributes) {
|
||||
if (attr.second->type != AST_CONSTANT)
|
||||
log_error("Attribute `%s' with non-constant value at %s:%d!\n",
|
||||
|
@ -718,10 +722,20 @@ static AstModule* process_module(AstNode *ast)
|
|||
}
|
||||
for (size_t i = 0; i < ast->children.size(); i++) {
|
||||
AstNode *node = ast->children[i];
|
||||
if (node->type != AST_WIRE && node->type != AST_MEMORY)
|
||||
if (node->type != AST_WIRE && node->type != AST_MEMORY && node->type != AST_INITIAL)
|
||||
node->genRTLIL();
|
||||
}
|
||||
|
||||
ignoreThisSignalsInInitial.sort_and_unify();
|
||||
|
||||
for (size_t i = 0; i < ast->children.size(); i++) {
|
||||
AstNode *node = ast->children[i];
|
||||
if (node->type == AST_INITIAL)
|
||||
node->genRTLIL();
|
||||
}
|
||||
|
||||
ignoreThisSignalsInInitial = RTLIL::SigSpec();
|
||||
|
||||
current_module->ast = ast_before_simplify;
|
||||
current_module->nolatches = flag_nolatches;
|
||||
current_module->nomem2reg = flag_nomem2reg;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue