web page header logo

Multi-Window Option

Recently one of our customers wanted to use ODB_RIP to extract thousands of small windows from a single layer of a very dense and large PCB panel. These small windows were generated by an inspection machine that looked for defects. The idea was to compare the images of the defects generated by a camera against the bitmap of the design data.


The rate at which ODB_RIP was extracting these small bitmaps windows was insufficient to support the desired throughput for inspection equipment and the subsequent analysis of the defects.

The Problem?

ODB_RIP was originally designed to rasterize the entire panel using only a relatively few number of very large windows. So it was not optimized to handle a large number of very small windows and was reloading the geometry data from disk for each window call.


The solution was to rewrite the rasterizer so that it cached the input data in a way that allowed it to re-use it for each window call. At the same time, we ported the internals to 64 bits since that enables us to utilize more memory to hold the input data and any bitmap buffers without hitting the 32 bit memory limit.

Multi-Window Usage

To use the multi-window option the user must first have the multi-window license in place. Then, instead of using the -window argument, the user should use the -extents argument.

-extents clues in the rasterizer that many windows are going to be requested from the same ODB++ layer and that a geometric representation of the layer should be cached in memory.

The -extents argument supports multiple window specifications. These can be put on the command line (if there are only a few) or read from an external file.

Throughput Example

In order to show the efficiency and speed of the multi-window option, we ran a test using a large and dense ODB++ database. The layout is a dense BGA package that is heavily arrayed in three levels of hierarchy: ( unit -> strip -> panel )


ODB++ panelized board. Panel is 16 x 20 inches in extents.

To generate a large number of windows, a simple random window generator program was written to produce 1000 windows; this data was saved to a file called rand.txt. Each window is 0.0189 wide by 0.0142 inches high and the DPI we will use is 54,000. We want to generate 1000 TIFF bitmaps (packbits compression) and write them to disk. Each bitmap is 1024 x 768 which matches the size of the camera sensor.

You can see a snippet of the rand.txt file below. Each line consists of the 4 corners of a window: LLx,LLy,URx,URy.


The Command Line

Here is the command line I will use:

C:\WCAD\ODBRIP64\odbrip_cmdline64.exe     full path to the command line app
"-job:%CD%\mgf16284.tgz"                  the input ODB++ file
"-workdir:%CD%\working"                   a directory for holding temp files

"-outdir:%CD%\output"                     the output directory for the bitmaps

-step:panel,l1                            the STEP to process (panel) and the
                                          layer to process.

-ram:128                                  the amount of RAM (in MB) to allocate
                                          for the bitmap buffer.

-dpi:54000                                The DPI

"-extents:%CD%\rand.txt"                  a text file containing a list of windows
                                          to process.

-log                                      directive to output a log file

The Results

CPU - Intel Core2 Quad CPU Q8400 @ 2.66 GHz
RAM - 8 GB
Disk - mechanical 7200 RPM

Number of TIFF Output Files: 1000


Time to produce 1000 bitmaps: 06:50 min:sec

This works out to 0.41 seconds per frame.

The throughput is now sufficient to properly support the hardware used for the high speed inspection and analysis of complex PCBs.


Frequently Asked Questions

Revision History