BoolCompare2Files: A Script for Comparing Two Files |
UsageThe script takes as input the names of two GDSII files. You don't need to specify the structures since the program will automatically use the top level structure of each file -- this is why one of the assumptions mentioned requires that both files have each only a single top level structure.) The user can optionally supply a list of layers; if no list is supplied, then all layers are compared. The user can also supply a layer number "offset" so that the layers used for the output differences are offset by the value. Why? This makes it easier to then overlay the differences over one of the input files. BoolCompare2Files [ -layers l,m,n,...L,M,N ] [ -output_offset L ] file1 file2 |
Script AnnotationWe will skip over the first lines that echo to the user the script usage and which check for existence of the various executables. Comments are in italics. echo Begin BoolCompare2Files echo echo The path to BoolCompare2Files is echo echo $bindir the binary directory containing the script and the gdsfilt,gscan and newxor execs. echo AWKF=$bindir/BoolCompare2Files.awk an awk script that will parse gscan's output and pick out highest layer SUMF=$bindir/BoolCompareSummary.awk an awk script that will produce a summary text file GSCAN=$bindir/gscan gscan scans a GDSII file and returns the cell hierarchy and list of layers GDSFILT=$bindir/gdsfilt gdsfilt splits and combines files NEWXOR=$bindir/newxor newxor is the incremental xor engine. check_engine ${GSCAN} check to make sure everything we're going check_engine ${GDSFILT} to use is really there ... check_engine ${NEWXOR} check_file ${AWKF} check_file ${SUMF} rm -rf work work is a subdirectory used to hold mkdir work output and logs. If it is already there, cd work remove and create it. Then switch to it if [ $path_is_relative = 1 ] set up path to binaries ... then REL=../ else REL= fi f=$1 rm -f bench.gds new.gds to simplify the script the first GDSII input file will always be called bench and the second file is called new ln -s ../$1 bench.gds ln -s ../$2 new.gds Determining the Highest Layer Number Used in the Input Files The next lines are used to compute the highest GDSII layer used in the input files. We do this in order to "shift" layers when combining* the two input files prior to the XOR operation. The output from the gscan program includes a list of layers containing data and the AWKF code is used to pull out the highest layer bench_max_layer=`${REL}${GSCAN} bench.gds | awk -f ${REL}${AWKF}` new_max_layer=`${REL}${GSCAN} new.gds | awk -f ${REL}${AWKF}` if [ "$bench_max_layer" = "" ] then echo echo could not extract layer info for ../$1 echo echo exit fi if [ "$new_max_layer" = "" ] then echo echo could not extract layer info for ../$2 echo echo exit fi max_layer=$bench_max_layer if [ $new_max_layer -gt $max_layer ] then max_layer=$new_max_layer fi * Qckbool requires that the two layers being XOR'd are in the same GDSII file. So we will be combining the two input files into one prior to running the XOR. If we don't shift the layer numbers for one of the files we will not be able to do the XOR. |
Comparing Two GDSII Files: 1 | 2 | 3 | 4 |