polysearch web page logo

Introduction

Chip layouts generally will contain a large number of identical "polygons" due to the repetitive nature of the designs. Often it is useful to be able to find all occurrences of a particular polygon wherever it appears on the layout. The Polysearch engine does this. It takes as input the layout to be searched and a file containing one or more templates and then finds all the occurrences of the template.

polysearch flow

Multi-threaded

Given the size and complexity of chip layouts any such pattern matching software must deal with millions and possibly even billions of comparisons. Polysearch has been written from the bottom up to take advantage of multi-core workstations. Both the extraction of polygons (known as exploding) and the comparison of template vs. candidate polygons are multi-threaded.


Windowing

When doing a pattern match, one often knows that certain areas of a chip can be excluded. For example, if one is searching for patterns likely found in the logic area of a chip, one should not waste computing resources searching memory blocks.

Polysearch supports as input a window or list of windows to search. By crafting a number of windows that only cover the logic region of the chip one can avoid searching where there is no chance of a match.


Rotation and Mirroring

Polysearch will match the template even if the target polygon has been rotated by 90, 180 or 270 degrees and/or mirrored.


a single template is expanded into a total of 8 patterns to account for all possible 90 degree rotations and mirroring about X and Y

File Format

Polysearch uses GDSII as its input; output is GDSII; polygon template data is in GDSII or a text file.

Window definitions are text files.


Polysearch Engine Syntax

Detailed explanation of the command line syntax: Engine Syntax Details

polysearch.exe +input:<INPUT-GDSII-FILE> +output:<OUTPUT-GDSII-FILE> +polyf:<POLYLIST-GDSII-FILE>

## WINDOW Specification

[-window:LLUR:<LLX>,<LLY>,<URX>,<URY>]
[-window:LLWH:<LLX>,<LLY>,<WIDTH>,<HEIGHT>]
[-window:CWH:<CX>,<CY>,<WIDTH>,<HEIGHT>]
[@window:LLUR:<FILENAME> >]
[@window:LLWH:<FILENAME>:<FILE-PATH>]
[@window:CWH:<FILENAME>:<FILE-PATH>]

## INPUT FILE SETTINGS 
[-layers:<LAYERS>]
[-cell:<CELL>]
[-loadfromdisk]

## MISC. SETTINGS
[-thrnum:<N-EXPL-THREADS>[,<N-BOOL-THREADS>[,<N-SCAN-THREADS>]]]
[-maxvert:<MAX-VERT-PER-TILE>]
[-jitter:<TOLERANCE-FOR-COMPARISON-IN-DATABASE-UNITS>]
[-by_layer]
[-by_layer_datatype]
[-target_lyr:<TARGET-LAYER>]
[-log:${NEW_LOG_FILE}] | [-log+:${LOG_FILE}]   Details

Platforms

Linux (64 bit)

Windows (64 bit)