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.


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.

layout of MEBES file 001a010p0.00

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:

random windows across surface of our MEBES file.

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


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.