mbschk multi-clip proof of concept
Version 1.34 of mbschk (included with the mbs2tff v1.34 release) includes a new feature that enables a user to select a window (or a list of windows from a text file) - the trapezoids in the stripes that cross or touch the window will be converted to GDSII boundaries.
It also includes a new "smart" seeking algorithm that runs as much as 20X faster than the previous mbschk. The actual speed increase depends on quite a few variables so the improvement one measures is both pattern file dependent and system (disk, IO, RAM, CPU clock, network) dependent.
The two new command line arguments are:
or, if you have a list of windows:
where the contents of the window file consists of rows of coordinates defining the lower left and upper right of the window (in units of um) i.e.
LLx,LLy,URx,URy LLx,LLy,URx,URy LLx,LLy,URx,URy LLx,LLy,URx,URy LLx,LLy,URx,URy LLx,LLy,URx,URy . . . LLx,LLy,URx,URy
Example of Running Proof of Concept
Step 1 will be to analyzie a sample MEBES file; we have created a 16 GB file called 001a010p0.00. In order to be able to create a list of windows we first need to know the data extents of this file. We do this by running the command:
c:\wcad\mbs2tiff\mbschk.exe 001a010p0.00 -info 1>info.txt
A summary of the MEBES file header will be written to the file info.txt
file: 001a010p0.00 (16027136000) bytes format is 5 number of data fields: 3 address size (bit pattern): 00000000.00100000.00011000.11001001 grid: 0.001000 step height: 1024 cx: 9079220 cy: 9008940 month: 7 day: 13 year: 2016 rdos filename: acsmebes.mbs pattern file length in 2048 byte records: 7825750 or 16027136000 (bytes) compared to 16027136000 bytes format is 5
This is followed by a list of offsets for each of the segments in the MEBES file which are not of interest at the moment.Finally at the end of the info.txt file is the data we need:
stripes per segment: 8797 segments: 278 non-empty: 278 scaling: tick: 1 dtick: 0.001000 grid: 0.001000 extents: 9079.205, 9008.925 (um)
You can compare these extents values to the ones calculated by multiplying CX and CY by the grid of 0.001. The values are not exactly the same - our programmers will explain any differences.
In any event, we now have the extents data needed to create our list of extraction windows for this file.
Generating 500 Extraction Windows
We are going to use an extraction window of 25 x 25 um and I will use Excel's RANDBETWEEN to randomly the LLx and LLy (allowing 1/2 of the window width and height as margins). The URx and URy are generated by adding 25 um to the LLx and LLy columns.
Here's a snippet of the CSV file when saved:
Running the mbschk Proof of Concept
Now that we have our window file we only need to run mbschk with the correct arguments:
c:\wcad\mbs2tiff\mbschk.exe 001a010p0.00 -win:@windows500.txt -gds -layer:10 -native where 001a0101p0.00 our MEBES pattern file (in the current directory) -win:@windows500.txt our file with 500 lines; each a window to extract we generated these randomly using Excel. -gds output a GDSII file for each window -layer:10 put the data on GDSII layer 10 -native use the MEBES file's native grid for the GDSII grid the GDSII file will always be in units of um
1. As of August 27, 2016 this proof of concept is not 100% complete. Currently, once the desired stripes are found that intersect with the window, all trapzoids in these stripes are output. Depending on the stripe width and height, this could output considerably more polygons than necessary. We will have to implement a routine that tests each polygon's extents against window extents and only pass those that correctly intersect the window to the output.
2. It is much faster to process a list of windows using the -win:@windows_file argument, that it would be to run mbschk over and over again for each window separately.