What is ODB++
ODB++ is a printed circuit board manufacturing database originally developed by Valor. It was created to try to bring some order to the transfer of board data from the designers to the manufacturer. Because Valor also provides the dominant CAM tool to manfacturers the company was able to get the major industry players to adopt their proprietary standard. In recent years ODB++ has become more open after attempts by the IPC were made to replace it.
The great majority of PCB design software (layout) can output a valid and correct ODB++ file. A free ODB++ viewer can be obtained from Valor (Frontline) that allows one to visualize the data.
What Design Data is Needed to Make a PCB?
To actually build a PCB board the manufacturer needs quite a few pieces of data from the designer. I've summarized the data and its function below:
Gerber Files - these are actually "CNC" files which drive a photoplotter which creates the film used to expose each conductor layer in the board. There is also a Gerber file needed for other processes such as solder masks on top and bottom, paste masks and silk screens. So a four layer board could have 8-10 gerber files associated with it.
Drill Files - these are CNC files very similar to Gerber (but different) that are used to control a drilling machine. Plated through holes have to be drilled. On multi-layer boards you can have some holes that go all the way through, some that only go through a few layers and such. These each require a different drill file. There are lots of aggravations with drill data - first, there is no consistent standard as to how the drill tools should be defined in the header; second the coordinate system of the drill data can sometimes be offset from the Gerber files. Finally, one needs a separate document that describes which file passes through which conductor layers.
Routing Files - similar to drill files but defines a path for routing out the board.
stackup - the stackup is generally a print or written description of the board material, thickness, interposer and order. It is essential for multi-layer boards.
IPC-D-356 - esentially an electrical database of connections needed for testing the completed board. It is a very old format with a couple of variations and contains net names, test points and pins. Again, sometimes the data on this file is offset from the Gerbers which require manual intervention when trying to use this data.
Documentation - describes key elements of the board (i.e. locations), dimensions, materials and such. It can take the form of a PDF file, an HPGL file, Gerber file or AutoCAD file.
component file - this is not used by the PCB manufacturer but when actually putting components on the board. It is generally used to program a pick and place machine. It consists of a listing of each component, its name, its placement coordinate, any rotation.
Importing and Checking
You can see that there is a lot of data to send from design to manufacturing and often the data that is transmitted is incomplete, inconsistent or just plain incorrect. So the first thing the board manufacturer does is to import all the different data formats and bring the data up in his CAM software. He then checks the data and runs a series of tests to insure that the board can be manufactured. If he finds violations such as traces too close, pads to small for the drill hole or other related problems he can either fix them or report them back to the designer.
ODB++ provides a stable framework for the required data. It does not insure, of itself, that the data is correct or manufacturable but it does allow the board manufacturer to load all the data at once and immediately run the tests necessary to determine that it is consistent and buildable.
What goes into the ODB++ is generally controlled by the PCB design tool and to a lesser extent by the designer. ODB++ has a lot of data "containers" that are optional and which may or may not be used by the exporting design tool.
The ODB++ File Structure
ODB++ is not a single "file" except when transmitting it from one place to another. To send an ODB++ file one first combines the files/directories into a tarball (this is an old Unix construct) and then zips it using gzip. However it is also possible to use other zip formats as long as the hierarchy (folder) structure is preserved.Once unpacked you will see a directory hierarchy something like what is shown below:
Where is the Data Located?
Conductor and Masks and Silkscreens - this data is located in the layers section. Each conductor has its own directory and a features file that contains the actual entities. The equivalent of Gerber flashes are referenced from the symbol section.
Drill - drills are treated similar to conductors and located in the layer section. The tools file contains a list of the drill tool (i.e. the diameter of the drill.)
Stackup - the stackup can be taken from the matrix file.
Electrical Test Information - located under netlists/cadnet. There is also the possiblity to place additional EDA style netlists in the EDA folder but this data is unique to each PCB layout design tool and so the manufacturer generally does not attempt to read it.
Where Can I Get the Official Specification for ODB++
As mentioned before, ODB++ is still a proprietary file format. One can now place a request to Valor (or Frontline) to obtain the format as long as an NDA is signed. The ODB++ specification is regularly updated and, as of this writing, is at version 7.1.
Can Photoplotters read ODB++ Instead of Gerber?
Generally no, though some manufacturers are adding ODB++ as an option. In fact, Artwork developed a fairly sophisticated ODB++ to Gerber translator specifically for a large photoplotter OEM who wanted to offer end users this option. ODB++ was meant to be read into a CAM station such as those provided by Valor, Tibor-Darvis, DownStream, Wise and Lavenir. Any of those CAM tools can then export RS274X to drive a photoplotter.