IC设计,PCB相关推荐链接:
2. 开源轻量级ODB++VIEW:OpenCAM – 免费 轻量 高效 ODB++ Viewer
2.PCB设计之Gerber RS274X格式详解-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
关键文件说明
- matrix文件定义PCB层叠结构,明确各层的顺序和材料属性(如铜厚、介质类型)。
- layers文件夹存储每一层的光绘数据(图形信息存在features文件),例如顶层走线(top.1)、阻焊层(soldermask)、丝印层(silkscreen)等。
- steps文件夹包含制造步骤信息,如钻孔文件(drill/)、铣边数据(rout/)。
- netlists文件夹提供网络表(netlist.net),用于验证电气连接的正确性。
- 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++格式:
- Altium Designer
-
- 菜单:File » Export » ODB++
- 选择包含的制造数据(钻孔、网络表等)。
- Cadence Allegro
-
- 使用File > Export > ODB++功能。
- 需配置层映射和输出选项。
- Mentor Xpedition
-
- 通过Output > ODB++生成,支持版本选择(如ODB++7.1)。
6. ODB++的局限性
- 兼容性问题部分中小型PCB厂商可能仅支持Gerber格式。
- 文件体积较大相比Gerber,数据量可能增加30%-50%。
- 版本差异不同版本的ODB++(如v7.0与v9.0)可能存在兼容性问题。
7. 应用场景
- 高精度PCB生产:如HDI板、射频电路。
- 自动化制造:与CAM软件(如Genesis、CAM350)无缝对接。
- DFM检查:直接基于ODB++数据验证可制造性。
8. 总结
ODB++通过结构化数据整合了PCB设计到制造的全流程信息,显著提高了生产效率和准确性。尽管存在一定的兼容性挑战,但其在复杂项目和高可靠性场景中的价值不可替代。对于工程师而言,掌握ODB++的输出与验证方法是现代PCB设计的关键技能之一。
后续持续更新利用C++如何开发ODB++文件解析,以及生成版图全流程。