aboutsummaryrefslogtreecommitdiffstats
path: root/icetime
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2015-10-29 12:13:13 +0100
committerClifford Wolf <clifford@clifford.at>2015-10-29 12:13:13 +0100
commitdc3698753afd9c7b40a86cc86a3abb7ae00704cb (patch)
treefec036e73930cc5787cc5bc276c5b41ebdfe6cef /icetime
parentb8cf8e19a2e899d08e7a8e339f831af016d3a315 (diff)
downloadicestorm-dc3698753afd9c7b40a86cc86a3abb7ae00704cb.tar.gz
icestorm-dc3698753afd9c7b40a86cc86a3abb7ae00704cb.tar.bz2
icestorm-dc3698753afd9c7b40a86cc86a3abb7ae00704cb.zip
icetime progress
Diffstat (limited to 'icetime')
-rw-r--r--icetime/Makefile2
-rw-r--r--icetime/icetime.cc28
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;