mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-07 01:54:10 +00:00
Merge pull request #1783 from boqwxp/astcc_cleanup
Clean up pseudo-private member usage in `frontends/ast/ast.cc`.
This commit is contained in:
commit
05f74d4f31
|
@ -1284,9 +1284,9 @@ AstNode * AST::find_modport(AstNode *intf, std::string name)
|
||||||
// Iterate over all wires in an interface and add them as wires in the AST module:
|
// Iterate over all wires in an interface and add them as wires in the AST module:
|
||||||
void AST::explode_interface_port(AstNode *module_ast, RTLIL::Module * intfmodule, std::string intfname, AstNode *modport)
|
void AST::explode_interface_port(AstNode *module_ast, RTLIL::Module * intfmodule, std::string intfname, AstNode *modport)
|
||||||
{
|
{
|
||||||
for (auto &wire_it : intfmodule->wires_){
|
for (auto w : intfmodule->wires()){
|
||||||
AstNode *wire = new AstNode(AST_WIRE, new AstNode(AST_RANGE, AstNode::mkconst_int(wire_it.second->width -1, true), AstNode::mkconst_int(0, true)));
|
AstNode *wire = new AstNode(AST_WIRE, new AstNode(AST_RANGE, AstNode::mkconst_int(w->width -1, true), AstNode::mkconst_int(0, true)));
|
||||||
std::string origname = log_id(wire_it.first);
|
std::string origname = log_id(w->name);
|
||||||
std::string newname = intfname + "." + origname;
|
std::string newname = intfname + "." + origname;
|
||||||
wire->str = newname;
|
wire->str = newname;
|
||||||
if (modport != NULL) {
|
if (modport != NULL) {
|
||||||
|
@ -1329,9 +1329,9 @@ void AstModule::reprocess_module(RTLIL::Design *design, dict<RTLIL::IdString, RT
|
||||||
for (auto &intf : local_interfaces) {
|
for (auto &intf : local_interfaces) {
|
||||||
std::string intfname = intf.first.str();
|
std::string intfname = intf.first.str();
|
||||||
RTLIL::Module *intfmodule = intf.second;
|
RTLIL::Module *intfmodule = intf.second;
|
||||||
for (auto &wire_it : intfmodule->wires_){
|
for (auto w : intfmodule->wires()){
|
||||||
AstNode *wire = new AstNode(AST_WIRE, new AstNode(AST_RANGE, AstNode::mkconst_int(wire_it.second->width -1, true), AstNode::mkconst_int(0, true)));
|
AstNode *wire = new AstNode(AST_WIRE, new AstNode(AST_RANGE, AstNode::mkconst_int(w->width -1, true), AstNode::mkconst_int(0, true)));
|
||||||
std::string newname = log_id(wire_it.first);
|
std::string newname = log_id(w->name);
|
||||||
newname = intfname + "." + newname;
|
newname = intfname + "." + newname;
|
||||||
wire->str = newname;
|
wire->str = newname;
|
||||||
new_ast->children.push_back(wire);
|
new_ast->children.push_back(wire);
|
||||||
|
@ -1355,7 +1355,7 @@ void AstModule::reprocess_module(RTLIL::Design *design, dict<RTLIL::IdString, RT
|
||||||
std::pair<std::string,std::string> res = split_modport_from_type(ch->str);
|
std::pair<std::string,std::string> res = split_modport_from_type(ch->str);
|
||||||
std::string interface_type = res.first;
|
std::string interface_type = res.first;
|
||||||
std::string interface_modport = res.second; // Is "", if no modport
|
std::string interface_modport = res.second; // Is "", if no modport
|
||||||
if (design->modules_.count(interface_type) > 0) {
|
if (design->module(interface_type) != nullptr) {
|
||||||
// Add a cell to the module corresponding to the interface port such that
|
// Add a cell to the module corresponding to the interface port such that
|
||||||
// it can further propagated down if needed:
|
// it can further propagated down if needed:
|
||||||
AstNode *celltype_for_intf = new AstNode(AST_CELLTYPE);
|
AstNode *celltype_for_intf = new AstNode(AST_CELLTYPE);
|
||||||
|
@ -1365,7 +1365,7 @@ void AstModule::reprocess_module(RTLIL::Design *design, dict<RTLIL::IdString, RT
|
||||||
new_ast->children.push_back(cell_for_intf);
|
new_ast->children.push_back(cell_for_intf);
|
||||||
|
|
||||||
// Get all members of this non-overridden dummy interface instance:
|
// Get all members of this non-overridden dummy interface instance:
|
||||||
RTLIL::Module *intfmodule = design->modules_[interface_type]; // All interfaces should at this point in time (assuming
|
RTLIL::Module *intfmodule = design->module(interface_type); // All interfaces should at this point in time (assuming
|
||||||
// reprocess_module is called from the hierarchy pass) be
|
// reprocess_module is called from the hierarchy pass) be
|
||||||
// present in design->modules_
|
// present in design->modules_
|
||||||
AstModule *ast_module_of_interface = (AstModule*)intfmodule;
|
AstModule *ast_module_of_interface = (AstModule*)intfmodule;
|
||||||
|
@ -1460,12 +1460,19 @@ RTLIL::IdString AstModule::derive(RTLIL::Design *design, dict<RTLIL::IdString, R
|
||||||
|
|
||||||
// Now that the interfaces have been exploded, we can delete the dummy port related to every interface.
|
// Now that the interfaces have been exploded, we can delete the dummy port related to every interface.
|
||||||
for(auto &intf : interfaces) {
|
for(auto &intf : interfaces) {
|
||||||
if(mod->wires_.count(intf.first)) {
|
if(mod->wire(intf.first) != nullptr) {
|
||||||
mod->wires_.erase(intf.first);
|
// Normally, removing wires would be batched together as it's an
|
||||||
|
// expensive operation, however, in this case doing so would mean
|
||||||
|
// that a cell with the same name cannot be created (below)...
|
||||||
|
// Since we won't expect many interfaces to exist in a module,
|
||||||
|
// we can let this slide...
|
||||||
|
pool<RTLIL::Wire*> to_remove;
|
||||||
|
to_remove.insert(mod->wire(intf.first));
|
||||||
|
mod->remove(to_remove);
|
||||||
mod->fixup_ports();
|
mod->fixup_ports();
|
||||||
// We copy the cell of the interface to the sub-module such that it can further be found if it is propagated
|
// We copy the cell of the interface to the sub-module such that it
|
||||||
// down to sub-sub-modules etc.
|
// can further be found if it is propagated down to sub-sub-modules etc.
|
||||||
RTLIL::Cell * new_subcell = mod->addCell(intf.first, intf.second->name);
|
RTLIL::Cell *new_subcell = mod->addCell(intf.first, intf.second->name);
|
||||||
new_subcell->set_bool_attribute("\\is_interface");
|
new_subcell->set_bool_attribute("\\is_interface");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
Loading…
Reference in a new issue