ODB++ Web Page Logo

ODB++ Component Library and Placement

While component information is not a mandatory part of the ODB++ database, most ODB++ output generated from PCB layout tools will have this information.

A "library" of components is normally present in the ODB's eda section (right after the netlist information). Here you will find the component's outline and footprint along with possible some attributes such as height or component type (i.e. surface mount vs. through-hole)

The actual placement of the components is done in the /layers/comp_+_top component file for components mounted on the top side and in the /layers/comp_+_top component file for components mounted on the bottom side of the board.

Let's examine these files for a simple example shown below:

Figure 1: VUV display of top components. We're examining the highlighted component (U11)


Example Component

First we use VUV to highlight a component and read the information that VUV provides in the bar at the bottom of the display. There is quite a lot of information packed into the bar.

We see that the component is placed on TOP.
This is placement #16
The reference designator is U11
the Part name is: CDS_011
The Pkg (often known as symbol) name is PQFP100
The component has 100 pins
The placement is at: 1.925,1.425
L (length) = 1.028
W (Width) = 0.792
H (package height) = 0.13
Rotation = 0
T= no info (I believe this is thermal conductivity)
P=0.026 (power dissipation)


Investigating the Library for this Component

If we look in the /pcb/step/eda/data file and search for "PQFP100" we'll find:

# PKG 5                                         <-- an index number 
PKG PQFP100 0.026 -0.396 -0.514 0.396 0.514     <-- Package record: see Note 1
CT                                              <-- contour (for the comp outline)
OB -0.259 0.514 I                               <-- start polygon
OS 0.26 0.514                                   <-- segment to this coord
OS 0.26 0.395
OS 0.277 0.395
OS 0.277 0.389
OS 0.396 0.389
OS 0.396 -0.389
OS 0.277 -0.389
OS 0.277 -0.395
OS 0.259 -0.395
OS 0.259 -0.514
OS -0.259 -0.514
OS -0.259 -0.395
OS -0.277 -0.395
OS -0.277 -0.389
OS -0.396 -0.389
OS -0.396 0.389
OS -0.277 0.389
OS -0.277 0.395
OS -0.259 0.395
OS -0.259 0.514
OE                                             <-- end polygon                              
CE                                             <-- end of contour record                                                      
PIN 1 S -0.345 0.377 0 U U                     <-- Pin record: see Note 2      
RC -0.3775 0.3705 0.065 0.013                  <-- rectangle record (llx, lly, width, height)
PIN 2 S -0.345 0.351 0 U U
RC -0.3775 0.3445 0.065 0.013
PIN 3 S -0.345 0.325 0 U U
RC -0.3775 0.3185 0.065 0.013
PIN 4 S -0.345 0.299 0 U U
RC -0.3775 0.2925 0.065 0.013
PIN 5 S -0.345 0.273 0 U U
RC -0.3775 0.2665 0.065 0.013
PIN 6 S -0.345 0.247 0 U U
RC -0.3775 0.2405 0.065 0.013
.
.
.
PIN 100 S -0.247 0.463 0 U U
RC -0.2535 0.4305 0.013 0.065
#

Note 1: PKG record

    name     pitch     xmin    ymin   xmax   ymax  (bounding box of the package)
PKG PQFP100  0.026   -0.396  -0.514  0.396  0.514

Note 2: PIN record

    name  type    xc         yc       fhs   e-type  m-type
PIN   1     S     -0.345     0.377     0      U       U

type: T=through hole, B=blind, S=surface
fhs: finished hole size
e-type: E=electrical, M=mechanical, U=undefined
m-type: S=SMT, T=through-hole, U=undefined



Component Placement

Components are placed from the file found inside of the layers/comp_+_top and layers/comp_+_bot directories. These placements reference the library found in /pcb/eda/data file we just examined.

Let's examine the placement of U11. Since it is on the top side of the board we'll open the file called /pcb/layers/comp_+_top/components and search for U11.


# CMP 15          <-- even though it says 15 we start at 0 so this is the 16th placement
CMP 5 1.925 1.425 0.0 N U11 CDS_011 ;0=1,1=0.130000    <-- CMP record: see Note 1.
PRP PART_NUMBER 'CDS_011'                              <-- property - defines the part number
PRP PARENT_PART_TYPE 'I80386S_PQFP'                    <-- property - defines the part type parent (custom)
PRP PARENT_PPT 'I80386S'                               <-- property - defines the part type parent (custom)
PRP PARENT_PPT_PART 'I80386S_PQFP-BASE'                <-- property - defines the part type parent (custom)
PRP PART_NAME 'I80386S'                                <-- property - defines the part name
PRP PART_NUMBER 'CDS_011'                              <-- property - defines the part number
TOP 0 1.58 1.802 0.0 N 23 2 1                          <-- Toeprint record: see Note 2.
TOP 1 1.58 1.776 0.0 N 2 36 2
TOP 2 1.58 1.75 0.0 N 4 4 3
TOP 3 1.58 1.724 0.0 N 62 1 4
TOP 4 1.58 1.698 0.0 N 2 37 5
TOP 5 1.58 1.672 0.0 N 1 15 6
.
.
.
TOP 95 1.782 1.888 0.0 N 26 2 96
TOP 96 1.756 1.888 0.0 N 1 31 97
TOP 97 1.73 1.888 0.0 N 2 56 98
TOP 98 1.704 1.888 0.0 N 25 2 99
TOP 99 1.678 1.888 0.0 N 24 2 100
#

Note 1: CMP record

   reference     x     y   rotation mirror  refdes   part_name   attributes
CMP    5       1.925 1.425    0.0     N     U11      CDS_011     ;0=1,1=0.130000

reference - the CMP number in the library (pcb/eda/data) file.
x y the placement coordinate
rotation rotation of the placement
mirror mirror is normally used for components on the bottom
refdes the reference designator for this placement
part_name a part name (not same as symbol name)
attributes attribute value. The attribute parameters are at the top of this file.

At the top of the pcb/layers/comp_+_top/component file one finds a short section defining attribute names. Some names are fairly standard to ODB++ and others can be customized by the creator of the ODB file.

Here's what we find in our example at the top of the file:

#
#Component attribute names
#
@0 .comp_mount_type
@1 .comp_height

Note 2: the Toeprint Records

We already know the package's copper pad footprint from the library. This so called toeprint record provides direct pin coordinates along with a couple of net references and a toe print name.

One point of confusion - the internal package pin numbers start at 0 - but in the outside world nobody labels a package with pin number 0. Therefore you'll see that the so called toeprint name typically is offset by 1 (assuming pin labels are numerical and not JEDEC BGA style labels)

      pin_num   x       y        rot     mirror  net_num  sub_net  toeprint_name
TOP     95     1.782   1.888     0.0       N       26       2           96

pin_num internal package numbering (starts at 0)
x y center of the pin (in board coordinates - not relative to center of package)
rot rotation
mirror N=no (components on bottom are mirrored)
net_num points to net found in /pcb/eda/data file
sub_net points to a sub_net found in /pcb/eda/data file
toe_print_name - the name of this pin as seen at the board level



ARTWORK CONVERSION SOFTWARE, INC.                  Company Profile
417 Ingalls St.,     Santa Cruz, CA 95060         Tel (831) 426-6163     Fax 426-2824               email: info@artwork.com