mirror of https://github.com/YosysHQ/icestorm.git
icetime progress
This commit is contained in:
parent
1a99f95507
commit
7ea81c43da
|
|
@ -28,8 +28,8 @@ run0 run1 run2 run3 run4 run5 run6 run7 run8 run9: icetime
|
||||||
./icetime -P tq144 -p $(subst run,test,$@).pcf $(subst run,test,$@).txt $(subst run,test,$@)_out.v
|
./icetime -P tq144 -p $(subst run,test,$@).pcf $(subst run,test,$@).txt $(subst run,test,$@)_out.v
|
||||||
|
|
||||||
show0 show1 show2 show3 show4 show5 show6 show7 show8 show9:
|
show0 show1 show2 show3 show4 show5 show6 show7 show8 show9:
|
||||||
# yosys -p 'equiv_mark; opt_clean -purge; show -color orange a:equiv_region!=0' $(subst show,test,$@).il
|
bash show.sh $(subst show,test,$@)
|
||||||
yosys -p 'equiv_purge; opt_clean -purge; show' $(subst show,test,$@).il
|
xdot $(subst show,test,$@).dot
|
||||||
|
|
||||||
test: test0 test1 test2 test3 test4 test5 test6 test7 test8 test9
|
test: test0 test1 test2 test3 test4 test5 test6 test7 test8 test9
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <set>
|
#include <set>
|
||||||
|
|
||||||
#define ZSPAN_HACK 1
|
#define ZSPAN_HACK 0
|
||||||
|
|
||||||
FILE *fin, *fout;
|
FILE *fin, *fout;
|
||||||
|
|
||||||
|
|
@ -58,8 +58,7 @@ std::map<std::tuple<int, int, std::string>, int> x_y_name_net;
|
||||||
std::map<std::tuple<int, int, int>, net_segment_t> x_y_net_segment;
|
std::map<std::tuple<int, int, int>, net_segment_t> x_y_net_segment;
|
||||||
std::map<int, std::set<int>> net_buffers, net_rbuffers, net_routing;
|
std::map<int, std::set<int>> net_buffers, net_rbuffers, net_routing;
|
||||||
std::map<std::pair<int, int>, std::pair<int, int>> connection_pos;
|
std::map<std::pair<int, int>, std::pair<int, int>> connection_pos;
|
||||||
std::set<int> used_nets;
|
std::set<int> used_nets, graph_nets;
|
||||||
int graph_net = -1;
|
|
||||||
|
|
||||||
std::set<net_segment_t> interconn_src, interconn_dst;
|
std::set<net_segment_t> interconn_src, interconn_dst;
|
||||||
std::set<int> no_interconn_net;
|
std::set<int> no_interconn_net;
|
||||||
|
|
@ -1045,16 +1044,8 @@ struct make_interconn_worker_t
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void show_seg_tree(const net_segment_t &src)
|
void show_seg_tree(const net_segment_t &src, FILE *f)
|
||||||
{
|
{
|
||||||
FILE *f = fopen("icetime_graph.dot", "w");
|
|
||||||
if (f == nullptr) {
|
|
||||||
perror("Can't open 'icetime_graph.dot' for writing");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf(f, "digraph \"icetime graph for net %d\" {\n", graph_net);
|
|
||||||
fprintf(f, " rankdir = \"LR\";\n");
|
|
||||||
fprintf(f, " subgraph cluster_net_%d {\n", src.net);
|
fprintf(f, " subgraph cluster_net_%d {\n", src.net);
|
||||||
fprintf(f, " label = \"net %d\";\n", src.net);
|
fprintf(f, " label = \"net %d\";\n", src.net);
|
||||||
|
|
||||||
|
|
@ -1064,13 +1055,10 @@ struct make_interconn_worker_t
|
||||||
|
|
||||||
for (auto &line : global_lines)
|
for (auto &line : global_lines)
|
||||||
fprintf(f, "%s", line.c_str());
|
fprintf(f, "%s", line.c_str());
|
||||||
|
|
||||||
fprintf(f, "}\n");
|
|
||||||
fclose(f);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void make_interconn(const net_segment_t &src)
|
void make_interconn(const net_segment_t &src, FILE *graph_f)
|
||||||
{
|
{
|
||||||
make_interconn_worker_t worker;
|
make_interconn_worker_t worker;
|
||||||
worker.build_net_tree(src.net);
|
worker.build_net_tree(src.net);
|
||||||
|
|
@ -1103,8 +1091,11 @@ void make_interconn(const net_segment_t &src)
|
||||||
worker.create_cells(seg);
|
worker.create_cells(seg);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (worker.net_tree.count(graph_net))
|
for (int n : graph_nets)
|
||||||
worker.show_seg_tree(src);
|
if (worker.net_tree.count(n)) {
|
||||||
|
worker.show_seg_tree(src, graph_f);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void help(const char *cmd)
|
void help(const char *cmd)
|
||||||
|
|
@ -1138,7 +1129,7 @@ int main(int argc, char **argv)
|
||||||
selected_package = optarg;
|
selected_package = optarg;
|
||||||
break;
|
break;
|
||||||
case 'g':
|
case 'g':
|
||||||
graph_net = atoi(optarg);
|
graph_nets.insert(atoi(optarg));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
help(argv[0]);
|
help(argv[0]);
|
||||||
|
|
@ -1177,8 +1168,27 @@ int main(int argc, char **argv)
|
||||||
for (auto &seg : net_to_segments[net])
|
for (auto &seg : net_to_segments[net])
|
||||||
make_seg_cell(net, seg);
|
make_seg_cell(net, seg);
|
||||||
|
|
||||||
|
FILE *graph_f = nullptr;
|
||||||
|
|
||||||
|
if (!graph_nets.empty())
|
||||||
|
{
|
||||||
|
graph_f = fopen("icetime_graph.dot", "w");
|
||||||
|
if (graph_f == nullptr) {
|
||||||
|
perror("Can't open 'icetime_graph.dot' for writing");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(graph_f, "digraph \"icetime net-segment graph \" {\n");
|
||||||
|
fprintf(graph_f, " rankdir = \"LR\";\n");
|
||||||
|
}
|
||||||
|
|
||||||
for (auto &seg : interconn_src)
|
for (auto &seg : interconn_src)
|
||||||
make_interconn(seg);
|
make_interconn(seg, graph_f);
|
||||||
|
|
||||||
|
if (graph_f) {
|
||||||
|
fprintf(graph_f, "}\n");
|
||||||
|
fclose(graph_f);
|
||||||
|
}
|
||||||
|
|
||||||
fprintf(fout, "module chip (");
|
fprintf(fout, "module chip (");
|
||||||
const char *io_sep = "";
|
const char *io_sep = "";
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ os.rename("%s.v" % sys.argv[1], "%s_in.v" % sys.argv[1])
|
||||||
|
|
||||||
with open("%s_ref.v" % sys.argv[1], "w") as f:
|
with open("%s_ref.v" % sys.argv[1], "w") as f:
|
||||||
for line in open("%s.vsb" % sys.argv[1], "r"):
|
for line in open("%s.vsb" % sys.argv[1], "r"):
|
||||||
zspan_hack = True
|
zspan_hack = False
|
||||||
|
|
||||||
line = line.replace(" Span4Mux_s0_h ", " Span4Mux_h0 " if zspan_hack else " Span4Mux_h0 ")
|
line = line.replace(" Span4Mux_s0_h ", " Span4Mux_h0 " if zspan_hack else " Span4Mux_h0 ")
|
||||||
line = line.replace(" Span4Mux_s1_h ", " Span4Mux_h0 " if zspan_hack else " Span4Mux_h1 ")
|
line = line.replace(" Span4Mux_s1_h ", " Span4Mux_h0 " if zspan_hack else " Span4Mux_h1 ")
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
yosys -p '
|
||||||
|
cd equiv
|
||||||
|
equiv_mark
|
||||||
|
select -write equiv_graph.segs w:seg_*_gate a:equiv_region!=0 %i
|
||||||
|
show -prefix equiv_graph -format dot a:equiv_region!=0 %co2 a:equiv_region!=0 %ci2
|
||||||
|
' $1.il
|
||||||
|
|
||||||
|
./icetime -P tq144 -p $1.pcf $1.txt $( sed 's,_gate$,,; s,.*_,-g ,;' < equiv_graph.segs ) > /dev/null
|
||||||
|
|
||||||
|
{
|
||||||
|
egrep -v '^}' icetime_graph.dot
|
||||||
|
egrep -v '^(digraph|label=|})' equiv_graph.dot
|
||||||
|
|
||||||
|
for seg in $( sed 's,equiv/,,' equiv_graph.segs ); do
|
||||||
|
n=$( awk "/$seg/ { print \$1; }" equiv_graph.dot )
|
||||||
|
s=$( echo $seg | sed 's,_[0-9]*_gate$,,' )
|
||||||
|
echo " $n:s -> $s:n [style=bold];"
|
||||||
|
done
|
||||||
|
echo "}"
|
||||||
|
} > $1.dot
|
||||||
|
|
||||||
|
rm -f equiv_graph.segs
|
||||||
|
rm -f equiv_graph.dot
|
||||||
|
rm -f icetime_graph.dot
|
||||||
|
|
||||||
Loading…
Reference in New Issue