matlab-read-pcb-layout について
Gerber、ODB++、Cadence Allegro形式のPCBやIC/SiPパッケージレイアウトを、MATLABに取り込んで調べるためのスキルです。形状や階層データを抽出し、インポートした設計を後続の解析に利用できます。
主な機能
- 01Gerber、ODB++、Allegroのインポート
- 02レイヤーとスタックアップの確認
- 03ネット、部品、ピンの照会
- 04ポリゴンの抽出と表示
- 05pcbComponentへの変換
活用シーン
- 01基板やパッケージのレイヤーとネットの確認
- 02Gerberの金属形状を抽出して独自設計に利用
- 03インポート形状をSパラメーター解析用に準備
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ matlab/ matlab-agentic-toolkit --skill matlab-read-pcb-layoutインストール後、Claude Code で/matlab-read-pcb-layoutを入力して読み込まれたか確認します。
同梱ファイルmanifest.yaml
詳細
PCB およびパッケージレイアウトの読み込み
対象範囲: pcbFileRead は PCB 基板と IC/SiP パッケージの両方に対応します。ODB++ ファイルと Allegro ファイルには、パッケージレベルの設計(BGA 基板、インターポーザー、内蔵受動部品)が含まれる場合があります。ワークフローは同じです。形式によって内容は異なりますが、関数名は変わりません。
使用する場面
- Gerber ファイル(
.gtl、.gbl、.gbrなど)を MATLAB にインポートして、可視化または EM 解析を行う - ODB++ アーカイブ(圧縮または非圧縮)を読み込み、基板またはパッケージのレイアウトを調べる
- Cadence Allegro の
.brdファイルをインポートする - インポートしたレイアウトから、cadnet、コンポーネント、レイヤー、ピン、または形状を調べる
- Gerber ファイルから金属レイヤーのポリゴンを抽出し、カスタム設計に使用する
- 外部設計のレイアウトから
pcbComponentを作成して、S パラメーター解析を行う
使用しない場面
- 設計を Gerber ファイルにエクスポートする場合は、
matlab-write-pcb-layoutを使用します - 形状プリミティブから PCB 構造を一から作成する場合は、
matlab-assemble-pcb-layoutを使用します - インポート後に EM 解析を実行する場合は、
matlab-analyze-emを使用します - 基板または積層構造の材料を定義する場合は、
matlab-manage-pcb-materialを使用します
一般的なワークフロー
- このスキル: Gerber、ODB++、または Allegro から PCB レイアウトをインポートします
- 次の手順:
matlab-analyze-pcb-pdn— インポートした基板の PDN DC 解析、またはmatlab-analyze-em— インポートした形状からの S パラメーター抽出、またはmatlab-model-via— インポートした積層構造のビア解析
クイックリファレンス
| タスク | コード |
|---|---|
| Gerber ファイルをインポート | P = gerberRead('file.gtl') |
| 形状を抽出 | shp = shapes(P) |
| 積層構造を定義 | S = stackUp |
| 複数レイヤーをインポート | p = PCBReader('StackUp', S) |
| pcbComponent に変換 | pcb = pcbComponent(p) |
| ODB++ をインポート | pfile = pcbFileRead('design.zip') |
| Allegro .brd をインポート | pfile = pcbFileRead('design.brd') |
| cadnet の一覧表示 | tbl = cadnetList(pfile) |
| cadnet を開く | cnet = cadnet(pfile, "NET_NAME") |
| レイヤーの積層構造を照会 | su = stackUp(pfile) |
| コンポーネントの一覧表示 | tbl = componentList(pfile) |
| パッドスタックの一覧表示 | tbl = padStackList(pfile) |
gerberRead — シンプルなインポート
gerberRead 関数は Gerber ファイルをインポートし、PCBReader オブジェクトを返します。shapes() を使用して、金属レイヤーをポリゴン形状として抽出します。
基本的な使い方
P = gerberRead('interdigital_Capacitor.gtl');
shp = shapes(P); % Extract metal layer shapes
show(shp(1)); % Show top layer polygon
インポートした形状の中心合わせ
インポートした形状は、CAD 原点からオフセットされていることがよくあります。形状を抽出してから中心に合わせます。
P = gerberRead('myDesign.gtl');
shp = shapes(P);
layer1 = shp(1);
% Get bounding box to compute center offset
verts = layer1.Vertices;
cx = (max(verts(:,1)) + min(verts(:,1))) / 2;
cy = (max(verts(:,2)) + min(verts(:,2))) / 2;
% Center using translate
layer1 = translate(layer1, [-cx -cy 0]);
show(layer1);
対応する Gerber ファイル拡張子
| 拡張子 | レイヤーの種類 |
|---|---|
.gtl | 上面銅箔 |
.gbl | 下面銅箔 |
.gts | 上面ソルダーマスク |
.gbs | 下面ソルダーマスク |
.gto | 上面シルクスクリーン |
.gbo | 下面シルクスクリーン |
.drl | ドリルファイル |
.gbr | 汎用 Gerber |
stackUp — 複数レイヤーの定義
stackUp オブジェクトは、複数レイヤー基板をインポートするための PCB レイヤー構造全体を定義します。
デフォルトの stackUp
S = stackUp;
デフォルトの積層構造には番号付きのレイヤーがあります。奇数レイヤーは導体(金属または Gerber ファイル)、偶数レイヤーは誘電体です。
レイヤーへの Gerber ファイルの割り当て
S = stackUp;
S.Layer1.Thickness = 0.1e-3; % Air layer above board
S.Layer2 = 'interdigital_Capacitor.gtl'; % Top copper from Gerber
複数レイヤーの積層構造
S = stackUp;
S.Layer1.Thickness = 0.1e-3; % Air
S.Layer2 = 'top_copper.gtl'; % Top copper
S.Layer3.Thickness = 0.2e-3; % Dielectric
S.Layer3.EpsilonR = 4.4;
S.Layer4 = 'inner_layer.g2'; % Inner copper
S.Layer5.Thickness = 1.0e-3; % Core dielectric
S.Layer5.EpsilonR = 4.4;
S.Layer6 = 'bottom_copper.gbl'; % Bottom copper
PCBReader — 基板全体のインポート
PCBReader は、Gerber ファイルを含む積層構造をラップし、pcbComponent に変換できるリーダーオブジェクトを作成します。
基本的なワークフロー
S = stackUp;
S.Layer1.Thickness = 0.1e-3;
S.Layer2 = 'interdigital_Capacitor.gtl';
p = PCBReader('StackUp', S);
pcb = pcbComponent(p);
pcb.FeedDiameter = 0.001;
show(pcb);
インポート後のフィード追加
pcbComponent に変換した後、EM 解析用のフィード位置を追加します。
pcb = pcbComponent(p);
pcb.FeedDiameter = 1e-3;
pcb.FeedLocations = [-5e-3 0 1 3; % Port 1
5e-3 0 1 3]; % Port 2
sp = sparameters(pcb, linspace(1e9, 10e9, 51), 'SweepOption', 'interp');
rfplot(sp);
インポートした形状からのフィード位置の特定
フィード位置は金属配線上にある必要があります。Gerber インポートを pcbComponent に変換した後、形状を調べて有効なフィード点を見つけます。
pcb = pcbComponent(p);
show(pcb); % Visual inspection — identify trace endpoints
layout(pcb); % Top-down layout view with dimensions
プログラムで配置するには、インポートしたレイヤーのメッシュ頂点を抽出し、エッジの中点を計算します。
m = mesh(pcb); % Get mesh structure for coordinate reference
フィード位置が不明な場合は、主伝送線路配線の視覚的な端点にフィードを配置し、配線のエッジから少なくとも FeedDiameter/2 内側にずらします。
FeedLocations の列の意味
FeedLocations = [x, y, col3, col4] — 3 列目は信号層(給電プローブ/球が表示される層)です。4 列目はグラウンド基準層です。プローブは col3 から col4 に接続されます。順序を入れ替えると、給電球が誤った層に表示されます。
エッジ給電(ストリップモデル)
基板の端で給電する構造(例:PCB 境界で終端するマイクロストリップ線路)には、ストリップ給電モデルを使用します。
pcb.FeedViaModel = 'strip';
pcb.FeedDiameter = traceWidth / 2; % Must be half the trace width for edge feeds
'strip' モデルは、垂直なビアプローブではなく、基板端に平面給電を作成します。トレースが終端する BoardShape の正確な端に給電点を配置します。
PCBReader のレイヤー構造
pcbComponent(PCBReader) の後、Layers セル配列は標準的な交互パターン({metal, dielectric, metal, ...})に従います。金属層には、インポートされた Gerber の形状が含まれます。FeedLocations のレイヤーインデックスは、手動で構成した pcbComponent オブジェクトと同じ奇数番号の規則(1、3、5、...)に従います。
PCBReader から pcbComponent への変換
pcbComponent コンストラクターは、PCBReader オブジェクトを直接受け取ります。
Cadence Allegro .brd のインポート
インポートまたは解析のためにユーザーが .brd ファイルに言及した場合は、インポートを試みる前に、必ず Cadence extracta.exe のパスを確認してください。 extracta ユーティリティが必要であり、事前に設定しておく必要があります。すでに設定済みだと想定しないでください。
% Step 1: Check if extracta is already configured
extractaSetup() % Displays current path, or [] if not set
% Step 2: If [], ask user for path and configure (persists across sessions)
extractaSetup('C:/Cadence/SPB_17.4/tools/bin/extracta.exe')
% Step 3: Import
pcb = pcbFileRead('design.brd');
extractaSetup(path) は、Cadence extracta.exe 実行可能ファイルへのフルパスを受け取ります。パスは MATLAB セッションをまたいで保持されるため、実行は一度だけで済みます。これを設定しないと、.brd のインポートは extracta エラーで失敗します。
引数なしで extractaSetup() を呼び出すと、現在設定されているパス(未設定の場合は [])が表示されます。設定が完了しているかどうかの確認に使用します。
ODB++ のインポート
pcb = pcbFileRead('design.zip'); % Zipped ODB++
pcb = pcbFileRead('odb_directory'); % Unzipped ODB++
基板とパッケージの検査
pcbFileRead は、ODB++、Allegro、またはネイティブ PCB ファイルを開き、レイヤー、cadnet、コンポーネント、部品、ピン、形状を階層的に検査します。PCB 基板と IC/SiP パッケージのどちらでも同じように動作します。
ファイルを開く
pfile = pcbFileRead('ExampleBoard.odb');
返されるオブジェクトは、NumLayers、NumCadnets、NumPadStacks、NumComponents、NumParts、LayerHeight を公開します。
レイヤースタックアップの照会
stackUp(pfile) は、インポートした基板のすべてのレイヤーについて、材料の詳細を示すテーブルを返します。
su = stackUp(pfile); % Full stackup table
su = stackUp(pfile, [2 3 4]); % Specific layers only
テーブルの列は、LayerNumber、LayerName、LayerType、Material、Thickness(inch)、EpsilonR、LossTangent、Conductivity(S/m) です。
注: これは pcbFileRead のオブジェクト関数であり、テーブルを返します。Gerber のインポートで使用する stackUp コンストラクターとは無関係です(「注意点」セクションを参照)。
階層のナビゲーション
% List cadnets (electrical nets)
tbl = cadnetList(pfile); % Returns table with net names
% Open a specific cadnet and get its shapes
cnet = cadnet(pfile, "VDD_CORE");
data = cadnetData(cnet); % Struct with .Surfaces, .Pins, .Vias, .Traces
s = shapes(cnet); % Same struct as cadnetData (equivalent call)
% List and inspect components
tbl = componentList(pfile);
comp = component(pfile, "U1");
pins = componentPinData(comp); % Returns pinsData array (see below)
% List and inspect parts (component types)
tbl = partList(pfile);
p = part(pfile, "IC6ANT");
cdata = componentData(p); % Components that use this part type
% List padstacks
tbl = padStackList(pfile);
% Layer-level inspection (metal layers only — use pfile.MetalLayer for valid indices)
lyr = layer(pfile, pfile.MetalLayer(1));
ldata = layerData(lyr);
% Search for components in a cadnet
results = findComponents(cnet);
results = findComponents(cnet, 'ComponentType', 'IC');
形状データ構造
shapes(cnet) と cadnetData(cnet) は同等で、どちらも次のフィールドを持つ構造体を返します。
| フィールド | 型 | 内容 |
|---|---|---|
.Surfaces | antenna.Polygon 配列 | 銅箔のベタ塗り領域と塗りつぶし |
.Pins | antenna.Polygon 配列 | パッド形状 |
.Vias | antenna.Polygon 配列 | ビアのバレル形状 |
.Traces | antenna.Polygon 配列 | 配線されたトレースセグメント |
s = shapes(cnet);
s.Traces(1).Vertices % Vertices of first trace segment
numel(s.Surfaces) % Number of copper pours
layerData(lyr) は同じ構造体形式を返します。各 antenna.Polygon は .Vertices プロパティ(Nx3 の double 型)を持ちます。
componentPinData — ピンの位置とプロパティ
componentPinData(comp) は pinsData 配列を返します。各要素には次のプロパティがあります。
| プロパティ | 型 | 説明 |
|---|---|---|
Center | 1x2 double | ピン中心の XY 位置(基板の単位) |
PinNumber | char/string | ピン番号/名前 |
CadnetName | char/string | ピンが接続するネット |
PinShape | char | 形状の種類(例:'Rect'、'Circle') |
StartLayer | double | ピンがまたがる最初のレイヤー |
StopLayer | double | ピンがまたがる最後のレイヤー |
Length | double | パッドの長さ |
Width | double | パッドの幅 |
Diameter | double | パッドの直径(円形パッドの場合) |
Vertices | Nx3 double | パッド外形の全頂点 |
comp = component(pfile, "U1");
pins = componentPinData(comp);
pins(1).Center % [x, y] in board units (inches for ODB++)
pins(1).CadnetName % Which net this pin connects to
pins(1).PinNumber % Pin identifier
座標の単位: ODB++ のインポートでは、ピンの位置(.Center)と形状の頂点は基板のネイティブ単位(通常はインチ)で表されます。pcbComponent で使用するには、25.4e-3 を掛けてメートルに変換してください。
ネットをまたいで回路経路をたどる
findComponents と componentPinData を使用すると、コンポーネントを共有するネットをたどれます。
pwr_net = cadnet(pfile, "+PWR");
pwr_comps = findComponents(pwr_net); % Table: ComponentIndex, Refdes, PinList, ComponentType, Part
% Open a component and discover its other nets
q4 = component(pfile, string(pwr_comps.Refdes(9)));
q4_pins = componentPinData(q4);
for i = 1:numel(q4_pins)
fprintf('%s.%s -> %s at [%.3f, %.3f]\n', "Q4", ...
string(q4_pins(i).PinNumber), string(q4_pins(i).CadnetName), ...
q4_pins(i).Center(1), q4_pins(i).Center(2));
end
% Follow Q4's output net to find the next component
next_net = cadnet(pfile, string(q4_pins(1).CadnetName));
next_comps = findComponents(next_net);
インポートした形状をカスタム設計で使用する
Gerber の形状をインポートし、ブール演算を使用してほかの形状と組み合わせます。
% Import a CSRR pattern from Gerber
reader = gerberRead('csrr_pattern.gbr');
shp = shapes(reader);
csrr = shp(1);
verts = csrr.Vertices;
cx = (max(verts(:,1)) + min(verts(:,1))) / 2;
cy = (max(verts(:,2)) + min(verts(:,2))) / 2;
csrr = translate(csrr, [-cx -cy 0]);
% Use as DGS or combine with other geometry
ground = traceRectangular(Length=30e-3, Width=20e-3);
groundWithSlots = ground - csrr;
pcb = pcbComponent;
signal = traceRectangular(Length=25e-3, Width=3e-3);
sub = dielectric("FR4");
sub.Thickness = 1.6e-3;
pcb.Layers = {signal, sub, groundWithSlots};
pcb.BoardShape = ground;
pcb.BoardThickness = sub.Thickness;
show(pcb);
インポートから解析までのワークフロー
%% Import
S = stackUp;
S.Layer1.Thickness = 0.1e-3;
S.Layer2 = 'myFilter.gtl';
p = PCBReader('StackUp', S);
pcb = pcbComponent(p);
%% Configure for analysis
pcb.FeedDiameter = 0.5e-3;
pcb.FeedLocations = [-10e-3 0 1 3; 10e-3 0 1 3];
pcb.Conductor = metal("Copper");
show(pcb);
%% Analyze
freq = linspace(1e9, 10e9, 51);
sp = sparameters(pcb, freq, 'SweepOption', 'interp');
rfplot(sp);
よくあるエラーの診断
| エラー | 原因 | 修正方法 |
|---|---|---|
| "File not found" | パスが間違っているか、サポートされていない形式です | パスを確認してください。クロスプラットフォームのパスには fullfile() を使用してください |
| "Unrecognized file format" | ファイル拡張子と内容が一致していません | 形式を明示的に指定してください:pcbFileRead(file, 'FileType', 'ODB++') |
| インポート後のスタックアップの不一致 | レイヤー数または材料が設計と異なります | pcbFileRead のインポートの場合:stackUp(pfile) を呼び出して、インポートされたレイヤーテーブルを確認してください。Gerber のインポートの場合:stackUp コンストラクターがソース設計と一致していることを確認してください |
.brd のインポート時の extracta エラー | Cadence Allegro extracta が設定されていません | まず extractaSetup() を実行してから、再試行してください |
cadnetList の結果が空 | 基板に配線済みネットがないか、形式のバージョンが正しくありません | ネイティブの EDA ツールで基板を開き、配線が存在することを確認してください |
注意点
-
座標の位置合わせ:異なる CAD ツールからの Gerber ファイルでは、原点が異なる場合があります。レイヤーを結合したり、給電点を追加したりする前に、必ず確認して中心に移動してください。
-
単位の不一致:Gerber ファイルの単位は mil または mm の場合があります。RF PCB Toolbox は内部的にメートルを使用します。インポートしたジオメトリが大きすぎたり小さすぎたりする場合は、ソースファイルの単位設定を確認してください。
-
gerberRead は形状ではなく PCBReader を返します:
gerberReadはPCBReaderオブジェクトを返します。shapes(P)を呼び出して、金属レイヤーのポリゴンを抽出してください。リーダーに対してP.Verticesやshow(P)を直接使用しないでください。 -
stackUp コンストラクターでのレイヤーの順序:
stackUpコンストラクターでのレイヤー番号は上から始まります。Layer1は通常、基板の上の空気層で、Layer2は最上層の銅層です(Layer1は空気層のため、物理的な奇数番号の金属レイヤーは偶数番号のstackUpレイヤーに対応します)。 -
layer()が受け付けるのは金属レイヤーのインデックスのみです。layer(pfile, idx)には金属レイヤー番号を指定する必要があります。有効なインデックスを取得するにはpfile.MetalLayerを使用してください。誘電体レイヤーのインデックスを渡すと(たとえば、レイヤー 1 が誘電体の場合にlayer(pfile, 1)を指定すると)、「Value must be a member of this set: ...」というエラーが発生します。 -
componentDataはcomponentではなくpartにあります。 部品タイプを使用するコンポーネントの一覧を取得するには、p = part(pfile, partName)としてからcomponentData(p)を呼び出してください。componentオブジェクトにはcomponentPinDataとshapesがありますが、componentDataはありません。 -
stackUpの名前の衝突。S = stackUp(引数なし)は、Gerber インポートのレイヤー構造を定義するためのコンストラクターオブジェクトを作成します。su = stackUp(pfile)はpcbFileReadのオブジェクト関数で、材料の詳細を示すテーブルを返します。これらは目的の異なる、まったく別の型です。混同しないでください。 -
インポートしたジオメトリが大きい場合:基板全体の Gerber をインポートすると、データが非常に大きくなる場合があります。EM 解析では、基板全体を解析するのではなく、対象領域のみを抽出してください。
-
.brd をインポートする前に、必ず extracta のパスを確認してください。 ユーザーが
.brdファイルを指定した場合は、まずextractaSetup()(引数なし)を実行して、設定済みかどうかを確認してください。[]が返された場合は、Cadence のextracta.exeのパスをユーザーに尋ね、extractaSetup(path)を実行してください。一般的なパスはC:/Cadence/SPB_<version>/tools/bin/extracta.exeです。これを設定しないと、.brdのインポートは失敗します。 -
パッケージと基板でワークフローは同じです。 ODB++ と Allegro のファイルには、PCB だけでなく IC パッケージが含まれる場合があります。
pcbFileReadはどちらも同じように処理します。内容を決めるのは形式であり、関数名ではありません。
関連するスキル
matlab-write-pcb-layout— 設計を Gerber 製造ファイルにエクスポートしますmatlab-assemble-pcb-layout— 形状からカスタム PCB 構造を構築しますmatlab-analyze-em— インポートした基板で EM 解析を実行しますmatlab-manage-pcb-material— インポートしたスタックアップの基板材料を設定しますmatlab-analyze-pcb-pdn— インポートした基板で PDN 解析を実行します
Copyright 2026 The MathWorks, Inc.