Extracting Small Clips from Very Large MEBES Files
MEBES pattern files can easily exceed 100 GB due to the complexity and large amount of data. For applications where one needs to extract thousands of small clips from a reticle design (a job deck and its associated pattern files) the question arises as to what are the limiting factors in throughput and what delays can one expect.
How MEBES Pattern Files are Organized
MEBES data is organized into rectangular regions called stripes. Stripe height and width can vary depending on the address unit (AU) but a typical value is 0.5 mm wide and 0.1 mm high as shown below (not to scale). A standard reticle is 150 x 150 mm with an active area of about 100 x 100 mm. So it is not unusual to have 40 to 50 thousand stripes.
Figure 1 - MEBES pattern data is organized into rectangular stripes.
Of course, a typical chip (and it's pattern file) on a reticle will be smaller - a 10 x 10 mm chip will be 40 x 40 mm or 50 x 50 mm on the reticle depending on whether it is a 4X or 5X reticle.
The stripes are organized into vertical segments as shown in the illustration below.
Figure 2 - Stripes are further organized into segments.
The file position of each segment is listed in the pattern file's header. This segment directory will be read when the pattern file is loaded and enables the mbs2tiff program to get to a desired stripe in the file without having to traverse the entire database.
Figure 3 - A table in the pattern file header lists the record number for the start of each segment.
Assuming one can compute which segment (or segments) the window crosses, the program can start its search for the desired stripe at the beginning of the segment.
Traversing the Pattern File to Extract a Window
Now that we have a rudimentary understanding of how the MEBES pattern file is organized we can better understand how mbs2tiff traverses it to extract the trapezoids in a specified window.
Upon starting the library, it gets passed either a job deck name - which points to pattern files - or a pattern file. The program does not need to read the entire contents of each pattern file -- only the header section which defines the address unit, stripe width and height, number of segments and the segment record directory.
The program must also take into account all the placements of the pattern files that are listed in the job deck as well as any transformations.
The total time for both these steps is measured in seconds.
Computing the Segment and Stripe Intersected by the Window
Once the window is provided, mbs2tiff can quickly compute which segment (or segments) are crossed and which stripes are crossed. If the segment/stripe width = 500 um then a 40 x 40 um window will cross at most two segments. If the stripe height is on the order of 100 um then again only two stripes in a single segment will be crossed.
Once the segment is known, the program will start at the segment's start record (which is known from the directory) and begin counting stripes until it gets to the first stripe that intersects the window. It can then collect all the trapezoids belonging to that stripe into a memory buffer. If needed, it can move to the next stripe (upward) and repeat the process.
Figure 4 - Once the required segment is calculated from the window's extents, the program will start reading at the beginning of the segment. It will search past the necessary number of stripes (green ones) and then extract trapezoids from stripes that intersect the window.
So one can see that the time required to get to the desired stripe(s) location in the file will vary depending on the physical position of the extraction window. Windows near the "bottom" of the layout will be accessed quickly and those near the top of the layout will take longer.
Figure 5 - The program will have to scan through more stripe data too arrive at the window on the right.
If the window crosses two segments then the time to get to the desired stripes will be doubled.