From: Jan Michel Date: Mon, 16 Jan 2023 15:34:53 +0000 (+0100) Subject: update scripts, libraries and settings files X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=e9af4bd88fef2fd7a6766d06d45efb40d4f90bd2;p=hades_mdc_settings.git update scripts, libraries and settings files --- diff --git a/scripts/MDC.pm b/scripts/MDC.pm index d705cfe..f65bcea 100644 --- a/scripts/MDC.pm +++ b/scripts/MDC.pm @@ -7,6 +7,12 @@ use Getopt::Long; use Data::Dumper; + +my $longboards = [[0,1,1,0,0,0,1,1,0,0,1,0,1,0], + [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1], + [1,0,0,0,0,1,1,0,0,0,0,1,0,1,1,0], + [0,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0]]; + ############################################################################### #returns address of chip at (plane,sector,board,fpga) #fpga = 5 for OEP, 0..2 for TDC @@ -14,7 +20,11 @@ use Data::Dumper; ############################################################################### sub get_address { my ($p,$s,$b,$e) = @_; - + + if($e == 2) { + if($longboards->[$p][$b]==0) { return(0);} + } + if($e == 5) { return 0x8000 + ($p<2?0x0e00:0x0f00) + ($p%2 ? $s*16+96 : $s*16) + $b; } @@ -25,7 +35,7 @@ sub get_address { ############################################################################### #returns the position of chip with (address) as (plane,sector,board,fpga) -#all counting from 0 +#all counting from 0, assumes valid address ############################################################################### sub get_position { my $addr = shift @_; @@ -45,9 +55,22 @@ sub get_position { $p = (($addr>>12)==0x01)?0:2; $p += 1 if (($addr>>8)&0xf)>=6; } + + if($e == 2) { + if($longboards->[$p][$b]==0) { return(-1,-1,-1,-1); } + } return ($p,$s,$b,$e); } +############################################################################### +#returns if board in given position (plane,sector,board,fpga) is a long one +############################################################################### +sub is_long_board { + my ($p,$s,$b,$e) = @_; + return $longboards->[$p][$b]; + } + + ############################################################################### #get the correct power output for MBO with (address). #returns (hostname,board,output) diff --git a/scripts/README.md b/scripts/README.md index 0b6cfc9..1223e8e 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -1,4 +1,4 @@ -#Scripts +# Scripts * `generate_address_list.pl` takes the list of installed MBO serial numbers and generates the address.db file for DAQ * `generate_address_settings.pl` makes the files needed to automatically set the board addresses from Flash ROM @@ -7,19 +7,21 @@ * writes trbcmd files for later writing to Flash ROM * settings are written for boards currently in the system (otherwise serial number / uid can't be matched to addresses) * default PASTTREC registers are currently hardcoded (!) -* `merge_and_flash_settings.pl` generates and loads settings from the 'settings' directory to the FPGAs flashes +* `generate_merged_settings.pl` generates indiidual settings from the 'settings' directory +* `load_flash_settings.pl` flashes settings to one or all FPGA -##Pasttrec Settings +## Pasttrec Settings * `pasttrec_set_threshold.pl` sets an identical threshold to all Pasttrec (temporarily) * `pasttrec_baseline_finder.pl` basic baseline finder script -##Voltages +## Voltages * `mdc_voltage.pl` set voltages and update voltage database file * `mdc_powerboard.pl` send commands to MDC power board +* `check_voltages.pl` reads voltages and suggests changes -#Packages +# Packages * `MDC.pm` Library with common functions, like address lookup * `MDCPower.pm` Library with common functions related to power setting and switching -#Notes -All scripts assume that the daqtools repository is available next to this repository. +# Notes +All scripts assume that the daqtools and avr repositories are available next to this repository. diff --git a/scripts/generate_address_settings.pl b/scripts/generate_address_settings.pl index f6c5e24..2de50c4 100755 --- a/scripts/generate_address_settings.pl +++ b/scripts/generate_address_settings.pl @@ -21,7 +21,7 @@ foreach my $uid (keys %$boards) { foreach my $k (keys %{$boards->{$uid}}) { my $addr = $boards->{$uid}{$k}; - my $str = sprintf("0x%04x 0x7001 0x%08x\n", $addr, 0x80900000+$addr); + my $str = sprintf("0x7001 0x%08x\n", 0x80900000+$addr); my $filename = sprintf("../settings_oep/auto/%04x_02_network_address.trbcmd",$addr); open(FILE, '>', $filename) or die $!; @@ -39,7 +39,7 @@ foreach my $uid (keys %$boards) { foreach my $k (keys %{$boards->{$uid}}) { my $addr = $boards->{$uid}{$k}; - my $str = sprintf("0x%04x 0x7001 0x%08x\n", $addr, 0x80910000+$addr); + my $str = sprintf("0x7001 0x%08x\n", 0x80910000+$addr); my $filename = sprintf("../settings_tdc/auto/%04x_02_network_address.trbcmd",$addr); open(FILE, '>', $filename) or die $!; diff --git a/scripts/merge_and_flash_settings.pl b/scripts/generate_merged_settings.pl similarity index 86% rename from scripts/merge_and_flash_settings.pl rename to scripts/generate_merged_settings.pl index e9dbcfd..6033b59 100755 --- a/scripts/merge_and_flash_settings.pl +++ b/scripts/generate_merged_settings.pl @@ -10,16 +10,6 @@ use HADES::TrbNet; trb_init_ports() or die trb_strerror(); -sub get_file { - my $file = $_[0]; - - local $/=undef; - open FILE, "$file" or die "Couldn't open file: $!"; - my $string = ; - close FILE; - return $string; - } - ############################################################################### #Find available boards & generate files for each of them ############################################################################### @@ -37,7 +27,6 @@ my $boards = trb_register_read(0xfe91,0); foreach my $addr (keys %$boards) { my $filename = sprintf("%04x.trbcmd",$addr); my $saddr = sprintf("%04x",$addr); -# open(FILE, '>', $filename) or die $!; my @files; push(@files, sort grep { /\.\.\/settings_tdc\/auto\/common.*\.trbcmd/ } @inputs); @@ -46,11 +35,11 @@ foreach my $addr (keys %$boards) { push(@files, sort grep { /\.\.\/settings_tdc\/$saddr.*\.trbcmd/ } @inputs); push(@files, sort grep { /\.\.\/settings_tdc\/auto\/final.*\.trbcmd/ } @inputs); push(@files, sort grep { /\.\.\/settings_tdc\/final.*\.trbcmd/ } @inputs); - + next if scalar @files == 0; system("cat ".join(' ',@files)."> ../settings_merged/auto/$filename"); - print Dumper @files; - print "----\n"; +# print Dumper @files; +# print "----\n"; } @@ -59,7 +48,6 @@ $boards = trb_register_read(0xfe90,0); foreach my $addr (keys %$boards) { my $filename = sprintf("%04x.trbcmd",$addr); my $saddr = sprintf("%04x",$addr); -# open(FILE, '>', $filename) or die $!; my @files; push(@files, sort grep { /\.\.\/settings_oep\/auto\/common.*\.trbcmd/ } @inputs); @@ -68,11 +56,11 @@ foreach my $addr (keys %$boards) { push(@files, sort grep { /\.\.\/settings_oep\/$saddr.*\.trbcmd/ } @inputs); push(@files, sort grep { /\.\.\/settings_oep\/auto\/final.*\.trbcmd/ } @inputs); push(@files, sort grep { /\.\.\/settings_oep\/final.*\.trbcmd/ } @inputs); - + next if scalar @files == 0; system("cat ".join(' ',@files)."> ../settings_merged/auto/$filename"); - print Dumper @files; - print "----\n"; +# print Dumper @files; +# print "----\n"; } @@ -80,7 +68,8 @@ foreach my $addr (keys %$boards) { #Cleanup files ############################################################################### foreach my $f (glob("../settings_merged/auto/*.trbcmd")) { - system("sed -i '/^\s*#/d' $f"); +# print "Fix $f\n"; + system("sed -i '/^\\s*#/d' $f"); } diff --git a/scripts/generate_pasttrec_settings.pl b/scripts/generate_pasttrec_settings.pl index 2462004..fc76dbe 100755 --- a/scripts/generate_pasttrec_settings.pl +++ b/scripts/generate_pasttrec_settings.pl @@ -133,7 +133,7 @@ if(! $NO_WRITE_FILES) { foreach my $a (keys %$settings) { my $str =""; foreach my $i (0..63) { - $str .= sprintf("0x%04x 0x%04x 0x%08x\n", $a, 0xa040+$i, $settings->{$a}[$i]); + $str .= sprintf("0x%04x 0x%08x\n", 0xa040+$i, $settings->{$a}[$i]); } my $filename = sprintf("../settings_tdc/auto/%04x_10_pasttrec_settings.trbcmd",$a); open(FILE, '>', $filename) or die $!; diff --git a/scripts/load_flash_settings.pl b/scripts/load_flash_settings.pl new file mode 100755 index 0000000..cfa3f37 --- /dev/null +++ b/scripts/load_flash_settings.pl @@ -0,0 +1,84 @@ +#!/usr/bin/perl -w +use warnings; +no warnings "portable"; +use FileHandle; +use Getopt::Long; +use Data::Dumper; +use HADES::TrbNet; +use lib '.'; +use MDC; + +my $help; +my $board; +my $full; +my $all; + +Getopt::Long::Configure(qw(gnu_getopt)); +GetOptions( + 'help|h' => \$help, + 'board|b=s' => \$board, + 'full|f' => \$full, + 'all|a' => \$all, + ) ; + + +if($help) { +print <{$uid}}) { + my $addr = $boards->{$uid}{$k}; + load_board($addr); + } + } + $boards = trb_read_uid(0xfe91); + foreach my $uid (keys %$boards) { + foreach my $k (keys %{$boards->{$uid}}) { + my $addr = $boards->{$uid}{$k}; + load_board($addr); + } + } + } + + + + +sub load_board { + my $board = $_[0]; + my $sboard = sprintf('%04x',$board); + my $file = "../settings_merged/auto/$sboard.trbcmd"; + + if(! -e $file) { + print "\n\nERROR: No file for this board found: $sboard\n\n" ; + return; + } + + + print "\nNote: Loading $sboard\n" ; + system("../../daqtools/tools/flash_settings.pl -y -p 0x3000 0x$sboard $file"); + + } diff --git a/settings_tdc/common_50_settingsselect.trbcmd b/settings_tdc/common_50_settingsselect.trbcmd index 11bf737..33a5a83 100644 --- a/settings_tdc/common_50_settingsselect.trbcmd +++ b/settings_tdc/common_50_settingsselect.trbcmd @@ -1,3 +1,3 @@ #Select memory location 40,50,60,70 for the four Pasttrec chips, activate autoload of 12 values -0xfe91 0xa002 0x4c504c40 -0xfe91 0xa003 0x4c704c60 +0xa002 0x4c504c40 +0xa003 0x4c704c60 diff --git a/settings_tdc/final_99_init_pasttrec.trbcmd b/settings_tdc/final_99_init_pasttrec.trbcmd index edfcd57..bd602ea 100644 --- a/settings_tdc/final_99_init_pasttrec.trbcmd +++ b/settings_tdc/final_99_init_pasttrec.trbcmd @@ -1 +1 @@ -0xfe91 0xaa00 0 +0xaa00 0