Cleanup in script and trace workaround file
This commit is contained in:
@@ -2,14 +2,27 @@
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use Data::Dumper;
|
use Data::Dumper;
|
||||||
|
use Getopt::Long;
|
||||||
|
|
||||||
my $app = {};
|
my $app = {};
|
||||||
|
|
||||||
|
$app->{'cfg'}->{'gen_intf'} = 0;
|
||||||
|
$app->{'cfg'}->{'gen_trace_wa'} = 0;
|
||||||
|
|
||||||
|
GetOptions("gen_intf" => \$app->{'cfg'}->{'gen_intf'},
|
||||||
|
"gen_trace_wa" => \$app->{'cfg'}->{'gen_trace_wa'});
|
||||||
|
|
||||||
get_axi_intf_data($app);
|
get_axi_intf_data($app);
|
||||||
augment_intf_data($app);
|
augment_intf_data($app);
|
||||||
#print Dumper($app->{'intf_data'}); # Debugging output
|
#print Dumper($app->{'intf_data'}); # Debugging output
|
||||||
|
|
||||||
gen_intf($app);
|
if ($app->{'cfg'}->{'gen_intf'}) {
|
||||||
|
gen_intf($app);
|
||||||
|
}
|
||||||
|
if ($app->{'cfg'}->{'gen_trace_wa'}) {
|
||||||
|
show_trace_interface_driver($app);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# -----------------
|
# -----------------
|
||||||
# Subroutines
|
# Subroutines
|
||||||
@@ -38,8 +51,6 @@ sub gen_intf {
|
|||||||
show_modport($app, 'Subordinate');
|
show_modport($app, 'Subordinate');
|
||||||
|
|
||||||
print "endinterface // axi_intf\n";
|
print "endinterface // axi_intf\n";
|
||||||
|
|
||||||
show_trace_interface_driver($app);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# -----------------
|
# -----------------
|
||||||
@@ -94,10 +105,11 @@ sub show_interface {
|
|||||||
sub show_trace_interface_driver {
|
sub show_trace_interface_driver {
|
||||||
my ($app) = @_;
|
my ($app) = @_;
|
||||||
|
|
||||||
print qq{
|
print qq{`ifdef VERI_TRACE_EN
|
||||||
`ifdef VERI_TRACE_EN
|
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
// Work around Verilator's lack of support for virutal interface tracing
|
// Work around Verilator's lack of support for virutal interface tracing:
|
||||||
|
// Issue #5044: Wires driven through virtual interface traced improperly
|
||||||
|
// https://github.com/verilator/verilator/issues/5044
|
||||||
`AXI_INTF t_if (.ACLK(clk), .ARESETn(rst_n));
|
`AXI_INTF t_if (.ACLK(clk), .ARESETn(rst_n));
|
||||||
};
|
};
|
||||||
foreach my $section (@{$app->{'intf_data'}->{'sections'}}) {
|
foreach my $section (@{$app->{'intf_data'}->{'sections'}}) {
|
||||||
@@ -105,12 +117,16 @@ sub show_trace_interface_driver {
|
|||||||
|
|
||||||
# Display signals
|
# Display signals
|
||||||
foreach my $signal (@{$section->{'signals'}}) {
|
foreach my $signal (@{$section->{'signals'}}) {
|
||||||
|
my $line = "";
|
||||||
if ($signal->{'s'} eq 'External') {
|
if ($signal->{'s'} eq 'External') {
|
||||||
printf " // External signal: %-$app->{'intf_data'}->{'info'}->{'sig_width'}s // $signal->{'d'} [$signal->{'s'}]\n",
|
$line = sprintf " // External signal: %-$app->{'intf_data'}->{'info'}->{'sig_width'}s // $signal->{'d'} [$signal->{'s'}]",
|
||||||
"$signal->{'n'};";
|
"$signal->{'n'};";
|
||||||
} else {
|
} else {
|
||||||
printf " always @(a_if.$signal->{'n'}) t_if.$signal->{'n'} <= a_if.$signal->{'n'};\n";
|
$line = sprintf " always @(a_if.%-$app->{'intf_data'}->{'info'}->{'sig_width'}s t_if.%-$app->{'intf_data'}->{'info'}->{'sig_width'}s <= a_if.%-$app->{'intf_data'}->{'info'}->{'sig_width'}s",
|
||||||
|
"$signal->{'n'})", $signal->{'n'}, "$signal->{'n'};";
|
||||||
}
|
}
|
||||||
|
$line =~ s/\s+$//;
|
||||||
|
print "$line\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
// Issue #5044: Wires driven through virtual interface traced improperly
|
|
||||||
// https://github.com/verilator/verilator/issues/5044
|
|
||||||
`ifdef VERI_TRACE_EN
|
`ifdef VERI_TRACE_EN
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
// Work around Verilator's lack of support for virutal interface tracing
|
// Work around Verilator's lack of support for virutal interface tracing:
|
||||||
|
// Issue #5044: Wires driven through virtual interface traced improperly
|
||||||
|
// https://github.com/verilator/verilator/issues/5044
|
||||||
`AXI_INTF t_if (.ACLK(clk), .ARESETn(rst_n));
|
`AXI_INTF t_if (.ACLK(clk), .ARESETn(rst_n));
|
||||||
// A2.4.1 Clock and reset signals
|
// A2.4.1 Clock and reset signals
|
||||||
// External signal: ACLK; // External Global clock signal [External]
|
// External signal: ACLK; // External Global clock signal [External]
|
||||||
|
Reference in New Issue
Block a user