#!/usr/bin/perl # ------------------------------------------------------------------------------ # update_ise # replace ucf and vhd filelocation and name in the Xilinx xise project file # Help Parameter : <?> # Parameter : update_ise.pl <ISE File Spec> <VHDL File Spec> <UCF File Spec> # ------------------------------------------------------------------------------ # Changelog: # 2019-06-12 : zas # * All parameters given with agruments instead of env variables # 2015-05-26 : guo # * update to environment from HELS v.15.0526 # 2012-05-27 : cof # * Initial release # ------------------------------------------------------------------------------ $separator = '-' x 79; $indent = ' ' x 2; $iseFileSpec = $ARGV[0]; $vhdlFileSpec = $ARGV[1]; $ucfFileSpec = $ARGV[2]; $verbose = 1; if ($verbose == 1) { print "Script Parameters:\n"; print " * iseFileSpec: $iseFileSpec\n"; print " * vhdlFileSpec: $vhdlFileSpec\n"; print " * ucfFileSpec: $ucfFileSpec\n"; } #------------------------------------------------------------------------------- # program I/O files # $tempFileSpec = $iseFileSpec . '.tmp'; if ($verbose == 1) { print "\n$separator\n"; print "Updating file specifications in $iseFileSpec\n"; print $indent, "temporary file spec: $tempFileSpec\n"; } #------------------------------------------------------------------------------- # read original file, edit and save to temporary file # my $line; open(ISEFile, $iseFileSpec) || die "couldn't open $iseFileSpec!"; open(tempFile, ">$tempFileSpec"); while (chop($line = <ISEFile>)) { # replace VHDL files if ($line =~ m/FILE_VHDL/i) { $line =~ s/<file\s+xil_pn\:name=.*?".+?"/<file xil_pn:name="$vhdlFileSpec"/ig; } # replace EDIF files if ($line =~ m/FILE_EDIF/i) { $line =~ s/<file\s+xil_pn\:name=.*?".+?"/<file xil_pn:name="$edifFileSpec"/ig; } # replace UCF files if ($line =~ m/FILE_UCF/i) { $line =~ s/<file\s+xil_pn\:name=.*?".+?"/<file xil_pn:name="$ucfFileSpec"/ig; } # Implementation Top files if ($line =~ m/\.vhd"/i) { $line =~ s/<property\s+xil_pn:name="Implementation\s+Top\s+File"\s+xil_pn\:value=".+?"/<property xil_pn:name="Implementation Top File" xil_pn:value="$vhdlFileSpec"/ig; } if ($line =~ m/\.edf"/i) { $line =~ s/<property\s+xil_pn:name="Implementation\s+Top\s+File"\s+xil_pn\:value=".+?"/<property xil_pn:name="Implementation Top File" xil_pn:value="$edifFileSpec"/ig; } # replace UCF binding if ($line =~ m/\.ucf"/i) { $line =~ s/<binding\s+(.+)\s+xil_pn\:name=.*?".+?"/<binding $1 xil_pn:name="$ucfFileSpec"/ig; } print tempFile ("$line\n"); } close(tempFile); close(ISEFile); #------------------------------------------------------------------------------- # delete original file and rename temporary file # unlink($iseFileSpec); rename($tempFileSpec, $iseFileSpec); if ($verbose == 1) { print "$separator\n"; }