![]() |
ODB++ Component Library and PlacementWhile 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. 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 |
|
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. 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) |