Parameter Programs

As explained on other pages, horizon supports parametrizable padstacks and (to a limited extent) packages. To apply the given parameters to the existing geometry, each padstack and the like is accompanied by a small program.

These programs are written in a custom stack-based language. Users of HP calculators should feel familiar. Since there aren’t any loops, these programs will terminate in finite time. The stack holds signed 64bit integers. Conceptually, it grows from top to bottom.

Syntax

On the top level, a program is made up of tokens. Tokens are separated by any amount of whitespace.

Token types:

  • Integers: a number, optionally prefixed by a sign

  • Dimension: a number with optional fractional part, suffixed by “mm”. The float before mm will get multiplied by 1e6, since horzion’s internal unit of measurement is 1nm

  • Mathematical operators such as: + - * /

  • Strings

  • Argument start [ and end ] any token between these two will get appended to the last command’s arguments

Generic Commands

Zero-operand

get-parameter [ <parameter> ] gets paramter and pushes it onto the stack

One-operand

Before the operation, the stack looks like this:

.   .
.   .
+---+
| a |
+---+

Operators:
    | pushes
dup | a a
chs | -a

Two-operand

Before the operation, the stack looks like this:

.   .
.   .
+---+
| a |
+---+
| b |
+---+

Operators:
     | pushes
+    | a+b
-    | a-b
*    | a*b
/    | a/b
dupc | a b a b (Duplicate coordinate)

Three-operand

Before the operation, the stack looks like this:

.   .
.   .
+---+
| a |
+---+
| b |
+---+
| c |
+---+

Operators:
    | pushes
+xy | a+c b+c
-xy | a-c b-c

Padstack commands

In order for an object (shape, etc.) to be manipulated by the program, it needs to be assigned a parameter class. ## set-shape set-shape [ <parameter class> <form> ] Sets a shape to the specified form or moves it to the specified position Valid forms:

  • rectangle, pops height, width

  • circle, pops diamater

  • obround, pops height, width

  • position, pops y, x

set-hole

set-hole [ <parameter class> <shape> ] Sets a hole to the specified shape Valid shapes:

  • round, pops diameter

  • slot, pops length, diameter

Polygon commands (padstack and package)

set-polygon

set-polygon [ <parameter class> <shape> <x0> <y0> ] Sets a polygon to the specified shape with center at (x0,y0) Valid shapes:

  • rectangle, pops height, width

  • circle, pops diameter

set-polygon-vertices

set-polygon-vertices [ <parameter class> <n_vertices> ] Pops n_vertices coordinates from the stack and replaces the polygon’s vertices with them.

expand-polygon

expand-polygon [ <parameter class> <x0> <y0> <x1> <y1> ... <xn> <yn> ] Pops expansion. Expands the polyon specified by the coordinates in the argument by the dimension popped from the stack.

Example program (from SMD rectangular padstack)

get-parameter [ pad_width ]
get-parameter [ pad_height ]
dupc dupc
set-shape [ pad rectangle ]
get-parameter [ solder_mask_expansion ]
2 *
+xy
set-shape [ mask rectangle ]

get-parameter [ paste_mask_contraction ]
2 *
-xy
set-shape [ paste rectangle ]