高ピン数の回路図シンボルを迅速に作成する

Mark Harris
|  投稿日 2019/12/31, 火曜日  |  更新日 2021/01/4, 月曜日
高ピン数の回路図シンボルを迅速に作成する

私のオープンソースAltiumコンポーネントライブラリには、数百の回路図シンボルが含まれており、10万以上のコンポーネントを提供しています。部品のピン数が多い場合でも、Altiumを使用して数分で回路図シンボルを作成できると伝えると、多くの人が驚きます。この記事では、Altiumのツールをいくつか活用して、独自のシンボルを迅速に作成する方法をお見せしたいと思います。

前提条件

始める前に、いくつかのものが必要です:

  • 良いデータシート、またはプレーンテキストのピン定義ファイル。この記事ではPDFデータシートを見ていきます。
  • 正規表現の知識。私は.NETフレーバーを好んで使用していますが、いくつかの便利な機能があります。
  • 何らかのスプレッドシートアプリケーション。私はGoogleシートを使用しますが、Microsoft ExcelやOpenOfficeも問題なく機能します。

シンボルの開始

この記事で使用する部品を探すために、Digi-Keyにアクセスし、在庫ありのARM Cortex Mシリーズのマイクロコントローラで、オンボードFLASHを搭載し、GPIOのピンが100以上あるものを組み込み - マイクロコントローラカテゴリーで探しました。次に、利用可能な数量で並べ替えを行い、勝者はNXPのMK64FN1M0VLQ12でした。LQFP-144パッケージの素敵なマイクロコントローラのようです。このパッケージのすべてのピンの説明をコピー&ペーストするのは、時間がかかり、退屈で、間違いが発生しやすいので、それはしません!

この部品のデータシートを見ると、ピン配置表(5.1、68ページ)はこのプロセスには理想的ではありませんが、それでOKです—データシートは、シンボルを作成する際に理想的なものであることは稀です。

このコンポーネントを作成する方法に詳しく入る前に、記事を書く際に一歩も見逃さないように、自分で実際に試してみました。この144ピン部品を作成するのにちょうど7分以上かかりましたが、私にとっては少し遅いペースです。データシートのデータがそんなにクリーンアップする必要がなければ、4-5分程度で済んだでしょう。しかし、私はこのようなシンボルをほぼ500個作成してきたので、作業を迅速に進めるのに役立つ経験が少しはあります!

Altiumで最初に行うことは、ファイル -> 新規 -> ライブラリ -> スキーマティックライブラリに移動して新しいスキーマティックライブラリを作成することです。


次に、新しいコンポーネントに四角形を配置します。コンポーネント本体のための四角形を最初に配置することで、後でピンの後ろに移動させる手間を省くことができ、少し時間が節約できます。四角形のサイズは問いません。私が作成したものは、最終的なコンポーネントには小さすぎます!

四角形の後、最初のピンを作成します。これが他のすべてのピンの種になります。

ピンのプロパティを後で使いやすく設定することが望ましいので、ピン番号(デザイネータ)を1に設定し、名前を「P1」としました。名前の数字部分は自動でインクリメントされ、文字Pは後のステップでこれがピン名であることを知らせてくれます。

今のところ、こんな感じになっているはずです:

しかし、143ピン足りないので、修正しましょう。まず、ピンをコピーします。

次に、編集メニューから強力な「ペースト配列」機能を使用します。

143個のピンが必要なので、アイテム数に143を入力し、垂直が-100milに設定されていることを確認してください。これにより、クリックした場所から下向きに(上向きではなく)ピンが生成されます。

ここには多くのピンがあるので、ズームアウトして、回路図シンボルの高さ7000mil付近をクリックすることをお勧めします!

ピンを列に並べましたが、これで144ピンを使用できるようになりました!

ピンデータの設定

これらのピンがすべてあっても、ピンに名前を追加する必要があるため、シンボルにとってあまり役に立ちません。これを行うために、データシートに移ります。

ピンテーブルを選択し、すべてのデータをnotepad++ドキュメントにコピーして貼り付けます。見た目はひどいものになるでしょうが、心配しないでください!


先に述べたように、これは最も理想的なデータシートではありませんので、何かをする前に貼り付けたデータを少し整理したいと思います。主に、多くの機能が名前に/や_が含まれる複数の行に分割されています。出発点としての質の高いデータを持っていることが、後で生活を楽にするでしょう。

検索と置換を使用して_\r\nを探し、それを_に置き換えます。拡張検索モードは、_が機能を二行に分割している名前を見つけ、それを単に_に置き換えます。すべて置換をクリックして、一度にすべての変更を行います。


/\r\nと同様に、/に置き換えます。

データシートには「DISABLED」という単語が多くの列にありますので、「DISABLED 」(最後にスペースあり)を見つけて、何もないものに置き換えるつもりです。

ピンと説明の表を作成する

さて、この文字と数字のごちゃ混ぜを、ピン番号と説明のきれいな表に整理するために、正規表現に取り組みます。幸運なことに、ピン表の最初の列に関心のあるパッケージがあるため、正規表現を少し簡単にすることができます。

RegexStormの正規表現テストページを使用して、ピンリストを処理するつもりです。構文の復習が必要な場合は、彼らの正規表現リファレンスも確認できます。

さらなるデータのクリーンアップ

データにマッチングする前に、現在のように複数の行に分かれているのではなく、ピンの説明項目を単一の行にまとめておくと良いでしょう。RegexStormで簡単なパターンを使用して、作業中のテキストを修正できます。

パターン\r\n(\D)を使用して、数字に続かない新しい行を見つけます(\Dは「数字ではない」のための正規表現シーケンスです)。「数字ではない」と一致したものは、グループに入れる必要があります。これは括弧を通じて行われるので、一致したものをその文字だけで置き換えることができます。したがって、置換は$1となります。$1は一致した最初のグループを指定します。

置換をクリックした後、コンテキストタブには修正された入力データが含まれているので、それをコンテキストタブから入力にコピーして、さらに作業を行うことができます。

しかし、まだ終わりではありません。ピン名、デフォルト機能、ALT0機能がすべて同じ場所がたくさん(127箇所)あります。ピン5をVDD VDD VDDと作りたくはありませんよね?ピン5がVDDと呼ばれるだけで十分です。

これらの重複した名前をクリーンアップするために、次のパターンを使用して正規表現を使用することもできます:
\b([A-Z\d/_]{3,})\s*\1\s*\1? *

これは単語の境界を\で見つけ、次に3つ以上の大文字、数字(\d)、スラッシュ、またはアンダースコア文字のグループに一致します([A-Z\d/_])。その後、\s*で任意の数の空白文字を探し、最初のグループと同じもの(\1)、もう一つの任意のスペース、そして最後に、オプションで(?を使って)最初のグループに続いて任意の数のスペースがあります。この方法では、EE EEのように繰り返されるピンは一致しませんが、VDD VDD VDDのように同じものが2〜3行続く場合は一致します。

これを「$1 」と置き換えることができます。最後に、$1の後にスペースがあります。最終的に、これを入力ボックスにコピーできます。


検索パターン

これを見つけるパターンを一致させようとしています:
115 C7 C6 82 PTC10 ADC1_SE6b
ADC1_SE6b
PTC10 I2C1_SCL FTM3_CH6 I2S0_RX_FS
FB_AD5

または

89 F10 D11 — PTB8 PTB8 UART3_RTS_b
FB_AD21

私たちが関心を持っている2つの主な違いは、そのパッケージにピンがない場合に存在する「—」文字です。

私のマッチ式は次のとおりです:
(?:(?<Pin>\d{1,3})\s+(?:[A-Z\d—]{1,2}\s+){2}(?:[\d—]{1,3}\s+))

これはテーブルビューでうまくマッチしています。今、私はピンのためのテーブルを持っており、データシートからのピン番号セクション全体をマッチさせました。これは、他の何ものも説明になるということを意味します。

その表現は何を意味しているのか?

私は約20年前、10代の頃にPERLでプログラミングをしていた時から正規表現を使ってきましたので、かなり慣れています!初めて正規表現を使う方や、復習が必要な方のために、この最初のマッチを分解して説明しましょう。

(?:\b(?<Pin>\d{1,3})\s+(?:[A-Z\d—]{1,3}\s+){2}(?:[\d—]{1,3}\s+))

(?:) は非キャプチャグループを意味します。これにより、RegexStormのテーブルビューに結果が表示されないように、すべてを一緒にグループ化できます。求めるものを得るためには、物事を一緒にグループ化することがかなり重要です!

\bは単語の境界を示します。例えば、新しい行、スペース、タブなどです。これにより、
LPTMR0_ALT1
74 L12 J11 52 

の末尾の1がALT1と一致することを防ぎ、最初の3つのデザイネータが一致することを防ぎます。

(?<Pin>\d{1,3})は、?<Pin>部分を通じてPinという名前のグループをキャプチャします。すべての正規表現エンジンが名前付きグループをサポートしているわけではないため、これがRegexStormを使用する理由の一つです。そのグループは1から3({1,3})桁の数字(\d)に一致します。私たちのピン番号は常に1から3桁(1から144まで)なので、それだけを探す必要があります。

\s+ は1つ以上の連続する空白文字のどのグループにも一致します。この方法では、データシートからコピーしたデータにスペース、タブ、または改行が含まれていても、複数のスペースやタブがあってもすべて一致します。

次に、2つのBGAパッケージピン指定子に一致させたいです。(?:[A-Z\d—]{1,3}\s+){2} これにより、最後の量指定子 ({2}) は、非キャプチャグループの2つを求めていることを示します。そのグループは、角括弧内の1つから3つの任意のものを見つけます。正規表現の角括弧は「ここにあるものなら何でも一致」という意味です。私たちの場合、すべての大文字(A-Z)、すべての数字(\d), およびデータシートでそのパッケージオプションにその機能がないことを示すために使用されるエムダッシュが含まれます。最後に、Pinの後と同様に、1つ以上のスペースがあります。

(?:[\d—]{1,3}\s+)は、最終的なピン番号に一致しています。基本的にはピンマッチと同じですが、パッケージにその機能がない場合に備えて、emdashも許容する必要があります。

正規表現に慣れていない場合でも、心配しないでください。数年後には、それらを読むときに脳が溶けることはなくなります!

ピンの説明を見つける

説明に一致させるために、現在の構文に追加してすべてを1つのグループにすることができます。これが私のパターンです:
(?:\b(?<Pin>\d{1,3})\s+(?:[A-Z\d—]{1,3}\s+){2}(?:[\d—]{1,3}\s+)(?<Desc>[\w\d_/\s]+?\b(?=\d{1,3}\b)))

説明部分にのみ一致するために追加されたパターンは:
(?<Desc>[\w\d_/\s]+?\b(?=\d{1,3}\b))

最後に、比較的クリーンなデータを含む144のマッチがある表を持っています。これで、Googleスプレッドシートにコピー&ペーストできます。

ピンデータの設定

Altium Designerに戻ると、作成したピン配列にいくつかのデータを取り込むことができます。スキーマティックシンボルウィンドウで、ピンをすべて選択します(ただし、四角形は除く)。

Altiumの右下のウィンドウにあるパネルボタンをクリックして、SCHLIBリストパネルを開きます。

すると、スキーマティックシンボルの選択されたすべてのピンが表示されます。

グリッドのどこかを右クリックすると、編集モードに切り替えることができます。

次に、グリッドをクリックしてCtrl-Aを押すか、右クリックしてすべて選択を選びます。

その後、RegexStormからコピーしたテーブルよりも少し下にあるスプレッドシートにすべてをコピー&ペーストします。

これで、スプレッドシートに2つのテーブルがあるので、RegexStormからコピーしたデータのピン番号列をAltium Designerのピン番号に上書きし、説明列についても同様に行います。このシンボルはたまたま、作業中のパッケージのすべてのピンが順番になっていますが、これが常に当てはまるわけではありません。説明とピン名の不一致を避けるために、両方の列を単純に置き換える方が簡単です。

Altium Designer®にこのデータを戻す前に、ライブラリの標準に従って名前列のスペースを/に置き換えてすばやく修正したいと思います。これを行うには、Altium Designerのテーブルで列全体を選択し、次に検索と置換ツールを開いてスペースを検索し、スラッシュで置き換えます。選択したセルの特定の範囲に検索が設定されていることを確認した後、「すべて置換」をクリックします。


これで、Altium Designerに戻す準備ができたピン名と指定子のテーブルができました。テーブル全体を選択してから、SCHLIBリストテーブルに貼り付けてください。テーブル内のすべてを上書きし、回路図シンボルエディターで大混乱を引き起こします!

最も重要なことは、Altium Designerにデータがあり、データシートからピンごとにすべての詳細をコピーしようとするよりも、はるかに少ない作業で、エラーの可能性も低かったということです。

ピンの迅速なグルーピング

回路図のシンボルシートの周りにすべてのピンをまとめて配置するのが好きです。それによって、シンボルを単一のパーツとして保持するか、または複数パーツのシンボルを作成する必要があるかを決定できます。この144ピンのパーツについては、複数パーツのシンボルにする必要がありますが、それでもすべてをきれいにまとめて、各新しいパーツにコピー&ペーストするためのピングループを作成します。

SCHLIBフィルターパネルを使用して、一度にピングループを選択できます。ピンをすばやくまとめるツールはありませんが、すべてのピンを選択していれば、回路図シートの空いているエリアにすべてをドラッグして、手動で並べ替えるのは十分に簡単です。

VSSやVSSAなどのすべてのピンを見つけるには、フィルター:Name LIKE ‘VS*’ を使用できます。これはワイルドカードマッチを実行して、それらのピンをすべて選択します。

他の電源ピンを掴むために Name LIKE ‘VD*’ のようなフィルターを繰り返し使用できます。このコンポーネントのポートピンはPTA/PTB/PTCなどで始まるので、同じスタイルのフィルターを使用して、ポートAのピンなどをすべて見つけることができます。

少しの早い整理の後、今私のピンはすべてグループ化されました。


ADC、DAC、電圧、グラウンド、USB、クリスタルピンをメインコンポーネントパートに全て配置したいので、このプロセスの最初のステップとして作成した長方形にそれらを移動し、すべてのピンが収まるように長方形のサイズを変更しました。私は常にVDDピンを左上に、VSS/GNDピンを左下に配置し、シンボル上の位置よりも機能によってピンをグループ化します。これにより、物理的なレイアウトをコピーしようとするよりも、回路図でより使いやすいシンボルができると感じています。

パーツの追加

メインパートが完成したので、回路図シンボルにサブパートを追加する必要があります。ツール -> 新規パートに移動して、回路図シンボルに新しいパートを追加します。

新しいパートは、SCHライブラリパネルにメインコンポーネントの下にネストして表示されます。

サブパートを持ったら、各サブパートに長方形を作成し、メインパートからピンを切り取って貼り付けるだけです。巨大なマイクロコントローラーを論理的なパートに分割することで、エンジニアは1つの巨大な回路図シンボルによって全シートが支配されることなく、よりクリーンで整頓された回路図を作成できます。

さらなるクリーンアップオプション

上で作成したシンボルはあなたのライブラリにとって完璧かもしれませんが、私は物事をやり過ぎることを好みます。もし名前をさらに整理したい場合や、n_で始まるまたは_bで終わる機能にアクティブローバーを追加したい場合に参照できるよう、いくつかの正規表現をまとめました。これらのパターンを手元に用意しておくことで、わずか数分の追加作業でより高品質なシンボル名を得ることができます。また、これらを自分のクリーンアップパターンの基礎として使用することもできます。

上のスクリーンショットでピン上の重複した機能を手動で削除しましたが、多すぎて手作業で効率的に重複を削除できない場合は、自動的に行うことができます。

まず、「PTA12」のような初期機能の重複を削除します。次の正規表現を使用してください:
^([A-Z\d/_]{3,})/(?<inbetween>(?:(?:[^/])+/){1,5})\1/?
オプション -> 複数行オプションを使用します。これにより、入力フィールドの各行が独自のエンティティとして扱われ、^文字が行の開始に一致するようになります。
一致したものを次で置き換えます:
$1/${inbetween}

まず、最初の関数の後にある関数を次の正規表現で置き換えます:
/([A-Z\d/_]{3,})/(?<inbetween>(?:(?:[^/])+/){1,5})\1/?
複数行オプションをオフにすることもできますが、オンのままにしておいても表現の動作を妨げることはありません。再び、一致した部分を次で置き換えます:
/$1/${inbetween}

一致する部分が見つからなくなるまで置き換えを続けます。この部分については、重複をすべて削除するために3回実行する必要がありました。

重複を置き換えるための表現が2つあるのは、表現が一致を探し始める場所を知る必要があるからです。/RMII0_RXER/MII0_RXER/をただ/RMII0_RXER/に置き換えたくないでしょう。なぜなら、2番目の関数は最初の関数と同じで、Rが違うだけだからです。2つの関数を使用することで、/を開始文字として使うか、行の始まりとして使うことができます。

関数の名前にアクティブローバーを追加することは、n_や_bを関数に付けるよりもAltium Designerの標準に沿っています。これを行うには、各文字の後に\を追加し、先読みグループを使って正規表現がそれらを見つけることができます。

_bで終わる関数には、次の表現を使用してください:
([^/](?=[A-Z\d_]*_b[/\r]))
そして、すべての一致を次で置き換えます:$1\

次に、表現を使用してください:
\_b
そして、すべての一致を次で置き換えます: \

n_で始まる関数には、次の表現を使用できます:
((?<=/n_[A-Z\d_]*)[^/])
そして、すべての一致を次で置き換えます: $1\

その後、次の表現を使用して検索する必要があります:
n_(\w)
そして、次で置き換えます:$1
関数名の先頭からn_を削除するためです。

正規表現は、データシートからAltium Designerでシンボルを作成している場合に非常に強力なツールです。少数の表現を使用するだけで、PDFからの意味不明なコピー&ペーストを使えるスプレッドシートに迅速に変換することができます。新しいユーザーからは、最初に見たときには記号と数字の寄せ集めに見えるかもしれないため、構文が非常に複雑に見えると言われていますが、実際には非常によく定義された構文であり、学ぶのはかなり簡単です。データシートからコピーしたテキストをピンテーブルにクリーニングするのに数時間を費やした後、構文に慣れてくるでしょう。

最終的に

この特定の部品は、この記事を作成するために実質的にランダムに選ばれました。データのクリーニングには多くの時間が必要でしたが、実際にAltium Designerにデータを取り込む時間よりも長くかかることがありますが、回路図シンボルの作業方法について新しい方法をいくつか示すことができたことを願っています。

回路図シンボルをより速く作成するための提案があれば、他の人があなたの経験を活用できるように、以下にコメントで提案を残してください。

Altiumのガイドをもっと見るか、業界の専門家マーク・ハリスによるさらなる読み物をお探しですか?次のPCB設計でAltiumがどのようにお手伝いできるかについてもっと知りたいですか?Altiumの専門家に相談してください。

筆者について

筆者について

Mark Harrisは「技術者のための技術者」とでも言うべき存在です。エレクトロニクス業界で12年以上にわたる豊富な経験を積んでおり、その範囲も、航空宇宙や国防契約の分野から、小規模製品のスタートアップ企業や趣味にまで及んでいます。イギリスに移り住む前、カナダ最大級の研究機関に勤務していたMarkは、電子工学、機械工学、ソフトウェアを巻き込むさまざまなプロジェクトや課題に毎日取り組んでいました。彼は、きわめて広範囲にまたがるAltium Designer用コンポーネントのオープンソース データベース ライブラリ (Celestial Database Library) も公開しています。オープンソースのハードウェアとソフトウェアに親しんでおり、オープンソース プロジェクトで起こりがちな日々の課題への取り組みに求められる、固定観念にとらわれない問題解決能力を持っています。エレクトロニクスは情熱です。製品がアイデアから現実のものになり、世界と交流し始めるのを見るのは、尽きることのない楽しみの源です。

Markと直接やり取りする場合の連絡先: mark@originalcircuit.com

関連リソース

関連する技術文書

ホームに戻る
Thank you, you are now subscribed to updates.