diff options
-rw-r--r-- | icefuzz/timings_8k.txt | 3 | ||||
-rw-r--r-- | icetime/icetime.cc | 18 |
2 files changed, 15 insertions, 6 deletions
diff --git a/icefuzz/timings_8k.txt b/icefuzz/timings_8k.txt index 18cfa99..6e26724 100644 --- a/icefuzz/timings_8k.txt +++ b/icefuzz/timings_8k.txt @@ -1,3 +1,6 @@ +CELL CascadeBuf +IOPATH I O 137.402:178.5:217.075 170.116:221:268.76 + CELL CascadeMux IOPATH I O 0:0:0 0:0:0 diff --git a/icetime/icetime.cc b/icetime/icetime.cc index 555df65..4477ccc 100644 --- a/icetime/icetime.cc +++ b/icetime/icetime.cc @@ -1508,7 +1508,7 @@ struct make_interconn_worker_t if (trg.name.substr(0, 6) == "span4_" || trg.name.substr(0, 4) == "sp4_") { bool horiz = trg.name.substr(0, 6) == "sp4_h_"; - int count_length = -1; + int count_length = 0; while (seg_parents.count(*cursor) && cursor->net == trg.net) { horiz = horiz || (cursor->name.substr(0, 6) == "sp4_h_"); @@ -1519,7 +1519,10 @@ struct make_interconn_worker_t if (cursor->net == trg.net) goto skip_to_cursor; - count_length = std::max(count_length, 0); + count_length = std::min(std::max(count_length, 0), 4); + + if (max_span_hack) + count_length = 4; if (cursor->name.substr(0, 7) == "span12_" || cursor->name.substr(0, 5) == "sp12_") { tn = tname(); @@ -1536,7 +1539,7 @@ struct make_interconn_worker_t cell_log[trg] = std::make_pair(*cursor, "IoSpan4Mux"); } else { tn = tname(); - netlist_cell_types[tn] = stringf("Span4Mux_%c%d", horiz ? 'h' : 'v', max_span_hack ? 4 : count_length); + netlist_cell_types[tn] = stringf("Span4Mux_%c%d", horiz ? 'h' : 'v', count_length); netlist_cell_ports[tn]["I"] = seg_name(*cursor); netlist_cell_ports[tn]["O"] = seg_name(trg); cell_log[trg] = std::make_pair(*cursor, stringf("Span4Mux_%c%d", horiz ? 'h' : 'v', count_length)); @@ -1550,7 +1553,7 @@ struct make_interconn_worker_t if (trg.name.substr(0, 7) == "span12_" || trg.name.substr(0, 5) == "sp12_") { bool horiz = trg.name.substr(0, 7) == "sp12_h_"; - int count_length = -1; + int count_length = 0; while (seg_parents.count(*cursor) && cursor->net == trg.net) { horiz = horiz || (cursor->name.substr(0, 7) == "sp12_h_"); @@ -1561,10 +1564,13 @@ struct make_interconn_worker_t if (cursor->net == trg.net) goto skip_to_cursor; - count_length = std::max(count_length, 0); + count_length = std::min(std::max(count_length, 0), 12); + + if (max_span_hack) + count_length = 12; tn = tname(); - netlist_cell_types[tn] = stringf("Span12Mux_%c%d", horiz ? 'h' : 'v', max_span_hack ? 12 : count_length); + netlist_cell_types[tn] = stringf("Span12Mux_%c%d", horiz ? 'h' : 'v', count_length); netlist_cell_ports[tn]["I"] = seg_name(*cursor); netlist_cell_ports[tn]["O"] = seg_name(trg); cell_log[trg] = std::make_pair(*cursor, stringf("Span12Mux_%c%d", horiz ? 'h' : 'v', count_length)); |