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
|
||||
|
||||
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
|
||||
yosys -p 'equiv_purge; opt_clean -purge; show' $(subst show,test,$@).il
|
||||
bash show.sh $(subst show,test,$@)
|
||||
xdot $(subst show,test,$@).dot
|
||||
|
||||
test: test0 test1 test2 test3 test4 test5 test6 test7 test8 test9
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
#include <map>
|
||||
#include <set>
|
||||
|
||||
#define ZSPAN_HACK 1
|
||||
#define ZSPAN_HACK 0
|
||||
|
||||
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<int, std::set<int>> net_buffers, net_rbuffers, net_routing;
|
||||
std::map<std::pair<int, int>, std::pair<int, int>> connection_pos;
|
||||
std::set<int> used_nets;
|
||||
int graph_net = -1;
|
||||
std::set<int> used_nets, graph_nets;
|
||||
|
||||
std::set<net_segment_t> interconn_src, interconn_dst;
|
||||
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, " label = \"net %d\";\n", src.net);
|
||||
|
||||
|
|
@ -1064,13 +1055,10 @@ struct make_interconn_worker_t
|
|||
|
||||
for (auto &line : global_lines)
|
||||
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;
|
||||
worker.build_net_tree(src.net);
|
||||
|
|
@ -1103,8 +1091,11 @@ void make_interconn(const net_segment_t &src)
|
|||
worker.create_cells(seg);
|
||||
}
|
||||
|
||||
if (worker.net_tree.count(graph_net))
|
||||
worker.show_seg_tree(src);
|
||||
for (int n : graph_nets)
|
||||
if (worker.net_tree.count(n)) {
|
||||
worker.show_seg_tree(src, graph_f);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void help(const char *cmd)
|
||||
|
|
@ -1138,7 +1129,7 @@ int main(int argc, char **argv)
|
|||
selected_package = optarg;
|
||||
break;
|
||||
case 'g':
|
||||
graph_net = atoi(optarg);
|
||||
graph_nets.insert(atoi(optarg));
|
||||
break;
|
||||
default:
|
||||
help(argv[0]);
|
||||
|
|
@ -1177,8 +1168,27 @@ int main(int argc, char **argv)
|
|||
for (auto &seg : net_to_segments[net])
|
||||
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)
|
||||
make_interconn(seg);
|
||||
make_interconn(seg, graph_f);
|
||||
|
||||
if (graph_f) {
|
||||
fprintf(graph_f, "}\n");
|
||||
fclose(graph_f);
|
||||
}
|
||||
|
||||
fprintf(fout, "module chip (");
|
||||
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:
|
||||
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_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