diff options
author | Clifford Wolf <clifford@clifford.at> | 2015-10-29 12:13:13 +0100 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2015-10-29 12:13:13 +0100 |
commit | dc3698753afd9c7b40a86cc86a3abb7ae00704cb (patch) | |
tree | fec036e73930cc5787cc5bc276c5b41ebdfe6cef | |
parent | b8cf8e19a2e899d08e7a8e339f831af016d3a315 (diff) | |
download | icestorm-dc3698753afd9c7b40a86cc86a3abb7ae00704cb.tar.gz icestorm-dc3698753afd9c7b40a86cc86a3abb7ae00704cb.tar.bz2 icestorm-dc3698753afd9c7b40a86cc86a3abb7ae00704cb.zip |
icetime progress
-rw-r--r-- | icetime/Makefile | 2 | ||||
-rw-r--r-- | icetime/icetime.cc | 28 |
2 files changed, 27 insertions, 3 deletions
diff --git a/icetime/Makefile b/icetime/Makefile index faf4188..c7f0c14 100644 --- a/icetime/Makefile +++ b/icetime/Makefile @@ -33,6 +33,8 @@ show0 show1 show2 show3 show4 show5 show6 show7 show8 show9: icetime test: test0 test1 test2 test3 test4 test5 test6 test7 test8 test9 +show: show0 show1 show2 show3 show4 show5 show6 show7 show8 show9 + clean: rm -f icetime *.o *.d rm -rf test[0-9]* diff --git a/icetime/icetime.cc b/icetime/icetime.cc index a9ecb85..026c806 100644 --- a/icetime/icetime.cc +++ b/icetime/icetime.cc @@ -771,6 +771,7 @@ struct make_interconn_worker_t std::map<int, std::set<int>> net_tree; std::map<net_segment_t, std::set<net_segment_t>> seg_tree; std::map<net_segment_t, net_segment_t> seg_parents; + std::map<net_segment_t, int> porch_segs; std::set<net_segment_t> target_segs, handled_segs; std::set<int> handled_global_nets; @@ -801,13 +802,22 @@ struct make_interconn_worker_t queue.insert(src); std::map<net_segment_t, std::set<net_segment_t>> seg_connections; + porch_segs[src] = 1; for (auto &it: net_tree) - for (int child : it.second) { + for (int child : it.second) + { auto pos = connection_pos.at(std::pair<int, int>(it.first, child)); std::tuple<int, int, int> key_parent(pos.first, pos.second, it.first); std::tuple<int, int, int> key_child(pos.first, pos.second, child); seg_connections[x_y_net_segment.at(key_parent)].insert(x_y_net_segment.at(key_child)); + + + const std::string &parent_name = x_y_net_segment.at(key_parent).name; + const std::string &child_name = x_y_net_segment.at(key_child).name; + if (parent_name.substr(0, 7) == "span12_" || parent_name.substr(0, 5) == "sp12_") + if (child_name.substr(0, 6) == "span4_" || child_name.substr(0, 4) == "sp4_") + porch_segs[x_y_net_segment.at(key_child)] = 1; } for (int distance_counter = 0; !queue.empty(); distance_counter++) @@ -848,6 +858,9 @@ struct make_interconn_worker_t if (distances.count(child) != 0) continue; + if (porch_segs.count(seg)) + porch_segs[child] = porch_segs[seg]+1; + reverse_edges[child] = seg; next_queue.insert(child); } @@ -918,6 +931,11 @@ struct make_interconn_worker_t if (cursor->net == trg.net) goto skip_to_cursor; + count_length = std::max(count_length, 0); + + if (porch_segs.count(*cursor)) + count_length = 4; + if (cursor->name.substr(0, 7) == "span12_" || cursor->name.substr(0, 5) == "sp12_") { extra_vlog.push_back(stringf(" Sp12to4 %s (.I(%s), .O(%s));\n", tname().c_str(), seg_name(*cursor).c_str(), seg_name(trg).c_str())); @@ -953,6 +971,8 @@ struct make_interconn_worker_t if (cursor->net == trg.net) goto skip_to_cursor; + count_length = std::max(count_length, 0); + extra_vlog.push_back(stringf(" Span12Mux_%c%d %s (.I(%s), .O(%s));\n", horiz ? 'h' : 'v', ZSPAN_HACK ? 0 : count_length, tname().c_str(), seg_name(*cursor).c_str(), seg_name(trg).c_str())); @@ -1026,8 +1046,10 @@ struct make_interconn_worker_t void show_seg_tree_worker(FILE *f, const net_segment_t &src, std::vector<std::string> &global_lines) { - fprintf(f, " %s [ shape=octagon, label=\"%d %d\\n%s\" ];\n", - graph_seg_name(src).c_str(), src.x, src.y, src.name.c_str()); + std::string porch_str = porch_segs.count(src) ? stringf("\\n[P%d]", porch_segs.at(src)) : ""; + + fprintf(f, " %s [ shape=octagon, label=\"%d %d\\n%s%s\" ];\n", + graph_seg_name(src).c_str(), src.x, src.y, src.name.c_str(), porch_str.c_str()); std::vector<net_segment_t> other_net_children; |