Idsreg
Idsreg
/usr/bin/perl -w
use lib "/usr/local/netfpga/lib/Perl5";
use strict;
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
my
$IDS_PATTERN_HI_REG1 = 0x2000300;
$IDS_PATTERN_LO_REG1 = 0x2000304;
$IDS_PATTERN_HI_REG2 = 0x2000308;
$IDS_PATTERN_LO_REG2 = 0x200030c;
$IDS_PATTERN_HI_REG3 = 0x2000310;
$IDS_PATTERN_LO_REG3 = 0x2000314;
$IDS_PATTERN_HI_REG4 = 0x2000318;
$IDS_PATTERN_LO_REG4 = 0x200031c;
$IDS_PATTERN_HI_REG5 = 0x2000320;
$IDS_PATTERN_LO_REG5 = 0x2000324;
$IDS_PATTERN_HI_REG6 = 0x2000328;
$IDS_PATTERN_LO_REG6 = 0x200032c;
$IDS_PATTERN_HI_REG7 = 0x2000330;
$IDS_PATTERN_LO_REG7 = 0x2000334;
$IDS_PATTERN_HI_REG8 = 0x2000338;
$IDS_PATTERN_LO_REG8 = 0x200033c;
$IDS_PATTERN_HI_REG9 = 0x2000340;
$IDS_PATTERN_LO_REG9 = 0x2000344;
$IDS_PATTERN_HI_REG10 = 0x2000348;
$IDS_PATTERN_LO_REG10 = 0x200034c;
$IDS_PATTERN_HI_REG11 = 0x2000350;
$IDS_PATTERN_LO_REG11 = 0x2000354;
$IDS_PATTERN_HI_REG12 = 0x2000358;
$IDS_PATTERN_LO_REG12 = 0x200035c;
$IDS_PATTERN_HI_REG13 = 0x2000360;
$IDS_PATTERN_LO_REG13 = 0x2000364;
$IDS_PATTERN_HI_REG14 = 0x2000368;
$IDS_PATTERN_LO_REG14 = 0x200036c;
$IDS_PATTERN_HI_REG15 = 0x2000370;
$IDS_PATTERN_LO_REG15 = 0x2000374;
$IDS_PATTERN_HI_REG16 = 0x2000378;
$IDS_PATTERN_LO_REG16 = 0x200037c;
$IDS_PATTERN_HI_REG17 = 0x2000380;
$IDS_PATTERN_LO_REG17 = 0x2000384;
$IDS_PATTERN_HI_REG18 = 0x2000388;
$IDS_PATTERN_LO_REG18 = 0x200038c;
$IDS_PATTERN_HI_REG19 = 0x2000390;
$IDS_PATTERN_LO_REG19 = 0x2000394;
$IDS_PATTERN_HI_REG20 = 0x2000398;
$IDS_PATTERN_LO_REG20 = 0x200039c;
$IDS_IDS_CMD_REG = 0x2000308;
$IDS_MATCHES_REG = 0x200030c;
sub regwrite {
my( $addr, $value ) = @_;
my $cmd = sprintf( "regwrite $addr 0x%08x", $value );
my $result = `$cmd`;
# print "Ran command '$cmd' and got result '$result'\n";
}
sub regread {
my( $addr ) = @_;
my $cmd = sprintf( "regread $addr" );
my @out = `$cmd`;
my $result = $out[0];
if ( $result =~ m/Reg (0x[0-9a-f]+) \((\d+)\):\s+(0x[0-9a-f]+) \((\d+)\)/ ) {
$result = $3;
}
return $result;
}
sub idsreset {
regwrite( $IDS_IDS_CMD_REG, 0x1 );
regwrite( $IDS_IDS_CMD_REG, 0x0 );
}
sub write_pattern {
my($hi, $lo) = @_;
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
regwrite($IDS_PATTERN_HI_REG,
regwrite($IDS_PATTERN_LO_REG,
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
$hi);
$lo);
}
# Turns an ascii string into a (pattern_hi,pattern_lo) list
sub pattern_from_ascii {
my( $patstr ) = @_;
my @chars = split(//, $patstr);
my @ints = map { ord( $_ ) } @chars;
my $validBytes = $#ints + 1;
my $hi = 0;
my $lo = 0;
for (my $i = 0; $i <= 6; $i++) {
options>\n";
resets the matches counter\n";
set a pattern from ASCII\n";
displays the matches register\n";
my $numargs = $#ARGV + 1;
if( $numargs < 1 ) {
usage();
exit(1);
}
my $cmd = $ARGV[0];
if ($cmd eq "reset") {
idsreset();
} elsif ($cmd eq "pattern") {
if ($numargs < 2) {
usage();
exit(1);
}
my $str = $ARGV[1];
my($hi, $lo) = pattern_from_ascii($str);
printf("Setting pattern hi=0x%08x, lo=0x%08x\n", $hi, $lo);
write_pattern($hi, $lo);
} elsif ($cmd eq "matches") {
my $matches = regread( $IDS_MATCHES_REG );
print $matches,"\n\n";
} elsif ($cmd eq "allregs") {
print "MATCHES:
", regread( $IDS_MATCHES_REG ), "\n";
print "PATTERN_HI: ", regread( $IDS_PATTERN_HI_REG ), "\n";
print "PATTERN_LO: ", regread( $IDS_PATTERN_LO_REG ), "\n";
print "COMMAND:
", regread( $IDS_IDS_CMD_REG ), "\n";
} else {
print "Unrecognized command $cmd\n";
usage();
exit(1)
}