mirror of
https://github.com/YosysHQ/yosys
synced 2026-07-15 03:35:40 +00:00
WIP
This commit is contained in:
parent
1a8a95b472
commit
d13dfc21f4
32 changed files with 1348 additions and 769 deletions
|
|
@ -1122,7 +1122,7 @@ void AST::set_src_attr(RTLIL::AttrObject *obj, const AstNode *ast)
|
|||
// carrying only ":line.col-line.col". For a typical large design with
|
||||
// thousands of objects in one file this collapses N copies of a long
|
||||
// path into 1 Leaf + N short Suffix tails.
|
||||
TwinePool *pool = ¤t_module->design->src_twines;
|
||||
TwinePool *pool = ¤t_module->design->twines;
|
||||
Twine::Id file_id = pool->intern(*loc.begin.filename);
|
||||
std::string tail = stringf(":%d.%d-%d.%d",
|
||||
loc.begin.line, loc.begin.column,
|
||||
|
|
@ -1155,7 +1155,7 @@ static RTLIL::Module *process_module(RTLIL::Design *design, AstNode *ast, bool d
|
|||
AstModule *module = new AstModule;
|
||||
current_module = module;
|
||||
// Set design backpointer early — every set_src_attr in genrtlil.cc
|
||||
// resolves the pool via current_module->design->src_twines. The
|
||||
// resolves the pool via current_module->design->twines. The
|
||||
// final design->add(current_module) at end-of-process_module hooks
|
||||
// the module into the design's modules_ dict; we just need design
|
||||
// reachable as a backpointer for src interning meanwhile.
|
||||
|
|
|
|||
|
|
@ -503,7 +503,7 @@ struct AST_INTERNAL::ProcessGenerator
|
|||
chunk.wire->name.c_str(), chunk.width+chunk.offset-1, chunk.offset);;
|
||||
if (chunk.wire->name.str().find('$') != std::string::npos)
|
||||
wire_name += stringf("$%d", autoidx++);
|
||||
} while (current_module->wires_.count(wire_name) > 0);
|
||||
} while (current_module->wire(RTLIL::IdString(wire_name)) != nullptr);
|
||||
|
||||
RTLIL::Wire *wire = current_module->addWire(wire_name, chunk.width);
|
||||
set_src_attr(wire, always.get());
|
||||
|
|
@ -1629,10 +1629,9 @@ RTLIL::SigSpec AstNode::genRTLIL(int width_hint, bool sign_hint)
|
|||
|
||||
log_assert(id2ast != nullptr);
|
||||
|
||||
if (id2ast->type == AST_AUTOWIRE && current_module->wires_.count(str) == 0) {
|
||||
if (id2ast->type == AST_AUTOWIRE && current_module->wire(RTLIL::IdString(str)) == nullptr) {
|
||||
RTLIL::Wire *wire = current_module->addWire(str);
|
||||
set_src_attr(wire, this);
|
||||
wire->name = str;
|
||||
|
||||
// If we are currently processing a bind directive which wires up
|
||||
// signals or parameters explicitly, rather than with .*, then
|
||||
|
|
@ -1652,7 +1651,7 @@ RTLIL::SigSpec AstNode::genRTLIL(int width_hint, bool sign_hint)
|
|||
chunk = RTLIL::Const(id2ast->children[0]->bits);
|
||||
goto use_const_chunk;
|
||||
}
|
||||
else if ((id2ast->type == AST_WIRE || id2ast->type == AST_AUTOWIRE || id2ast->type == AST_MEMORY) && current_module->wires_.count(str) != 0) {
|
||||
else if ((id2ast->type == AST_WIRE || id2ast->type == AST_AUTOWIRE || id2ast->type == AST_MEMORY) && current_module->wire(RTLIL::IdString(str)) != nullptr) {
|
||||
RTLIL::Wire *current_wire = current_module->wire(str);
|
||||
if (current_wire->get_bool_attribute(ID::is_interface))
|
||||
is_interface = true;
|
||||
|
|
@ -1682,7 +1681,7 @@ RTLIL::SigSpec AstNode::genRTLIL(int width_hint, bool sign_hint)
|
|||
return dummy_wire;
|
||||
}
|
||||
|
||||
wire = current_module->wires_[str];
|
||||
wire = current_module->wire(RTLIL::IdString(str));
|
||||
chunk.wire = wire;
|
||||
chunk.width = wire->width;
|
||||
chunk.offset = 0;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue