From 01aa5da6873639f275bc50e9f9e72264ebace789 Mon Sep 17 00:00:00 2001 From: behzadmehmood Date: Thu, 5 Dec 2024 13:03:41 +0500 Subject: [PATCH 1/2] Handling signals connected to O_FAB and other primitives --- design_edit/src/rs_design_edit.cc | 56 ++++++++++++++++++++++--------- 1 file changed, 40 insertions(+), 16 deletions(-) diff --git a/design_edit/src/rs_design_edit.cc b/design_edit/src/rs_design_edit.cc index cb0509b14..5513eef4a 100644 --- a/design_edit/src/rs_design_edit.cc +++ b/design_edit/src/rs_design_edit.cc @@ -510,7 +510,8 @@ struct DesignEditRapidSilicon : public ScriptPass { if (in_bit.wire != nullptr) { remove_fab_prims.push_back(cell); - if (fab_ins.count(in_bit) && fab_outs.count(out_bit)) + if (new_ins.find(in_bit.wire->name.str()) != new_ins.end() && + new_outs.find(out_bit.wire->name.str()) != new_outs.end()) { RTLIL::SigSig new_conn; new_conn.first = out_bit; @@ -541,7 +542,8 @@ struct DesignEditRapidSilicon : public ScriptPass { if (in_bit.wire != nullptr) { remove_fab_prims.push_back(cell); - if (fab_ins.count(in_bit) && fab_outs.count(out_bit)) + if (new_ins.find(in_bit.wire->name.str()) != new_ins.end() && + new_outs.find(out_bit.wire->name.str()) != new_outs.end()) { RTLIL::SigSig new_conn; new_conn.first = out_bit; @@ -575,6 +577,7 @@ struct DesignEditRapidSilicon : public ScriptPass { if (cell->type == RTLIL::escape_id("O_FAB") || cell->type == RTLIL::escape_id("I_FAB")) continue; + string module_name = remove_backslashes(cell->type.str()); for (auto conn : cell->connections()) { IdString portName = conn.first; @@ -584,22 +587,44 @@ struct DesignEditRapidSilicon : public ScriptPass { { if (ofab_sig_map.count(bit)) { - const std::vector outbits = ofab_sig_map[bit]; - if(outbits.size() < 1) sigspec.append(bit); - if(outbits.size() == 1) + + if ((std::find(primitives.begin(), primitives.end(), module_name) != + primitives.end()) && cell->input(portName)) { + const std::vector outbits = ofab_sig_map[bit]; + RTLIL::SigSig new_conn; + RTLIL::Wire *new_wire = mod->addWire(NEW_ID, 1); + new_outs.erase(bit.wire->name.str()); + new_outs.insert(new_wire->name.str()); + new_conn.first = new_wire; + new_conn.second = outbits[0]; + mod->connect(new_conn); if (unset_port) - { - cell->unsetPort(portName); - unset_port = false; - } - sigspec.append(outbits[0]); - } else if (outbits.size() > 1) + { + cell->unsetPort(portName); + unset_port = false; + } + sigspec.append(new_wire); + } + else { - sigspec.append(bit); - if (ofab_conns.find(bit) == ofab_conns.end()) + const std::vector outbits = ofab_sig_map[bit]; + if(outbits.size() < 1) sigspec.append(bit); + if(outbits.size() == 1) + { + if (unset_port) + { + cell->unsetPort(portName); + unset_port = false; + } + sigspec.append(outbits[0]); + } else if (outbits.size() > 1) { - ofab_conns.insert({bit, outbits}); + sigspec.append(bit); + if (ofab_conns.find(bit) == ofab_conns.end()) + { + ofab_conns.insert({bit, outbits}); + } } } } else { @@ -1683,6 +1708,7 @@ struct DesignEditRapidSilicon : public ScriptPass { elapsed_time (start, end); intersection_copy_remove(new_ins, new_outs, interface_wires); intersect(interface_wires, keep_wires); + remove_io_fab_prim(original_mod); } Module *interface_mod = _design->top_module()->clone(); @@ -1844,8 +1870,6 @@ struct DesignEditRapidSilicon : public ScriptPass { get_fabric_ios(original_mod); - remove_io_fab_prim(original_mod); - start = high_resolution_clock::now(); log("Deleting non-primitive cells and upgrading wires to ports in interface module\n"); for (auto cell : interface_mod->cells()) { From 0bd37c336d3cfc6c689acd49d93c3a85703677eb Mon Sep 17 00:00:00 2001 From: behzadmehmood Date: Thu, 5 Dec 2024 10:02:49 +0000 Subject: [PATCH 2/2] Incremented patch version --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4bcc53ae1..e08487a80 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,7 +17,7 @@ set(VERSION_MINOR 0) -set(VERSION_PATCH 383) +set(VERSION_PATCH 384)