The BAE layout system is equipped with powerful
Autoplacement functions. The part set functions are used for selecting and/or deselecting parts for subsequent placement operations. The matrix placement facilities are used for placing selectable part sets onto definable placement grids. Initial placement functions are provided for performing fully automated part placement. The system also provides placement optimization functions for automatic part and pin/gate swap.
Autoplacement functions are available from the
submenus of the
Layout Editor if it is not yet active and load the layout
board from the
demo.ddb DDB file.
function from the
menu to delete the resistors named
r101, and apply group functions to delete the switches named
|Move to "r100",[1.0",2.4"]|
|Move to "r101",[1.6",2.4"]|
|Move to [0.1",0.4"]|
|Move to [0.6",0.4"]|
|Move to [0.6",2.4"]|
|Move to [0.1",2.4"]|
Autoplacement features and functions are used throughout the following sections to place the deleted parts back onto the layout.
4.4.1 Part Set
submenu provides features for selecting the parts to be subsequently placed. Parts can be selected and/or deselected according to set principles either by specifying part names
ic15, etc.) or by specifying package types
plcc44, etc.), where wildcards are also permitted. The user can also select parts from certain blocks of a hierarchical circuit design. With the Part Set functions the user is able to control the placement process in a way that e.g., first the plug(s) can be placed, then the DIL packages, then the capacitors, etc.
Use the following commands to deselect all unplaced parts:
|Deselect all parts ?||j |
Now you might want to use the
command to have a look at the part list:
function provides verbose output of all net list parts:
File : demo.ddb Layout : board Parts : 23
: c100 chip1210 P : c101 chip1206 P : ic10 dil14 P
: k1 relais P : r100 r04a25 U : r101 r04a25 U
: r102 r04a25 P : r103 r04a25 P : r104 minimelf P
: r105 chip1206 P : s1000 s1dilo U : s1001 s1dilo U
: s1002 s1dilo U : s1003 s1dilo U : s1004 s1dilo U
: s1005 s1dilo U : s1006 s1dilo U : s1007 s1dilo U
: s1008 s1dilo U : s1009 s1dilo U : v1 to92 P
: v1000 d04a25 P : x1000 xsubd9bl P - End -
Each part is listed with part name, library name and placement status, respectively. The placement status is indicated using either of the characters
U indicates that the part is neither placed nor selected for placement.
P indicates that the part is already placed on the layout.
S indicates that the part is not yet placed but selected for subsequent placement operations. Press
X and the return key
to exit from the parts list.
Use the following commands to select all unplaced parts with part names starting with an
|Part Name ?||r* |
|Part Name ?|| |
part set selection options from the
function also provide a popup menu for part selections. With the
option, the popup menu only displays unselected parts, whilst with the
option, only selected parts are displayed. A part name pattern can be entered for part set selections.
The above commands selected the two resistors
r101 for subsequent placement operations. You can check this with the
function (see placement status
S for these two parts).
function can be used to select all unplaced parts for placement. The
function can be used to select parts with library names (such as
so16 for all unplaced 16 pin small outline package types or
dil* for all unplaced dual-in-line package types). The
option can be used to deselect parts from the set of parts to be subsequently placed.
Packager utilizing the internal
functions from the
menu can be used for selecting and/or deselecting parts which are defined in certain blocks of a hierarchical circuit design. I.e., parts are selected or deselected through block names. Part block names are automatically transferred and stored by the
$blkname part attribute.
It has already been mentioned that the
chapter 4.3.2). Use the following commands to set the coordinate display mode to inch, and place all parts of the currently defined part set (i.e., the two resistors named
functions work on the part set (see section Placing Parts in
|Place Next Part|
|Move to [1.0",2.4"]|
|Place Next Part|
|Move to [1.6",2.4"]|
|Place Next Part|
function issues the
All selected parts have been placed already!
message if no more part is selected for subsequent placement operations anymore (i.e., all parts of the previously defined part set are already placed).
4.4.2 Matrix Placement
Matrix placement is a special initial placement process for automatically placing selected parts on certain matrix-defined insertion positions.
Use the following commands to select all parts with library name
s1dilo (i.e., the switches named
s1009) for subsequent placement operations:
|Library Element Name ?||s1dilo |
|Library Element Name ?|| |
Set the default placement rotation angle to 270 degree (without mirroring (the
option is probably located in the
group of the
dialog from the
menu when working with customized BAE user interfaces):
|270 Degrees Left|
Use the following commands to define a placement matrix, place all selected parts onto this matrix and delete the placement matrix definition again:
|Move to Matrix Origin,[0.2",2.3"]|
|Move to Matrix Element Size Designation,[0.3",2.1"]|
|Move to Matrix Size Designation,[0.2",0.5"]|
function automatically places all parts of the currently defined part set onto the placement matrix, also considering the current default placement rotation angle and mirror mode settings.
Now all net list parts are placed. You might want to check this with the
4.4.3 Initial Placement
system provides full automatic initial placement algorithms. The initial placement functions automatically place all unplaced net list parts inside the board outline onto the currently selected input (placement) grid, considering pre-placed parts (connectors, LEDs, etc.), keepout areas and net list preferences, and also featuring automatic block capacitor and SMD device recognition. Automatic SMD part mirroring can optionally be enabled to allow SMD placement on the solder side. Either unrestricted or restricted automatic part rotation in 90 degree steps can be applied; restricted part rotation can be used to simplify subsequent insertion processes. A generally applicable part expansion value can optionally be defined to ensure minimum clearance between adjacent parts. The placement algorithms are guarded by adjustable strategy parameters for net list preference control and for the consideration of part segment matching/fitting. Rip-up and retry passes are automatically applied during the placement process to optimize board area yield.
The initial placement routines are integrated to the
submenu which provides the following functions:
Only the parts from the current part set (see
chapter 4.4.1) are placed. Placed parts which are not selected to the current part set are treated like fixed parts. This feature allows for automatic placement of selectable part groups.
function can be used to perform automatic part placement.
The first part selected for placement will be positioned at the placement start point. The
function automatically designates the placement start point. The
functions prompt the user for the placement start point (prompt
). The placement of the first part determines the placement of subsequent parts. I.e., the selected placement start point position has crucial meaning for the complete placement process (with regard to 100% completion success and/or the quality of the achieved placement). If the first part cannot be placed at the placement start point, then no subsequent part can be placed either. If the placement start point is selected outside the board outline, then no part can be placed at all. If no board outline is defined then there are no restrictions on selecting the placement start point, however parts could then be placed even outside the boundaries of the currently loaded layout element.
After starting an initial placement function the placement progress is indicated in the status line by a progress message such as
. The autoplacement process can be stopped by keystroke. Each autoplacement stop request is verified with user confirmation and will be denoted by a message such as
. Note that there might be a short delay on stop requests since any currently active autoplacer rip-up and retry pass must be completed.
A message such as
is issued after completing an initial placement function to indicate that all parts have been successfully placed. If the autoplacer fails to complete 100% part placement using the current parameter settings, then a message such as
is issued, denoting the number
<n> of yet unplaced parts. On incomplete initial placement it is recommended to change placement parameters (use smaller placement grid, reduce part expansion, use unrestricted part rotation, allow SMD mirroring; see below on how to set placement parameters) and restart the autoplacer (after
and/or selecting a different placement start point) to achieve 100% part placement.
chapter 4.4.4 below) using the currently selected placement optimization parameters (number of passes and the pin/gate swap method). The placement start point results from the board outline gravity point. No part can be placed using the
function, if the board outline gravity point is outside the board outline (e.g., on L-shaped PCBs) then ; in this case either
must be used instead of
function performs cluster placement (see below) with automatic placement start point selection and subsequently applies multi-pass placement optimization (see
If no board outline is defined, then the placement start point results from the absolute origin of the currently loaded layout element. In this case it is recommended to zoom to overview after completing the placement process since parts can be placed beyond the currently defined and/or visible layout element boundaries.
After activating the
function the user is expected to select the placement start point interactively. The first part selected for placement is positioned at the placement start point.
function analyzes the net list to classify the nets and parts contained in the net list. Parts are grouped to clusters, and these clusters are subsequently placed on the layout with respect to pre-calculated cluster-dependent placement priorities. Each cluster is grouped by selecting a multi-pin part and a series of connected parts with less than four pins. Parts which are connected to power signals only (such as block capacitors) are postponed during cluster generation and will be assigned to clusters with corresponding power connections afterwards. This method of cluster building automatically involves block capacitor recognition, thus featuring appropriate block capacitor placement nearby corresponding ICs. Parts and/or part clusters are assigned and/or processed due to alphabetical part name order. It is recommended to introduce part type grouping by choosing appropriate type-specific part name patterns, i.e., to insert connectors at the end of the part name list to avoid block capacitor assignment to connectors and/or plugs (e.g., by using name pattern
x??? for connectors and/or plugs,
ic??? for integrated circuits, etc.).
function performs area placement with interactively selectable placement start point. Area placement does not consider any net list preferences, i.e., only part dimensions are considered as placement criteria. The
function can be used to estimate part placement area requirements, i.e., to check whether the board area is large enough to place all parts.
Part Pin Factor
The part pin factor is used to control the sequence of parts and/or clusters to be placed. The next part to be placed is selected by applying a combination of two strategies. The first strategy simply selects the part with the maximum number of pins connected to already placed parts. The second strategy selects the part with the maximum ratio of number of part pins connected to already placed parts to total part pin count. The part pin factor value designates which strategy has higher priority. Use the
|Part Pin Factor|
|Pin Count Weight [0.0,1.0] (0.90) ?|
function to set the desired part pin factor value in the range 0.0 (for considering connection counts only) to 1.0 (for considering connection count to total pin count ratios only). On default the part pin factor value is set to 0.9. A high part pin factor value usually results in a better distribution of nets, but could cause excessive placement area fragmentation on high-density layouts by early placement of small parts, which might prevent from placing larger parts afterwards.
The segment fit value is used to control on how much part edge length matching should be considered by the placement algorithm, i.e., whether preference should be given on placing parts with equal edge lengths side by side. Use the
|Segment Fit [0.0,1.0] (0.10) ?|
function to set the weight factor for considering part edge length matching. Valid segment fit values are in the range 0.0 (no segment fit preference) to 1.0 (high segment fit preference). On default the segment fit value is set to 0.1. High segment fit values usually result in better looking layouts, and can increase the routability of layouts with many bus connections. Better routability of high-density layouts with a "random" connection distribution however can be achieved using smaller segment fit values.
The part mirroring mode has effect on the placement of SMD parts only. With the
default option, SMD parts can only be placed on the PCB part side.
is used to allow unrestricted placement of SMD parts on both the part side and the solder side. The
option restricts automatic part mirroring to 2-pin SMDs only, thus allowing for solder side placement of small parts such as block capacitors whilst placement of SMDs with more than 2 pins is forced onto the PCB part side. Use the
function to select the desired SMD mirroring option.
The part rotation mode is used to apply either unrestricted or restricted automatic part rotation in 90 degree steps. With the
default option all parts can be placed at arbitrary 90 degree rotation steps. Option
can be used to restrict part rotation, i.e., to allow no rotation or 90 degree left rotation only. Restricted part rotation can be used to simplify subsequent insertion processes which will also result in a reduction of CPU time required by the placement algorithms. Use the
function to select the desired part rotation mode.
Part Size, Part Expansion, Block Capacitors, Placement Grid
The parts are placed onto the currently selected input grid (to be set using the
function from the
menu). The placement area required for each part (i.e., the part size) emerges from the element boundaries of the corresponding part macro. This should be taken into consideration at the definition of element boundaries when creating part macro symbols. It is recommended to refrain from defining unnecessarily large part macro element boundaries to avoid redundant placement area occupancy.
A generally applicable part expansion value can optionally be defined in order to ensure minimum clearance between adjacent parts (on low-density layouts). Use the
|Expansion Value ( 0.00mm) ?|
function to set the desired part expansion value. On default the part expansion value is set to 0.0mm (i.e., no part expansion is applied). Note that the specified part expansion value with no regard to different part macro type dimensions is equally applied on each part macro type except for block capacitors. Block capacitors are automatically recognized and will be placed as close as possible to the ICs to be supplied. The
preferably places block capacitors either on top or on the right-hand side of the integrated circuits, according to the ICs orientation.
features a function for automatically reducing part expansion settings by 25 percent steps until either complete placement is achieved or part expansion is reduced to zero.
Rip-up and Retry Passes
The initial placement algorithms are designed to consider only connections to/between already placed parts. Intermediate placement results might show up with alternate positions to be more optimum for a series of previously autoplaced parts. For this reason, rip-up and retry passes are activated for replacing already placed parts in order to find a more optimum placement. Note that preplaced unfixed parts are also processed by the rip-up and retry passes. It is strongly recommended to fix those preplaced parts which must not be replaced. Parts can be fixed using
Layout Editor group functions. Use the
|Number of Retries|
|Number of Retries [0,9] ( 2) ?|
function to specify the number of retry passes to be applied during the autoplacement process. Two retry passes are used on default; i.e., one rip-up and retry pass is applied after placing half of the unplaced parts and one rip-up and retry pass is applied at the end of the autoplacement process. It is recommended to refrain from specifying too many retry passes since this not only increases CPU time requirements but also can result in a deterioration of intermediate placement results since small parts such as block capacitors might not be correctly replaced with their clusters.
4.4.4 Placement Optimization
The placement optimization features of the
BAE layout system include functions for automatic part and pin/gate swap. The part swap facility mutually exchanges identical components at their insertion position in order to minimize unroutes lengths. The pin/gate swap facility analogously performs an iterative exchange of gates and/or pins and pin groups, where gates or groups can also be swapped between different parts. The admissibility of pin/gate swaps is fairly controlled with appropriate library definitions. Either single pass or multi pass optimization can be applied. Different swap methods can be selected through the
function, with the default
option to perform both component and pin/gate swap,
to switch off pin/gate swap and
to switch off component swap. Applying placement optimization usually causes a significant simplification of the routing problem, thus considerably reducing runtime at the subsequent Autorouting process.
Use the following commands to perform a triple-pass placement optimization with both component and pin/gate swaps:
|Number of Passes|
|Number of Passes : 2 (1..99) ?||3 |
|Multi Pass Optimizer|
During optimization a status line message instantly reports the number of parts processed by the current optimizer pass. Placement optimization can be interrupted at any time by pressing an arbitrary key on the keyboard.
Wait until all optimizer passes are completed and use the
function to estimate how placement optimization did change the complexity of the "ratsnest" (unroutes).
Fixed parts are excluded from placement optimization. It is strongly recommended to fix critical parts before running the placement optimization. Critical parts are those which must not be replaced (e.g., plugs, switches, LEDs, etc.) or where pin/gate swaps are not allowed (e.g., relays, multi-opamps, etc.). Parts can be fixed using
Layout Editor group functions. Please note that automatic pin/gate swap should only be performed if all of the swap definitions stored with the logical library are permitted. Select the
option from the
function to switch off automatic pin/gate swap if you are in doubt about the correctness of swap definitions. Consider please that usually no pin/gate swap is allowed for plugs. Swaps for parts with special attribute values (e.g., resistor networks with attribute
$val must be defined internal to prevent the system from swapping gates between parts with different values. See
chapter 7.11 of this manual for a description of the
loglib utility program and how to introduce pin/gate swap definitions to the logical library.
Autoplacement • © 1985-2022 Oliver Bartels F+E • Updated: 04 April 2011, 11:03 [UTC]