Merge branch 'tileable_routing' into dev
This commit is contained in:
commit
ea7e119313
|
@ -128,6 +128,7 @@ sub print_usage()
|
||||||
print " -N <int> : N-LUT/Matrix\n";
|
print " -N <int> : N-LUT/Matrix\n";
|
||||||
print " Other Options:\n";
|
print " Other Options:\n";
|
||||||
print " [ General ] \n";
|
print " [ General ] \n";
|
||||||
|
print " \t-matlab_rpt <data_name> : .m file consists of data compatible to matlab scripts. Specify the data name to be appeared in the script\n";
|
||||||
print " \t-I <int> : Number of inputs of a CLB, mandatory when mpack1 flow is chosen\n";
|
print " \t-I <int> : Number of inputs of a CLB, mandatory when mpack1 flow is chosen\n";
|
||||||
print " \t-K <int> : K-LUT, mandatory when standard flow is chosen\n";
|
print " \t-K <int> : K-LUT, mandatory when standard flow is chosen\n";
|
||||||
print " \t-M <int> : M-Matrix, mandatory when mpack1 flow is chosen\n";
|
print " \t-M <int> : M-Matrix, mandatory when mpack1 flow is chosen\n";
|
||||||
|
@ -306,6 +307,7 @@ sub opts_read()
|
||||||
&read_opt_into_hash("conf","on","on");
|
&read_opt_into_hash("conf","on","on");
|
||||||
&read_opt_into_hash("benchmark","on","on");
|
&read_opt_into_hash("benchmark","on","on");
|
||||||
&read_opt_into_hash("rpt","on","on");
|
&read_opt_into_hash("rpt","on","on");
|
||||||
|
&read_opt_into_hash("matlab_rpt","on","off"); # Add an option to output report file compatible to matlab scripts
|
||||||
&read_opt_into_hash("N","on","on");
|
&read_opt_into_hash("N","on","on");
|
||||||
&read_opt_into_hash("K","on","off");
|
&read_opt_into_hash("K","on","off");
|
||||||
&read_opt_into_hash("I","on","off");
|
&read_opt_into_hash("I","on","off");
|
||||||
|
@ -1295,7 +1297,6 @@ sub run_std_vpr($ $ $ $ $ $ $ $ $)
|
||||||
{
|
{
|
||||||
my ($blif,$bm,$arch,$net,$place,$route,$fix_chan_width,$log,$act_file) = @_;
|
my ($blif,$bm,$arch,$net,$place,$route,$fix_chan_width,$log,$act_file) = @_;
|
||||||
my ($vpr_dir,$vpr_name) = &split_prog_path($conf_ptr->{dir_path}->{vpr_path}->{val});
|
my ($vpr_dir,$vpr_name) = &split_prog_path($conf_ptr->{dir_path}->{vpr_path}->{val});
|
||||||
chdir $vpr_dir;
|
|
||||||
|
|
||||||
my ($power_opts);
|
my ($power_opts);
|
||||||
if ("on" eq $opt_ptr->{power}) {
|
if ("on" eq $opt_ptr->{power}) {
|
||||||
|
@ -1426,6 +1427,10 @@ sub run_std_vpr($ $ $ $ $ $ $ $ $)
|
||||||
if ("on" eq $opt_ptr->{vpr_max_router_iteration}) {
|
if ("on" eq $opt_ptr->{vpr_max_router_iteration}) {
|
||||||
$other_opt .= "--max_router_iterations $opt_ptr->{vpr_max_router_iteration_val} ";
|
$other_opt .= "--max_router_iterations $opt_ptr->{vpr_max_router_iteration_val} ";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
chdir $vpr_dir;
|
||||||
|
print "Entering $vpr_dir\n";
|
||||||
|
|
||||||
print "./$vpr_name $arch $blif --net_file $net --place_file $place --route_file $route --full_stats --nodisp $power_opts $packer_opts $chan_width_opt $vpr_spice_opts $other_opt > $log\n";
|
print "./$vpr_name $arch $blif --net_file $net --place_file $place --route_file $route --full_stats --nodisp $power_opts $packer_opts $chan_width_opt $vpr_spice_opts $other_opt > $log\n";
|
||||||
system("./$vpr_name $arch $blif --net_file $net --place_file $place --route_file $route --full_stats --nodisp $power_opts $packer_opts $chan_width_opt $vpr_spice_opts $other_opt > $log");
|
system("./$vpr_name $arch $blif --net_file $net --place_file $place --route_file $route --full_stats --nodisp $power_opts $packer_opts $chan_width_opt $vpr_spice_opts $other_opt > $log");
|
||||||
|
|
||||||
|
@ -1454,7 +1459,6 @@ sub run_vpr_route($ $ $ $ $ $ $ $ $)
|
||||||
{
|
{
|
||||||
my ($blif,$bm,$arch,$net,$place,$route,$fix_chan_width,$log,$act_file) = @_;
|
my ($blif,$bm,$arch,$net,$place,$route,$fix_chan_width,$log,$act_file) = @_;
|
||||||
my ($vpr_dir,$vpr_name) = &split_prog_path($conf_ptr->{dir_path}->{vpr_path}->{val});
|
my ($vpr_dir,$vpr_name) = &split_prog_path($conf_ptr->{dir_path}->{vpr_path}->{val});
|
||||||
chdir $vpr_dir;
|
|
||||||
|
|
||||||
my ($power_opts);
|
my ($power_opts);
|
||||||
if ("on" eq $opt_ptr->{power}) {
|
if ("on" eq $opt_ptr->{power}) {
|
||||||
|
@ -1508,7 +1512,12 @@ sub run_vpr_route($ $ $ $ $ $ $ $ $)
|
||||||
$other_opt .= "--router_algorithm breadth_first ";
|
$other_opt .= "--router_algorithm breadth_first ";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
chdir $vpr_dir;
|
||||||
|
print "Entering $vpr_dir\n";
|
||||||
|
|
||||||
|
print "./$vpr_name $arch $blif --route --blif_file $blif --net_file $net --place_file $place --route_file $route --full_stats --nodisp $power_opts $chan_width_opt $vpr_spice_opts $other_opt > $log\n";
|
||||||
system("./$vpr_name $arch $blif --route --blif_file $blif --net_file $net --place_file $place --route_file $route --full_stats --nodisp $power_opts $chan_width_opt $vpr_spice_opts $other_opt > $log");
|
system("./$vpr_name $arch $blif --route --blif_file $blif --net_file $net --place_file $place --route_file $route --full_stats --nodisp $power_opts $chan_width_opt $vpr_spice_opts $other_opt > $log");
|
||||||
|
print "\n";
|
||||||
|
|
||||||
chdir $cwd;
|
chdir $cwd;
|
||||||
}
|
}
|
||||||
|
@ -2975,6 +2984,14 @@ sub gen_csv_rpt_vtr_flow($ $)
|
||||||
my @keywords;
|
my @keywords;
|
||||||
my ($K_val,$N_val) = ($opt_ptr->{K_val},$opt_ptr->{N_val});
|
my ($K_val,$N_val) = ($opt_ptr->{K_val},$opt_ptr->{N_val});
|
||||||
|
|
||||||
|
# adapt to matlab format if the option is enabled
|
||||||
|
if ("on" eq $opt_ptr->{matlab_rpt}) {
|
||||||
|
# Print the data name
|
||||||
|
print $CSVFH "$opt_ptr->{matlab_rpt_val} = [\n";
|
||||||
|
# We will set the stats line to be commented
|
||||||
|
print $CSVFH "%";
|
||||||
|
}
|
||||||
|
|
||||||
# Print out Standard Stats First
|
# Print out Standard Stats First
|
||||||
print $CSVFH "$tag";
|
print $CSVFH "$tag";
|
||||||
print $CSVFH ",LUTs";
|
print $CSVFH ",LUTs";
|
||||||
|
@ -3003,7 +3020,14 @@ sub gen_csv_rpt_vtr_flow($ $)
|
||||||
# Check log/stats one by one
|
# Check log/stats one by one
|
||||||
foreach $tmp(@benchmark_names) {
|
foreach $tmp(@benchmark_names) {
|
||||||
$tmp =~ s/\.v$//g;
|
$tmp =~ s/\.v$//g;
|
||||||
print $CSVFH "$tmp";
|
|
||||||
|
# For matlab script, we use {} for string
|
||||||
|
if ("on" eq $opt_ptr->{matlab_rpt}) {
|
||||||
|
print $CSVFH "{'$tmp'}";
|
||||||
|
} else {
|
||||||
|
print $CSVFH "$tmp";
|
||||||
|
}
|
||||||
|
|
||||||
print $CSVFH ",$rpt_h{$tag}->{$tmp}->{$N_val}->{$K_val}->{LUTs}";
|
print $CSVFH ",$rpt_h{$tag}->{$tmp}->{$N_val}->{$K_val}->{LUTs}";
|
||||||
if ("on" eq $opt_ptr->{min_route_chan_width}) {
|
if ("on" eq $opt_ptr->{min_route_chan_width}) {
|
||||||
print $CSVFH ",$rpt_h{$tag}->{$tmp}->{$N_val}->{$K_val}->{min_route_chan_width}";
|
print $CSVFH ",$rpt_h{$tag}->{$tmp}->{$N_val}->{$K_val}->{min_route_chan_width}";
|
||||||
|
@ -3031,7 +3055,17 @@ sub gen_csv_rpt_vtr_flow($ $)
|
||||||
print $CSVFH ",$rpt_ptr->{$tag}->{$tmp}->{$N_val}->{$K_val}->{power}->{dynamic}";
|
print $CSVFH ",$rpt_ptr->{$tag}->{$tmp}->{$N_val}->{$K_val}->{power}->{dynamic}";
|
||||||
print $CSVFH ",$rpt_ptr->{$tag}->{$tmp}->{$N_val}->{$K_val}->{power}->{leakage}";
|
print $CSVFH ",$rpt_ptr->{$tag}->{$tmp}->{$N_val}->{$K_val}->{power}->{leakage}";
|
||||||
}
|
}
|
||||||
print $CSVFH "\n";
|
# For matlab script, we end with a semicolumn to be compatiable to matlab
|
||||||
|
if ("on" eq $opt_ptr->{matlab_rpt}) {
|
||||||
|
print $CSVFH ";\n";
|
||||||
|
} else {
|
||||||
|
print $CSVFH "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# For matlab script, we end with ];
|
||||||
|
if ("on" eq $opt_ptr->{matlab_rpt}) {
|
||||||
|
print $CSVFH "];\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3041,6 +3075,14 @@ sub gen_csv_rpt_yosys_vpr_flow($ $)
|
||||||
my ($tmp,$ikw,$tmpkw);
|
my ($tmp,$ikw,$tmpkw);
|
||||||
my @keywords;
|
my @keywords;
|
||||||
my ($K_val,$N_val) = ($opt_ptr->{K_val},$opt_ptr->{N_val});
|
my ($K_val,$N_val) = ($opt_ptr->{K_val},$opt_ptr->{N_val});
|
||||||
|
|
||||||
|
# adapt to matlab format if the option is enabled
|
||||||
|
if ("on" eq $opt_ptr->{matlab_rpt}) {
|
||||||
|
# Print the data name
|
||||||
|
print $CSVFH "$opt_ptr->{matlab_rpt_val} = [\n";
|
||||||
|
# We will set the stats line to be commented
|
||||||
|
print $CSVFH "%";
|
||||||
|
}
|
||||||
|
|
||||||
# Print out Standard Stats First
|
# Print out Standard Stats First
|
||||||
print $CSVFH "$tag";
|
print $CSVFH "$tag";
|
||||||
|
@ -3071,7 +3113,14 @@ sub gen_csv_rpt_yosys_vpr_flow($ $)
|
||||||
foreach $tmp(@benchmark_names) {
|
foreach $tmp(@benchmark_names) {
|
||||||
my @tokens = split('/', $tmp);
|
my @tokens = split('/', $tmp);
|
||||||
$tmp = $tokens[0];
|
$tmp = $tokens[0];
|
||||||
print $CSVFH "$tmp";
|
|
||||||
|
# For matlab script, we use {} for string
|
||||||
|
if ("on" eq $opt_ptr->{matlab_rpt}) {
|
||||||
|
print $CSVFH "{'$tmp'}";
|
||||||
|
} else {
|
||||||
|
print $CSVFH "$tmp";
|
||||||
|
}
|
||||||
|
|
||||||
print $CSVFH ",$rpt_h{$tag}->{$tmp}->{$N_val}->{$K_val}->{LUTs}";
|
print $CSVFH ",$rpt_h{$tag}->{$tmp}->{$N_val}->{$K_val}->{LUTs}";
|
||||||
if ("on" eq $opt_ptr->{min_route_chan_width}) {
|
if ("on" eq $opt_ptr->{min_route_chan_width}) {
|
||||||
print $CSVFH ",$rpt_h{$tag}->{$tmp}->{$N_val}->{$K_val}->{min_route_chan_width}";
|
print $CSVFH ",$rpt_h{$tag}->{$tmp}->{$N_val}->{$K_val}->{min_route_chan_width}";
|
||||||
|
@ -3099,7 +3148,17 @@ sub gen_csv_rpt_yosys_vpr_flow($ $)
|
||||||
print $CSVFH ",$rpt_ptr->{$tag}->{$tmp}->{$N_val}->{$K_val}->{power}->{dynamic}";
|
print $CSVFH ",$rpt_ptr->{$tag}->{$tmp}->{$N_val}->{$K_val}->{power}->{dynamic}";
|
||||||
print $CSVFH ",$rpt_ptr->{$tag}->{$tmp}->{$N_val}->{$K_val}->{power}->{leakage}";
|
print $CSVFH ",$rpt_ptr->{$tag}->{$tmp}->{$N_val}->{$K_val}->{power}->{leakage}";
|
||||||
}
|
}
|
||||||
print $CSVFH "\n";
|
# For matlab script, we end with a semicolumn to be compatiable to matlab
|
||||||
|
if ("on" eq $opt_ptr->{matlab_rpt}) {
|
||||||
|
print $CSVFH ";\n";
|
||||||
|
} else {
|
||||||
|
print $CSVFH "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# For matlab script, we end with ];
|
||||||
|
if ("on" eq $opt_ptr->{matlab_rpt}) {
|
||||||
|
print $CSVFH "];\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3109,6 +3168,14 @@ sub gen_csv_rpt_standard_flow($ $)
|
||||||
my ($tmp,$ikw,$tmpkw);
|
my ($tmp,$ikw,$tmpkw);
|
||||||
my @keywords;
|
my @keywords;
|
||||||
my ($K_val,$N_val) = ($opt_ptr->{K_val},$opt_ptr->{N_val});
|
my ($K_val,$N_val) = ($opt_ptr->{K_val},$opt_ptr->{N_val});
|
||||||
|
|
||||||
|
# adapt to matlab format if the option is enabled
|
||||||
|
if ("on" eq $opt_ptr->{matlab_rpt}) {
|
||||||
|
# Print the data name
|
||||||
|
print $CSVFH "$opt_ptr->{matlab_rpt_val} = [\n";
|
||||||
|
# We will set the stats line to be commented
|
||||||
|
print $CSVFH "%";
|
||||||
|
}
|
||||||
|
|
||||||
# Print out Standard Stats First
|
# Print out Standard Stats First
|
||||||
print $CSVFH "$tag";
|
print $CSVFH "$tag";
|
||||||
|
@ -3138,7 +3205,13 @@ sub gen_csv_rpt_standard_flow($ $)
|
||||||
# Check log/stats one by one
|
# Check log/stats one by one
|
||||||
foreach $tmp(@benchmark_names) {
|
foreach $tmp(@benchmark_names) {
|
||||||
$tmp =~ s/\.blif$//g;
|
$tmp =~ s/\.blif$//g;
|
||||||
print $CSVFH "$tmp";
|
# For matlab script, we use {} for string
|
||||||
|
if ("on" eq $opt_ptr->{matlab_rpt}) {
|
||||||
|
print $CSVFH "{'$tmp'}";
|
||||||
|
} else {
|
||||||
|
print $CSVFH "$tmp";
|
||||||
|
}
|
||||||
|
|
||||||
print $CSVFH ",$rpt_h{$tag}->{$tmp}->{$N_val}->{$K_val}->{LUTs}";
|
print $CSVFH ",$rpt_h{$tag}->{$tmp}->{$N_val}->{$K_val}->{LUTs}";
|
||||||
if ("on" eq $opt_ptr->{min_route_chan_width}) {
|
if ("on" eq $opt_ptr->{min_route_chan_width}) {
|
||||||
print $CSVFH ",$rpt_h{$tag}->{$tmp}->{$N_val}->{$K_val}->{min_route_chan_width}";
|
print $CSVFH ",$rpt_h{$tag}->{$tmp}->{$N_val}->{$K_val}->{min_route_chan_width}";
|
||||||
|
@ -3170,7 +3243,18 @@ sub gen_csv_rpt_standard_flow($ $)
|
||||||
print $CSVFH ",$rpt_ptr->{$tag}->{$tmp}->{$N_val}->{$K_val}->{power}->{dynamic}";
|
print $CSVFH ",$rpt_ptr->{$tag}->{$tmp}->{$N_val}->{$K_val}->{power}->{dynamic}";
|
||||||
print $CSVFH ",$rpt_ptr->{$tag}->{$tmp}->{$N_val}->{$K_val}->{power}->{leakage}";
|
print $CSVFH ",$rpt_ptr->{$tag}->{$tmp}->{$N_val}->{$K_val}->{power}->{leakage}";
|
||||||
}
|
}
|
||||||
print $CSVFH "\n";
|
|
||||||
|
# For matlab script, we end with a semicolumn to be compatiable to matlab
|
||||||
|
if ("on" eq $opt_ptr->{matlab_rpt}) {
|
||||||
|
print $CSVFH ";\n";
|
||||||
|
} else {
|
||||||
|
print $CSVFH "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# For matlab script, we end with ];
|
||||||
|
if ("on" eq $opt_ptr->{matlab_rpt}) {
|
||||||
|
print $CSVFH "];\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3181,6 +3265,14 @@ sub gen_csv_rpt_mpack2_flow($ $)
|
||||||
my @keywords;
|
my @keywords;
|
||||||
my ($K_val,$N_val) = ($opt_ptr->{K_val},$opt_ptr->{N_val});
|
my ($K_val,$N_val) = ($opt_ptr->{K_val},$opt_ptr->{N_val});
|
||||||
|
|
||||||
|
# adapt to matlab format if the option is enabled
|
||||||
|
if ("on" eq $opt_ptr->{matlab_rpt}) {
|
||||||
|
# Print the data name
|
||||||
|
print $CSVFH "$opt_ptr->{matlab_rpt_val} = [\n";
|
||||||
|
# We will set the stats line to be commented
|
||||||
|
print $CSVFH "%";
|
||||||
|
}
|
||||||
|
|
||||||
# Print out Mpack stats Second
|
# Print out Mpack stats Second
|
||||||
print $CSVFH "$tag";
|
print $CSVFH "$tag";
|
||||||
if ("on" eq $opt_ptr->{min_route_chan_width}) {
|
if ("on" eq $opt_ptr->{min_route_chan_width}) {
|
||||||
|
@ -3214,7 +3306,13 @@ sub gen_csv_rpt_mpack2_flow($ $)
|
||||||
# Check log/stats one by one
|
# Check log/stats one by one
|
||||||
foreach $tmp(@benchmark_names) {
|
foreach $tmp(@benchmark_names) {
|
||||||
$tmp =~ s/\.blif$//g;
|
$tmp =~ s/\.blif$//g;
|
||||||
print $CSVFH "$tmp";
|
# For matlab script, we use {} for string
|
||||||
|
if ("on" eq $opt_ptr->{matlab_rpt}) {
|
||||||
|
print $CSVFH "{'$tmp'}";
|
||||||
|
} else {
|
||||||
|
print $CSVFH "$tmp";
|
||||||
|
}
|
||||||
|
|
||||||
if ("on" eq $opt_ptr->{min_route_chan_width}) {
|
if ("on" eq $opt_ptr->{min_route_chan_width}) {
|
||||||
print $CSVFH ",$rpt_h{$tag}->{$tmp}->{$N_val}->{$K_val}->{min_route_chan_width}";
|
print $CSVFH ",$rpt_h{$tag}->{$tmp}->{$N_val}->{$K_val}->{min_route_chan_width}";
|
||||||
print $CSVFH ",$rpt_h{$tag}->{$tmp}->{$N_val}->{$K_val}->{fix_route_chan_width}";
|
print $CSVFH ",$rpt_h{$tag}->{$tmp}->{$N_val}->{$K_val}->{fix_route_chan_width}";
|
||||||
|
@ -3247,7 +3345,17 @@ sub gen_csv_rpt_mpack2_flow($ $)
|
||||||
print $CSVFH ",$rpt_ptr->{$tag}->{$tmp}->{$N_val}->{$K_val}->{power}->{dynamic}";
|
print $CSVFH ",$rpt_ptr->{$tag}->{$tmp}->{$N_val}->{$K_val}->{power}->{dynamic}";
|
||||||
print $CSVFH ",$rpt_ptr->{$tag}->{$tmp}->{$N_val}->{$K_val}->{power}->{leakage}";
|
print $CSVFH ",$rpt_ptr->{$tag}->{$tmp}->{$N_val}->{$K_val}->{power}->{leakage}";
|
||||||
}
|
}
|
||||||
print $CSVFH "\n";
|
# For matlab script, we end with a semicolumn to be compatiable to matlab
|
||||||
|
if ("on" eq $opt_ptr->{matlab_rpt}) {
|
||||||
|
print $CSVFH ";\n";
|
||||||
|
} else {
|
||||||
|
print $CSVFH "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# For matlab script, we end with ];
|
||||||
|
if ("on" eq $opt_ptr->{matlab_rpt}) {
|
||||||
|
print $CSVFH "];\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3258,6 +3366,14 @@ sub gen_csv_rpt_mpack1_flow($ $)
|
||||||
my @keywords;
|
my @keywords;
|
||||||
my ($N_val,$M_val) = ($opt_ptr->{N_val},$opt_ptr->{M_val});
|
my ($N_val,$M_val) = ($opt_ptr->{N_val},$opt_ptr->{M_val});
|
||||||
|
|
||||||
|
# adapt to matlab format if the option is enabled
|
||||||
|
if ("on" eq $opt_ptr->{matlab_rpt}) {
|
||||||
|
# Print the data name
|
||||||
|
print $CSVFH "$opt_ptr->{matlab_rpt_val} = [\n";
|
||||||
|
# We will set the stats line to be commented
|
||||||
|
print $CSVFH "%";
|
||||||
|
}
|
||||||
|
|
||||||
# Print out Mpack stats Second
|
# Print out Mpack stats Second
|
||||||
print $CSVFH "$tag";
|
print $CSVFH "$tag";
|
||||||
print $CSVFH ",MATRIX";
|
print $CSVFH ",MATRIX";
|
||||||
|
@ -3281,7 +3397,13 @@ sub gen_csv_rpt_mpack1_flow($ $)
|
||||||
# Check log/stats one by one
|
# Check log/stats one by one
|
||||||
foreach $tmp(@benchmark_names) {
|
foreach $tmp(@benchmark_names) {
|
||||||
$tmp =~ s/\.blif$//g;
|
$tmp =~ s/\.blif$//g;
|
||||||
print $CSVFH "$tmp";
|
# For matlab script, we use {} for string
|
||||||
|
if ("on" eq $opt_ptr->{matlab_rpt}) {
|
||||||
|
print $CSVFH "{'$tmp'}";
|
||||||
|
} else {
|
||||||
|
print $CSVFH "$tmp";
|
||||||
|
}
|
||||||
|
|
||||||
#foreach $tmpkw(@keywords) {
|
#foreach $tmpkw(@keywords) {
|
||||||
print $CSVFH ",$rpt_ptr->{$tag}->{$tmp}->{$N_val}->{$M_val}->{MATRIX}";
|
print $CSVFH ",$rpt_ptr->{$tag}->{$tmp}->{$N_val}->{$M_val}->{MATRIX}";
|
||||||
@keywords = split /\|/,$conf_ptr->{csv_tags}->{mpack_tags}->{val};
|
@keywords = split /\|/,$conf_ptr->{csv_tags}->{mpack_tags}->{val};
|
||||||
|
@ -3306,7 +3428,17 @@ sub gen_csv_rpt_mpack1_flow($ $)
|
||||||
print $CSVFH ",$rpt_ptr->{$tag}->{$tmp}->{$N_val}->{$M_val}->{power}->{total}";
|
print $CSVFH ",$rpt_ptr->{$tag}->{$tmp}->{$N_val}->{$M_val}->{power}->{total}";
|
||||||
print $CSVFH ",$rpt_ptr->{$tag}->{$tmp}->{$N_val}->{$M_val}->{power}->{dynamic}";
|
print $CSVFH ",$rpt_ptr->{$tag}->{$tmp}->{$N_val}->{$M_val}->{power}->{dynamic}";
|
||||||
print $CSVFH ",$rpt_ptr->{$tag}->{$tmp}->{$N_val}->{$M_val}->{power}->{leakage}";
|
print $CSVFH ",$rpt_ptr->{$tag}->{$tmp}->{$N_val}->{$M_val}->{power}->{leakage}";
|
||||||
print $CSVFH "\n";
|
# For matlab script, we end with a semicolumn to be compatiable to matlab
|
||||||
|
if ("on" eq $opt_ptr->{matlab_rpt}) {
|
||||||
|
print $CSVFH ";\n";
|
||||||
|
} else {
|
||||||
|
print $CSVFH "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# For matlab script, we end with ];
|
||||||
|
if ("on" eq $opt_ptr->{matlab_rpt}) {
|
||||||
|
print $CSVFH "];\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
#ifndef FPGA_X2P_BITSTREAM_UTILS_H
|
||||||
|
#define FPGA_X2P_BITSTREAM_UTILS_H
|
||||||
|
|
||||||
int determine_decoder_size(int num_addr_out);
|
int determine_decoder_size(int num_addr_out);
|
||||||
|
|
||||||
|
@ -81,3 +83,5 @@ void add_sram_conf_bits_to_sram_orgz_info(t_sram_orgz_info* cur_sram_orgz_info,
|
||||||
|
|
||||||
void add_mux_conf_bits_to_sram_orgz_info(t_sram_orgz_info* cur_sram_orgz_info,
|
void add_mux_conf_bits_to_sram_orgz_info(t_sram_orgz_info* cur_sram_orgz_info,
|
||||||
t_spice_model* mux_spice_model, int mux_size) ;
|
t_spice_model* mux_spice_model, int mux_size) ;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
#ifndef FPGA_X2P_PBTYPES_UTILS_H
|
#ifndef FPGA_X2P_PBTYPES_UTILS_H
|
||||||
#define FPGA_X2P_PBTYPES_UTILS_H
|
#define FPGA_X2P_PBTYPES_UTILS_H
|
||||||
|
|
||||||
|
#include "fpga_x2p_bitstream_utils.h"
|
||||||
|
|
||||||
void check_pb_graph_edge(t_pb_graph_edge pb_graph_edge);
|
void check_pb_graph_edge(t_pb_graph_edge pb_graph_edge);
|
||||||
|
|
||||||
void check_pb_graph_pin_edges(t_pb_graph_pin pb_graph_pin);
|
void check_pb_graph_pin_edges(t_pb_graph_pin pb_graph_pin);
|
||||||
|
@ -74,9 +76,6 @@ void mark_one_pb_parasitic_nets(t_phy_pb* cur_pb);
|
||||||
int count_num_conf_bit_one_interc(t_interconnect* cur_interc,
|
int count_num_conf_bit_one_interc(t_interconnect* cur_interc,
|
||||||
enum e_sram_orgz cur_sram_orgz_type);
|
enum e_sram_orgz cur_sram_orgz_type);
|
||||||
|
|
||||||
int count_num_reserved_conf_bit_one_interc(t_interconnect* cur_interc,
|
|
||||||
enum e_sram_orgz cur_sram_orgz_type);
|
|
||||||
|
|
||||||
int count_num_conf_bits_pb_type_mode_interc(t_mode* cur_pb_type_mode,
|
int count_num_conf_bits_pb_type_mode_interc(t_mode* cur_pb_type_mode,
|
||||||
enum e_sram_orgz cur_sram_orgz_type);
|
enum e_sram_orgz cur_sram_orgz_type);
|
||||||
|
|
||||||
|
|
|
@ -692,8 +692,8 @@ static float trans_per_mux(int num_inputs, float trans_sram_bit,
|
||||||
break;
|
break;
|
||||||
case SPICE_MODEL_STRUCTURE_MULTILEVEL:
|
case SPICE_MODEL_STRUCTURE_MULTILEVEL:
|
||||||
assert(1 < target_switch.switch_num_level);
|
assert(1 < target_switch.switch_num_level);
|
||||||
sram_trans = trans_sram_bit * target_switch.switch_num_level;
|
|
||||||
mux_basis = determine_num_input_basis_multilevel_mux(num_inputs, target_switch.switch_num_level);
|
mux_basis = determine_num_input_basis_multilevel_mux(num_inputs, target_switch.switch_num_level);
|
||||||
|
sram_trans = trans_sram_bit * target_switch.switch_num_level * mux_basis;
|
||||||
num_second_stage_trans = (int)pow((double)mux_basis, (double)(target_switch.switch_num_level - 1));
|
num_second_stage_trans = (int)pow((double)mux_basis, (double)(target_switch.switch_num_level - 1));
|
||||||
pass_trans = ((num_second_stage_trans - 1) * mux_basis/(mux_basis-1)) * pass_trans_area
|
pass_trans = ((num_second_stage_trans - 1) * mux_basis/(mux_basis-1)) * pass_trans_area
|
||||||
+ num_inputs * pass_trans_area;
|
+ num_inputs * pass_trans_area;
|
||||||
|
|
Loading…
Reference in New Issue