PCB设计之ODB++文件格式详解

 IC设计,PCB相关推荐链接:

1 ODB++官方样例以及格式标准

2. 开源轻量级ODB++VIEW:OpenCAM – 免费 轻量 高效 ODB++ Viewer

2.PCB设计之Gerber RS274X格式详解-CSDN博客

4.PCB设计之IPC2581文件格式详解-CSDN博客

5.IC版图设计之GDS2文件格式详解-CSDN博客

6.IC版图设计之DXF文件格式详解-CSDN博客

7.IC版图设计之OASIS文件格式详解-CSDN博客

8.IC版图设计之LEF文件格式详解-CSDN博客

1. 什么是ODB++?

ODB++(Open Database++)是一种广泛应用于PCB(印制电路板)设计和制造领域的开放数据交换格式。它由Valor Computerized Systems(现为Siemens EDA的一部分)开发,旨在替代传统的Gerber文件格式,提供更完整、结构化的制造数据,从而优化PCB设计到生产的流程。


2. ODB++的发展与优势

为什么需要ODB++?

  • 传统Gerber的局限性:Gerber文件仅包含2D图像层信息,缺乏层间关系、材料属性、钻孔数据等关键制造信息,容易导致生产错误。
  • ODB++的改进:
    • 集成化数据:包含层叠结构、钻孔信息、网络表、元件布局、材料属性等。
    • 标准化结构:采用文件夹和文件层级组织数据,便于自动化处理。
    • 减少人为错误:避免因多文件传输导致的遗漏或版本不一致。

3. ODB++文件结构解析

ODB++以压缩包形式(.tgz或.zip)存储,解压后包含以下典型目录结构:

──<product_model_name>
├───ext
├───fonts
│ └───standard
├───input
├───matrix
│ ├───matrix
│ ├───stackup.xml
├───misc
│ ├───attrlist
│ ├───info
│ ├───last_save
│ ├───metadata.xml
│ ├───sysattr.*
│ └───userattr
├───steps
│ ├───<step_name>
│ └─── ...
├───symbols
│ ├───<symbol_name>
│ └─── ...
├───user
└───wheels
├───<wheel

关键文件说明

  1. matrix文件定义PCB层叠结构,明确各层的顺序和材料属性(如铜厚、介质类型)。
  2. layers文件夹存储每一层的光绘数据(图形信息存在features文件),例如顶层走线(top.1)、阻焊层(soldermask)、丝印层(silkscreen)等。
  3. steps文件夹包含制造步骤信息,如钻孔文件(drill/)、铣边数据(rout/)。
  4. netlists文件夹提供网络表(netlist.net),用于验证电气连接的正确性。
  5. components文件夹记录元件布局、封装和位号信息(components.xml)。

3.1 matrix文件讲解

STEP {
COL=1
ID=67890
NAME=PCB
}
STEP {
COL=2
NAME=PANEL
}
...
LAYER {
ROW=1
CONTEXT=BOARD
TYPE=COMPONENT
ID=123456
NAME=COMP_+_TOP
POLARITY=POSITIVE
START_NAME=
END_NAME=
OLD_NAME=
ADD_TYPE=
COLOR=606090
}
LAYER {
ROW=2
CONTEXT=BOARD
TYPE=SILK_SCREEN
ID=123457
NAME=SST
OLD_NAME =
POLARITY=POSITIVE
REF=123458
START_NAME=
END_NAME=
OLD_NAME=
ADD_TYPE=
COLOR=606090
}

上述matrix/matrix文件主要包含step拼版信息以及layer层信息。

  • step字段:定义了step拼版的信息(一个step对应一个design),对应step拼版信息可以在<product_name>/steps/<step_name>里面找到。
  • layer字段:定义个所有design所使用层的集合。对应layer的属性和图形信息可以在<product_name>/steps/<step_name>/layers/<layer_name>找到。

3.2 steps文件夹讲解

steps文件夹包含了该拼版使用层的信息,文件夹里面主要包含以下内容:

        其中比较重要的文件为eda/data,netlists,layers文件夹。

        3.2.1 eda/data文件

        文件样式:

以官方样例:designodb_rigidflex\steps\cellular_flip-phone\eda\data:

# Mon Oct 24 10:14:55 2016
#
HDR Mentor ExpeditionPCB Database
UNITS=INCH
LYR comp_+_top spt soldermask_top signal_1 signal_2 signal_3 plane_4 covertop flex_5 flex_6 coverbottom signal_7 signal_8 signal_9 signal_10 soldermask_bottom spb comp_+_bot d_1_2 d_2_3 d_8_9 d_9_10 d_3_8 d_5_6 d_1_10 rout assemt assemb fab_drc odb_board_outline bend_area flex_area rigid_area

# NET 1
NET GND;;ID=4589
SNT VIA
FID C 3 0
FID C 4 2
FID H 18 0
SNT VIA
FID C 3 1
FID C 4 3
FID H 18 1
SNT VIA
FID C 3 2
FID C 4 5
FID H 18 2
SNT VIA
FID C 3 3
FID C 4 6
FID H 18 3
SNT VIA
FID C 3 4
FID C 4 7
FID H 18 4

....

# PKG 0
PKG BYX101471_B1 0.179133858268 -0.285433070866 -0.084645669291 0.285433070866 0.084645669291;;ID=455
RC -0.285433070866 -0.084645669291 0.570866141732 0.169291338583
PIN 1 S -0.23188976378 0.089566929134 0 U U ID=457
CT
OB -0.224015748031 0.077559055118 I
OC -0.22874015748 0.072834645669 -0.22874015748 0.077559055118 Y
OS -0.235039370079 0.072834645669
OC -0.239763779528 0.077559055118 -0.235039370079 0.077559055118 Y
OS -0.239763779528 0.10157480315
OC -0.235039370079 0.106299212598 -0.235039370079 0.10157480315 Y
OS -0.22874015748 0.106299212598
OC -0.224015748031 0.10157480315 -0.22874015748 0.10157480315 Y
OS -0.224015748031 0.077559055118
OE
CE

       里面主要存储了net信息以及component信息(PKG :映射为design中的instance)

  • HDR: 此记录包含作为数据来源的EDA系统的名称。例如
    • Mentor Boardstation neutral file 
    • Mentor Boardstation database 
    • Cadence Allegro extract file
    • Zuken Redac CADIF file
    • Mentor PADS
  • LYR:记录FID中引用层的名称,索引从0开始。
  • Net信息:
    • 第一行表示NET的名称。
    • 后面SNT加上若干组FID为一个subnet。
    • 其中FID重要,记录了该subnet绑定在lyr_num(LYR里面索引) 的f_num号shape上面。其中f_num为对应layer/features文件里面第f_num号feature。官方文档如下:
  • PKG信息
    • 官方结构如下:
    • PKG里面主要包含了该PKG的外轮廓信息以及里面若干Pin的图形坐标位置信息。注意这里的基准坐标为(stephdr里面的X_Origin和Y_Origin)。PKG的索引对应components文件里面的CMP索引。

        3.2.2 layers/<layer_name>/features文件

  • 该文件为ODB++文件里面每个层中图形的shape信息,最为重要
  • 样例:
  • UNITS=MM
    ID=216
    #
    #Num Features
    #
    F 1406
    #
    #Feature symbol names
    #
    $0 r120
    $1 rect20x60 M
    
    $2 rect3x5 I
    $3 punch_target
    #
    #Feature attribute names
    #
    @0 .smd
    @1 .nomenclature
    @2 .test_point
    @3 .geometry
    @4 .pad_usage
    #
    #Feature attribute text strings
    #
    &0 9796334
    &1 fid_0_0_0
    &2 moire
    &3 p115_115_115_095
    #
    #Layer features
    #
    P -0.198 1.62 16 P 0 3;3=2,4=0;ID=123456
    P 0.118 1.62 16 P 0 3;3=25,4=0;ID=5678
    L 3.834 -1.16 3.86728 -1.16 2 P 0 ;1,3=0
    L 3.86728 -1.16 3.8782 -1.16485 2 P 0 ;1,3=0
    ...
    S P 0;ID=123456
    OB -0.013 2.427 I
    OS -0.013 2.218
    OS -0.263 2.218
    OS -0.263 2.427
    OS -0.219 2.427
    OS -0.219 2.262
    OS -0.057 2.262
    OS -0.057 2.427
    OS -0.013 2.427
    OE
    SE
    ...

       主要包含单位,symbol定义,图形创建三部分

  • 单位:一般为MM或者INCH
  • symbol 定义:样例中0~2为标准symbol,ODB++文件中包含四十多种标准symbol,3为userdefined symbol,图形的feaure信息在<product_name>/symbols/<symbol_name>/features里里面可以找到。
  • 图形创建:一般有P、A、L、S种类型
    • P:PAD,将对应symbol移动到指定坐标xy;
    • L:LINE,利用对应symbol从start移动到end坐标,产生shape。
    • A:ARC,利用对应symbol弧形运动根据起始点,终止点,圆心,产生Shape.
    • S: Surface,无需symbol,所有点集产生shape,但注意I/H,I为实心,H为hole。

        3.2.3 layers/<layer_name>/attrlist文件

  •  样例文件:
  • UNITS=INCH
    .cu_base=NO
    .eda_layers=layer_3
    .inp_file=
    .lpol_done=NO
    .out_angle=0.0
    .out_comp=0
    .out_mirror=NO
    .out_polarity=Positive
    .out_x_scale=1
    .out_y_scale=1
    .comment=signal_3
    .layer_hdi_type=Core
    .copper_weight=0.875563
    .dielectric_constant=4.194
    .loss_tangent=0.02
    .bulk_resistivity=16.7
    .z0impedance=75

    里面记录了该层的属性信息,比如叠层信息(高度信息.copper_weight为盎司),材料信息(介电常数.dielectric_constant=4.194
    .loss_tangent=0.02等)。

        3.2.4 layers/<layer_name>/components文件

该文件只存在于<product_name>/steps/<step_name>/[comp_+_bot][comp_+_top]/里面。记录了PCB板的component信息。

  • 样例:
# CMP 9
CMP 48 2.076811 1.5326772 270.0 N R61 1000-0243 ;0=0.010236,1=1,2=9,3=0;ID=3905
PRP PART_NO '1000-0243' 
PRP FOOTPRINT_DRAWING 'BYX101162_A' 
PRP SSHEET 'b04_system_memories(1)' 
PRP REQ_NUMBER '9444' 
PRP TYPE 'Resistor' 
PRP OWNER 'LUND' 
PRP ABCPARTNUMBER 'REP621004/33' 
PRP PART_LABEL 'RES R;3K3;5%;50mW;0201' 
PRP COMMENT '2/22/06 - Imported from SEMCMASTER_2006' 
PRP COMP 'REP621' 
PRP TOLER '5%' 
PRP DESCRIPTION 'RESISTOR, 3.3K OHM, 5%, 0201, 50mW' 
PRP POW_TYP '0.05' 
PRP CAD_COMPLETED_DATE '06FEB24 - key_cindy' 
PRP CELL_LAST_MODIFIED_BY '10023679@USRTWR-1223' 
PRP CELL_NAME 'K0201_HD' 
PRP SPATH 'root_schematic!B01_PerfAppsTo10!B02_SystemTop8!B04_System_Memo4' 
PRP ALLOWED_MOUNT_SIDE 'BOTH' 
PRP MGC_UNIGROUP 'Cellular Flip-Phone' 
PRP REFLOC 'IN,0.000276,0.026654,90,CC,0.005000,0.005000,0.000000,VeriBest Gerber 0' 
TOP 1 2.076811 1.5431102 270.0 N 359 11 2
TOP 0 2.076811 1.5222441 270.0 N 370 3 1
  • 一个CMP对应主版图中一个instance.后面跟着pkg_ref对应eda/data中PKG的索引。后面坐标表示在主板图中的中心点,comp_name和part_name组和为insane的cellname。
  • 后面TOP <pin_index> <x> <y> <rot> <mirror><net_num> <subnet_num> <toeprint_name>,

其中net_num可以索引eda/data中的netNum,找到对应的netName,toeprint_name对应该Pin的PinName.

3.3 symbols文件讲解

重要的是<product_name>/symbols/<symbol_name>/features

里面自定义symbol的feature图形信息,可以被多次引用。


4. ODB++ vs. Gerber: 核心差异

特性

ODB++

Gerber

数据完整性

包含层叠、钻孔、网络表等全流程数据

仅2D图像层数据

结构

结构化文件夹+文件

分散的独立文件

自动化支持

支持CAM软件自动化处理

需手动对齐层和设置参数

错误率

低(数据自洽)

高(依赖人工核对)


5. 如何生成ODB++文件?

主流EDA工具均支持导出ODB++格式:

  1. Altium Designer
    • 菜单:File » Export » ODB++
    • 选择包含的制造数据(钻孔、网络表等)。
  1. Cadence Allegro
    • 使用File > Export > ODB++功能。
    • 需配置层映射和输出选项。
  1. Mentor Xpedition
    • 通过Output > ODB++生成,支持版本选择(如ODB++7.1)。

6. ODB++的局限性

  1. 兼容性问题部分中小型PCB厂商可能仅支持Gerber格式。
  2. 文件体积较大相比Gerber,数据量可能增加30%-50%。
  3. 版本差异不同版本的ODB++(如v7.0与v9.0)可能存在兼容性问题。

7. 应用场景

  • 高精度PCB生产:如HDI板、射频电路。
  • 自动化制造:与CAM软件(如Genesis、CAM350)无缝对接。
  • DFM检查:直接基于ODB++数据验证可制造性。

8. 总结

ODB++通过结构化数据整合了PCB设计到制造的全流程信息,显著提高了生产效率和准确性。尽管存在一定的兼容性挑战,但其在复杂项目和高可靠性场景中的价值不可替代。对于工程师而言,掌握ODB++的输出与验证方法是现代PCB设计的关键技能之一。

后续持续更新利用C++如何开发ODB++文件解析,以及生成版图全流程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值