mirror of https://github.com/YosysHQ/icestorm.git
icetime progress
This commit is contained in:
parent
8467e955e5
commit
fdaac3542c
|
|
@ -26,7 +26,7 @@ uninstall:
|
||||||
|
|
||||||
test0 test1 test2 test3 test4 test5 test6 test7 test8 test9: icetime
|
test0 test1 test2 test3 test4 test5 test6 test7 test8 test9: icetime
|
||||||
test -f $@_ref.v || python3 mktest.py $@
|
test -f $@_ref.v || python3 mktest.py $@
|
||||||
./icetime -P tq144 -p $@.pcf $@.asc $@_out.v
|
./icetime -m -P tq144 -p $@.pcf $@.asc $@_out.v
|
||||||
yosys $@.ys
|
yosys $@.ys
|
||||||
|
|
||||||
run0 run1 run2 run3 run4 run5 run6 run7 run8 run9: icetime
|
run0 run1 run2 run3 run4 run5 run6 run7 run8 run9: icetime
|
||||||
|
|
|
||||||
|
|
@ -28,13 +28,12 @@
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <set>
|
#include <set>
|
||||||
|
|
||||||
#define MAX_SPAN_HACK 1
|
|
||||||
|
|
||||||
// add this number of ns as estimation for clock distribution mismatch
|
// add this number of ns as estimation for clock distribution mismatch
|
||||||
#define GLOBAL_CLK_DIST_JITTER 0.1
|
#define GLOBAL_CLK_DIST_JITTER 0.1
|
||||||
|
|
||||||
FILE *fin, *fout;
|
FILE *fin, *fout;
|
||||||
bool verbose = false;
|
bool verbose = false;
|
||||||
|
bool max_span_hack = false;
|
||||||
|
|
||||||
std::string config_device, selected_package;
|
std::string config_device, selected_package;
|
||||||
std::vector<std::vector<std::string>> config_tile_type;
|
std::vector<std::vector<std::string>> config_tile_type;
|
||||||
|
|
@ -1510,7 +1509,7 @@ struct make_interconn_worker_t
|
||||||
cell_log[trg] = std::make_pair(*cursor, "IoSpan4Mux");
|
cell_log[trg] = std::make_pair(*cursor, "IoSpan4Mux");
|
||||||
} else {
|
} else {
|
||||||
tn = tname();
|
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', max_span_hack ? 4 : count_length);
|
||||||
netlist_cell_ports[tn]["I"] = seg_name(*cursor);
|
netlist_cell_ports[tn]["I"] = seg_name(*cursor);
|
||||||
netlist_cell_ports[tn]["O"] = seg_name(trg);
|
netlist_cell_ports[tn]["O"] = seg_name(trg);
|
||||||
cell_log[trg] = std::make_pair(*cursor, stringf("Span4Mux_%c%d", horiz ? 'h' : 'v', count_length));
|
cell_log[trg] = std::make_pair(*cursor, stringf("Span4Mux_%c%d", horiz ? 'h' : 'v', count_length));
|
||||||
|
|
@ -1538,7 +1537,7 @@ struct make_interconn_worker_t
|
||||||
count_length = std::max(count_length, 0);
|
count_length = std::max(count_length, 0);
|
||||||
|
|
||||||
tn = tname();
|
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', max_span_hack ? 12 : count_length);
|
||||||
netlist_cell_ports[tn]["I"] = seg_name(*cursor);
|
netlist_cell_ports[tn]["I"] = seg_name(*cursor);
|
||||||
netlist_cell_ports[tn]["O"] = seg_name(trg);
|
netlist_cell_ports[tn]["O"] = seg_name(trg);
|
||||||
cell_log[trg] = std::make_pair(*cursor, stringf("Span12Mux_%c%d", horiz ? 'h' : 'v', count_length));
|
cell_log[trg] = std::make_pair(*cursor, stringf("Span12Mux_%c%d", horiz ? 'h' : 'v', count_length));
|
||||||
|
|
@ -1727,6 +1726,9 @@ void help(const char *cmd)
|
||||||
printf(" write a graphviz description of the interconnect tree\n");
|
printf(" write a graphviz description of the interconnect tree\n");
|
||||||
printf(" that includes the given net to 'icetime_graph.dot'.\n");
|
printf(" that includes the given net to 'icetime_graph.dot'.\n");
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
printf(" -m\n");
|
||||||
|
printf(" enable max_span_hack for conservative estimates\n");
|
||||||
|
printf("\n");
|
||||||
printf(" -t\n");
|
printf(" -t\n");
|
||||||
printf(" print a timing estimate (based on topological timing\n");
|
printf(" print a timing estimate (based on topological timing\n");
|
||||||
printf(" analysis)\n");
|
printf(" analysis)\n");
|
||||||
|
|
@ -1746,7 +1748,7 @@ int main(int argc, char **argv)
|
||||||
std::vector<std::string> print_timing_nets;
|
std::vector<std::string> print_timing_nets;
|
||||||
|
|
||||||
int opt;
|
int opt;
|
||||||
while ((opt = getopt(argc, argv, "p:P:g:tT:v")) != -1)
|
while ((opt = getopt(argc, argv, "p:P:g:mtT:v")) != -1)
|
||||||
{
|
{
|
||||||
switch (opt)
|
switch (opt)
|
||||||
{
|
{
|
||||||
|
|
@ -1760,6 +1762,9 @@ int main(int argc, char **argv)
|
||||||
case 'g':
|
case 'g':
|
||||||
graph_nets.insert(atoi(optarg));
|
graph_nets.insert(atoi(optarg));
|
||||||
break;
|
break;
|
||||||
|
case 'm':
|
||||||
|
max_span_hack = true;
|
||||||
|
break;
|
||||||
case 't':
|
case 't':
|
||||||
print_timing = true;
|
print_timing = true;
|
||||||
break;
|
break;
|
||||||
|
|
@ -2006,6 +2011,8 @@ int main(int argc, char **argv)
|
||||||
printf("==========================================\n");
|
printf("==========================================\n");
|
||||||
printf("\n");
|
printf("\n");
|
||||||
printf("Warning: This timing analysis report is an estimate!\n");
|
printf("Warning: This timing analysis report is an estimate!\n");
|
||||||
|
if (max_span_hack)
|
||||||
|
printf("Info: max_span_hack is enabled: estimate is conservative.\n");
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
TimingAnalysis ta;
|
TimingAnalysis ta;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue