From d4ca481a4418c7e7716899e08b8cedd79aa0bb2a Mon Sep 17 00:00:00 2001 From: Jan Michel Date: Fri, 19 Jul 2013 18:44:08 +0200 Subject: [PATCH] Cleanup --- soft/toolbox/jtag_atomic/ui_writeram.pl | 266 ++++-------------------- 1 file changed, 38 insertions(+), 228 deletions(-) diff --git a/soft/toolbox/jtag_atomic/ui_writeram.pl b/soft/toolbox/jtag_atomic/ui_writeram.pl index a8881d8..382e040 100755 --- a/soft/toolbox/jtag_atomic/ui_writeram.pl +++ b/soft/toolbox/jtag_atomic/ui_writeram.pl @@ -41,18 +41,9 @@ required: " } -#push(@INC, "./BN"); -#use lib "$ENV{PWD}/BN"; -#use lib "/d/sugar/bneumann/vhdl/jtag_proj/trb_maps_jtag2/ui/"; -#use lib "/d/sugar/bneumann/vhdl/jtag_proj/trb_maps_jtag2/ui/BN/blib/arch"; -#use lib "/d/sugar/bneumann/vhdl/jtag_proj/trb_maps_jtag2/ui/"; -#use lib "/d/sugar/bneumann/vhdl/jtag_proj/trb_maps_jtag2/ui/BN/blib/arch"; - use lib "libs/BN/blib/arch"; use BN::CRC32; -#use String::CRC32; -#use feature "state"; use POSIX; # whitespace trimming from http://www.somacon.com/p114.php @@ -61,18 +52,9 @@ sub trim($); sub ltrim($); sub rtrim($); -# Create a test string -my $string = " \t Hello world! "; - -# Here is how to output the trimmed text "Hello world!" -#print trim($string)."\n"; -#print ltrim($string)."\n"; -#print rtrim($string)."\n"; sub any2dec { # converts numeric expressions 0x, 0b or decimal to decimal - my $argument = $_[0]; #print "any2dec input argument $argument\n"; - if ( $argument =~ m/0[bxBX]/) { return oct $argument; } else { @@ -109,32 +91,32 @@ sub reverse32bit($) { #return 1; } -sub int_to_32bit_hex($) { - my ($in) = @_; - my $hex = sprintf("%.8X", $in); - return $hex; -} +# sub int_to_32bit_hex($) { +# my ($in) = @_; +# my $hex = sprintf("%.8X", $in); +# return $hex; +# } +# +# sub report { +# if(defined($opt_quiet)){ +# if($_[0] eq 'data') { print $_[1]; } +# } +# else { +# print $_[1]; +# } +# } +# sub reportd { +# if(!defined($opt_quiet)){ +# print "debug:" . $_[0]; +# } +# } -sub report { - if(defined($opt_quiet)){ - if($_[0] eq 'data') { print $_[1]; } - } - else { - print $_[1]; - } -} -sub reportd { - if(!defined($opt_quiet)){ - print "debug:" . $_[0]; - } -} - -if(not( -e "/tmp/jtag_initmem")) { - system("mkdir /tmp/jtag_initmem"); -} +# if(not( -e "/tmp/jtag_initmem")) { +# system("mkdir /tmp/jtag_initmem"); +# } my $chainsfile= 'chains.ini'; $chainsfile = $ENV{'JTAGCONFIGPATH'}."/".$chainsfile if defined($ENV{'JTAGCONFIGPATH'}); @@ -142,20 +124,6 @@ $chainsfile = $ENV{'JTAGCONFIGPATH'}."/".$chainsfile if defined($ENV{'JTAGCONFIG my $chainsSettings = new Config::Abstract::Ini($chainsfile); my %allchains = $chainsSettings->get_all_settings; -my $date = strftime "%Y%m%d%H%M%S", localtime; -#my $initmem_folder = "/tmp/jtag_initmem/$date"; -my $initmem_folder = "/tmp/jtag_initmem/jtag_atomic"; - -if(-e $initmem_folder) { - #die("Error: Folder with the same date already exists!"); -} -else { - mkdir $initmem_folder,0755; -} - -# File with prefix names files for last programmed values -my $lastprogfilename = "/tmp/jtag_initmem/lastprog.txt"; -my $handle_lastprog = FileHandle->new($lastprogfilename, 'w'); my $memhash; @@ -179,14 +147,9 @@ foreach my $chain (keys %allchains) { my $cmd_reg_addr = any2dec($settings{'CMDreg_trbnetAddr'}); my $ram_base_addr = any2dec($settings{'RAMbase_trbnetAddr'}); my $data_reg_addr = any2dec($settings{'DATAreg_trbnetAddr'}); - my $memfiles_prefix; # the same prefix is used for the files for one chain - # need one file per chip with at maximum 256 32 bit words - # that are written at once. - # then the RAM base pointer has to be changed for the next chip - my @memfilenames=(); + my @settingnames=(); - $memfiles_prefix="$initmem_folder/$chain"; foreach my $setting_name (sort keys %settings) { if ($setting_name =~ /sensor[0-9]+/) { push(@sensors, $setting_name); @@ -231,243 +194,90 @@ foreach my $chain (keys %allchains) { print ("Warning: Length of the same DR of two sensors differs."); } } - my $memfilename = $memfiles_prefix . "." . $setting_name . ".txt"; - if( -e ($memfilename)) { - #die ("Error: RAM text file \"$memfilename\" exists."); - } - if( not defined($opt_quiet)) { print "Opening $memfilename...\n"; } -# my $handle = FileHandle->new($memfilename, 'w'); - push(@memfilenames, $memfilename); + push(@settingnames, $setting_name); # write numregs + IRlen - my $word = scalar($this_irlen)<<16; + my $word = scalar($this_irlen) << 16; $word = $word + scalar @irs; - ### $word = ($word<<16) + pack("L", scalar(@irs)); -# print $handle "0x" . uc (substr(reverse(join('',unpack("h8", pack("L", $word)))),0,8)) . "\t# IRlen & numregs \n"; - push(@{$memhash->{$memfilename}},$word); - #####print $handle "0x" .uc (substr(reverse(join('',unpack("h8", pack("L", scalar($this_irlen))))),4,4)) . uc (substr(reverse(join('',unpack("h8", pack("L", scalar(@irs))))),4,4)) . "\t# IRlen & numregs \n"; + push(@{$memhash->{$setting_name}},$word); - #print "reverse test: " . reverse32bit(0x00000001)."\n"; my $initial = 0x00000000; my $crcword = pack("L", reverse32bit($word)); my $crc0 = crc32($crcword, $initial); - #my $crc0_rn = ~reverse32bit($crc0); - #printf "crc0: %0.8X, crc0_rn: %0.8X, word: %0.8X\n", $crc0, $crc0_rn, $word; # write DEV_ID $word = 0x4D323601; -# print $handle "0x" . uc (substr(reverse(join('',unpack("h8", pack("L", $word)))),0,8)) . "\t# DEV_ID \n"; - push(@{$memhash->{$memfilename}},$word); + push(@{$memhash->{$setting_name}},$word); $crcword = pack("L", reverse32bit($word)); $crc0 = crc32($crcword, $crc0); my $crc0_rn = ~reverse32bit($crc0); - #printf "crc0: %0.8X, crc0_rn: %0.8X, word: %0.8X\n", $crc0, $crc0_rn, $word; # write pointer my $offset = 3*@irs+4; for(my $reg_i=0;$reg_i<@irs;$reg_i++) { my $drlen = $drs_length[$reg_i]; $word = $offset; - #print $handle "0x". uc (substr(reverse(join('',unpack("h8", pack("L", 0)))),4,4)) . uc (substr(reverse(join('',unpack("h8", pack("L", scalar($offset))))),4,4)) . "\t# Pointer + reserved\n"; $crcword = pack("L", reverse32bit($word)); $crc0 = crc32($crcword, $crc0); -# print $handle "0x" . uc (substr(reverse(join('',unpack("h8", pack("L", $word)))),0,8)) . "\t# Pointer + reserved \n"; - push(@{$memhash->{$memfilename}},$word); + push(@{$memhash->{$setting_name}},$word); $word = $drlen; $crcword = pack("L", reverse32bit($word)); $crc0 = crc32($crcword, $crc0); - - #print $handle "0x0000". uc (substr(reverse(join('',unpack("h8", pack("L", scalar($drlen))))),4,4)) . "\t# Length\n"; -# print $handle "0x" . uc (substr(reverse(join('',unpack("h8",pack("L", $word)))),0,8)) . "\t# Length\n"; - push(@{$memhash->{$memfilename}},$word); + push(@{$memhash->{$setting_name}},$word); $offset += floor(($drlen+31)/32); } # write CRC-32 - #my $ir_packed_r = pack("B*", scalar reverse substr(unpack("B*", pack("H*", $ir.("0"x (7-(length($ir)-1)%8)))),0, 32)); $crc0_rn = ~reverse32bit($crc0); - #printf "CRC: %0.8X.\n", $crc0_rn, 1; - my $line_crc = sprintf "%0.8X", $crc0_rn; -# print $handle "0x". substr($line_crc,length($line_crc)-8,8) . "\t# CRC-32\n"; - push(@{$memhash->{$memfilename}},$crc0_rn & 0xFFFFFFFF); + push(@{$memhash->{$setting_name}},$crc0_rn & 0xFFFFFFFF); my $crc1 = 0xFFFFFFFF; # write IRs for(my $reg_i=0;$reg_i<@irs;$reg_i++) { my $ir = $irs[$reg_i]; - #my @words = unpack("L", pack("H*", uc($ir))); $word = unpack("L", pack("h*", (scalar reverse uc($ir)) ."000000")); - #print "ir=$ir.IR word: $word\n"; $crcword = pack("L", reverse32bit($word)); $crc1 = crc32($crcword, $crc1); -# print $handle "0x".("0"x(8-length($ir))).uc($ir) . "\t# IR\n"; - push(@{$memhash->{$memfilename}},hex($ir)); + push(@{$memhash->{$setting_name}},hex($ir)); } # write BYPASSREG IR $word = unpack("L", pack("h*", (scalar reverse uc($bypassreg)) ."000000")); $crcword = pack("L", reverse32bit($word)); $crc1 = crc32($crcword, $crc1); -# print $handle "0x".("0"x(8-length($bypassreg))).uc($bypassreg) . "\t# IR BYPASS\n"; - push(@{$memhash->{$memfilename}},hex($bypassreg)); + push(@{$memhash->{$setting_name}},hex($bypassreg)); # write DRs for(my $reg_i=0;$reg_i<@irs;$reg_i++) { my $length = $drs_length[$reg_i]; my $numwords = floor(($length+31)/32); for(my $i=0;$i<$numwords; $i++) { - #print "length: $length\n"; - #print "numwords: $numwords\n"; - $word = unpack("L", pack("h*", (scalar reverse uc(substr($drs[$reg_i],($numwords-$i-1)*8,8))))); $crcword = pack("L", reverse32bit($word)); $crc1 = crc32($crcword, $crc1); - my $linestr = "0x". substr($drs[$reg_i],($numwords-$i-1)*8,8) . "\t# DR" . $reg_i . "\n"; -# print $handle $linestr; - push(@{$memhash->{$memfilename}},hex(substr($drs[$reg_i],($numwords-$i-1)*8,8))); +# my $linestr = "0x". substr($drs[$reg_i],($numwords-$i-1)*8,8) . "\t# DR" . $reg_i . "\n"; + push(@{$memhash->{$setting_name}},hex(substr($drs[$reg_i],($numwords-$i-1)*8,8))); } } #write CRC-32 my $crc1_rn = ~reverse32bit($crc1); - $line_crc = sprintf "%0.8X", $crc1_rn; -# print $handle "0x". substr($line_crc,length($line_crc)-8,8) . "\t# CRC-32\n"; - push(@{$memhash->{$memfilename}},$crc1_rn & 0xFFFFFFFF); + push(@{$memhash->{$setting_name}},$crc1_rn & 0xFFFFFFFF); } } -# my $numchips_hex = int_to_32bit_hex(scalar @sensors); - #if(not defined($opt_quiet)) { print "trbcmd w $fpga_addr $cmd_reg_addr 0x0000000A 2>&1\n"; } # CMD_STOP - #my $result = `trbcmd w $fpga_addr $cmd_reg_addr 0x0000000A 2>&1 \n`; # CMD_STOP trb_register_write($fpga_addr ,$cmd_reg_addr,0x0000000A) or die trb_strerror(); -# execute_shell_command("trbcmd w $fpga_addr $cmd_reg_addr 0x0000000A", ""); # CMD_STOP - #if(not($? == 0)) {syslog("ERR", "trbcmd returned $?. Output: $result.")} - #if(not defined($opt_quiet)) { print "trbcmd w $fpga_addr $data_reg_addr 0x$numchips_hex\n"; } # ADDR_CONTROL_DATA_REGISTER - #$result = `trbcmd w $fpga_addr $data_reg_addr 0x$numchips_hex 2>&1\n`; # ADDR_CONTROL_DATA_REGISTER trb_register_write($fpga_addr ,$data_reg_addr,scalar @sensors) or die trb_strerror(); -# execute_shell_command("trbcmd w $fpga_addr $data_reg_addr 0x$numchips_hex", ""); # ADDR_CONTROL_DATA_REGISTER - #if(not defined($opt_quiet)) { print "trbcmd w $fpga_addr $cmd_reg_addr 0x00000033\n"; } # COMMAND: M26C_CMD_SET_NUMCHIPS_CONFIGURED - #$result = `trbcmd w $fpga_addr $cmd_reg_addr 0x00000033\n`; # COMMAND: M26C_CMD_SET_NUMCHIPS_CONFIGURED trb_register_write($fpga_addr ,$cmd_reg_addr,0x00000033) or die trb_strerror(); -# execute_shell_command("trbcmd w $fpga_addr $cmd_reg_addr 0x00000033", ""); - for(my $i=0;$i{$memfilenames[$i]},scalar @{$memhash->{$memfilenames[$i]}}) or die trb_strerror(); - -# print "---------------\n"; -# foreach my $s (@{$memhash->{$memfilenames[$i]}}) { -# printf("0x%08X\n",$s); -# } -# print "---------------\n"; + trb_register_write_mem($fpga_addr,$ram_addr,0,$memhash->{$settingnames[$i]},scalar @{$memhash->{$settingnames[$i]}}) or die trb_strerror(); } - #if(not defined($opt_quiet)){ print "trbcmd w $fpga_addr $cmd_reg_addr 0x00000009\n"; } # CMD_START - #$result = `trbcmd w $fpga_addr $cmd_reg_addr 0x00000009\n`; # CMD_START + trb_register_write($fpga_addr, $cmd_reg_addr, 0x00000009) or die trb_strerror(); -# execute_shell_command("trbcmd w $fpga_addr $cmd_reg_addr 0x00000009", ""); # CMD_START if(not defined($opt_quiet)) { print "\n"; } print "done.\n"; syslog("INFO", "$chain done.\n"); } -print $handle_lastprog $initmem_folder; -# #print "data registers for FPGA $fpga_addr:", map { "$_ => $drs_binary{$_}\n" } keys %drs_binary; -# $drs_offset{$irs[0]} = 4+(scalar @irs)*2; -# for (my $i=1;$i<@irs;$i++) { -# my $dr_length = $drs_length{$irs[$i-1]}; -# $drs_offset{$irs[$i]} = $drs_offset{$irs[$i-1]} + floor(($dr_length*(scalar @sensors)+31)/32) + 2; # add one x 32 bit for CRC, one x 32 bit for IR, integer division rounds down, right? -# } -# #open RAMTEXT, ">$memfiles_prefix{$chain}"; -# $num_words = 0; -# my $ram_fh; -# my @mem_filenames; -# memfile_writeline( $ram_fh, \@mem_filenames, $memfiles_prefix, "0x".uc (reverse(join('',unpack("h8", pack("L", scalar(@sensors)))))) . "\t# numchips \n"); # numchips; the reverse is done here because apparently internally the unsigned long is stored LSByte first (little endian) -# memfile_writeline( $ram_fh, \@mem_filenames, $memfiles_prefix, "0x".uc(reverse(join('',unpack("h8", pack("L", 0))))) . "\t# reserved\n"); # reserved -# for (my $i=0;$i<@irs;$i++) { -# memfile_writeline( $ram_fh, \@mem_filenames, $memfiles_prefix, "0x".uc(reverse(join('',unpack("h8", pack("L", $drs_offset{$irs[$i]}))))) . "\t# pointer\n"); # pointer -# memfile_writeline( $ram_fh, \@mem_filenames, $memfiles_prefix, "0x".uc(reverse(join('',unpack("h8", pack("L", $drs_length{$irs[$i]}))))) . "\t# length \n"); # length -# } -# memfile_writeline( $ram_fh, \@mem_filenames, $memfiles_prefix, "0x00000000\t# pointer (end of list)\n"); -# memfile_writeline( $ram_fh, \@mem_filenames, $memfiles_prefix, "0x00000000\t# length (end of list)\n"); -# for (my $i=0;$i<@irs;$i++) { -# my $ir=$irs[$i]; -# #print "ir: $ir\n"; -# my $ir_packed = pack("h*", (scalar reverse($ir)).("0"x (7-(length($ir)-1)%8))); -# my $ir_packed_r = pack("B*", scalar reverse substr(unpack("B*", pack("H*", $ir.("0"x (7-(length($ir)-1)%8)))),0, 32)); -# #print "debug ir_packed (h*): ". (scalar reverse($ir)).("0"x (8-length($ir)%32))."\n"; -# #print "debug ir_packed_r (B*): ". scalar reverse unpack("B*", pack("H*", $ir.("0"x (7-(length($ir)-1)%8)))) ."\n"; -# #print "debug2: " . (7-(length($ir)-1)%8) . "\n"; -# #print "debug3: " . $ir . "\n"; -# #print "debug4: " . $ir.("0"x (7-(length($ir)-1)%8)) . "\n"; -# #print "debug5 (B*): ". unpack("B*", pack("H*", $ir.("0"x (7-(length($ir)-1)%8)))) ."\n"; -# -# my $initial = 0x00000000; -# my $crc0 = crc32($ir_packed_r, $initial); -# #printf "CRC0: %X. ~reversed: %X\n", $crc0, $crc0_rn; -# -# for(my $i=0; $i= ($i+1)*8) { -# memfile_writeline( $ram_fh, \@mem_filenames, $memfiles_prefix, "0x".uc(reverse(substr($drs{$ir}, ($i)*8, 8))) . "\n"); -# } -# else { -# memfile_writeline( $ram_fh, \@mem_filenames, $memfiles_prefix, "0x".("0"x(($i+1)*8-length($drs{$ir}))).uc(reverse(substr($drs{$ir}, ($i)*8, length($drs{$ir})%8))) . "\n"); -# } -# } -# memfile_writeline( $ram_fh, \@mem_filenames, $memfiles_prefix, $line_crc); -# -# #print "IR $ir, DR ". $drs{$ir} . "\n"; -# } -# #close RAMTEXT; -# $ram_fh->close(); -# #my $result = `cat $memfile{$fpga_addr}`; -# $ENV{'DAQOPSERVER'}="trb126"; -# for(my $i=0;$i