回路の接続の検証をするプログラム
回路の接続情報をプログラムに取り込む事ができると、回路の接続の検証をプログラムで行う事が可能になります。いろいろな検証が可能ですが、この記事では、一つの例としてシンプルな検証の例を紹介します。
実際の仕事の経験を詳しくまとめる
プログラムを作成する際に最初にする事は、「何をプログラムにやってもらうか」を決める事です。 要は、プログラムで何をするかという事になりますが、これが決まらないとプログラムを書くことはできません。
今回は、回路設計支援というテーマで考えていますので、回路設計をする上で困っていることをまず考えるのが最初のステップということになります。
回路設計で困ることというと大きく二つの事があります。
* 時間がかかる
* 設計のミスをする
が一般的に設計で問題になる事です。時間がかかるのは、時間をかければ何とかなる問題ですが、設計ミスは致命的な問題の一つです。
時間の問題は、プログラムで処理できる仕事であれば、短縮することは可能です。従って、時間がかかる事の場合は、プログラムで処理ができないかを考えて、処理ができるという事になれば解決できます。
逆に、設計ミスはもう少し問題が複雑です。プログラムで対処できるかどうかを考える前に、どの様なミスが多く発生していて、どうすればそのミスを見つけられるかを考える必要があります。プログラムも万能ではないので、プログラムで解決できない問題もあるからです。
つまり、最初の仕事は、今までの仕事のやり方、結果の分析という事になります。 今回は回路設計なので、回路設計の作業の中で、時間がかかるもの、これまでの設計ミスの傾向と原因をできるだけ具体的に挙げていくという作業をします。
次に、洗い出した項目のうち、プログラムで対処可能かどうかを見極めるという作業になります。
回路設計でよくあるミスは?
回路設計で時間がかかる作業は、回路を考えてその回路を入力する作業です。当たり前ですが、設計作業そのものです。最近は、AI の発達で、コンピュータでもある程度処理が可能になっていますが、この作業はシンプルなプログラムで対応できる作業ではないので今回はプログラムで処理する対象からは外します。
プログラムで対処可能な部分が多いのは、入力した設計データに問題が無いかを検証する作業です。これも、対応できないものもたくさんありますが、意外にシンプルなプログラムで可能なものもあります。
一つは、信号名などの入力ミスです。 既に紹介していますが、回路図では接続は「線」で表します。同じページで回路図が書ける場合には、接続される部品のピン同士を線で繋いで線に名前をつけます。これが「ネットの名前」になります。しかし、同じページで回路を書ききれない場合には、複数のページにわたって回路を入力する必要があります。この場合は、線につける名前を同じにすると設計上は接続された状態とした扱われます。例えば、LED につながる配線のネットの名前が「POWER_LED0」だとします。このネットは、LED に電源を供給する信号だとします。LED のページには LED だけがあって、別のページに電源の回路がある場合、LED に接続する電源の接続に、「POWER_LED0」と名前をつければ、設計上接続された事になります。ところが、どちらかのネットの名前を打ち間違えて「POWER_LEDO」とした場合はどうでしょうか?
文章だとわかりにくいので、もう少し詳しく書くと本来は、ネットの名前の最後の文字が「0(数字のゼロ)」のはずが、入力ミスで「O(アルファベットの O)」になっているミスです。 この場合、見た目は似ていますが、実際は別の文字なので、コンピュータは別の接続(信号)として扱うので、ネットリスト上は別のネット、つまり、接続されないというミスになります。
この手のミスは、回路図を眺めてチェックをしても人間の目では見落とす可能性も高く設計上のエラーになりやすい事例です。
シングルポイントネット
上で挙げた様なケースは、全てではありませんが、ある程度プログラムで見つける方法が存在します。たまたま LED と電源が別のページに書かれているので、これらのピンが接続されないと、ネット(接続)されているピンが、LED 側も電源側も「一つ」だけという状態になります。
通常の回路の接続は、二つ以上のピンを繋ぐという事なので一つというケースは「エラーの可能性が高い」と考える事ができます。時折、部品で全く接続しないピンというのも存在しますが、その場合は、回路図上は線を引かずに何も繋がずに放置する場合がほとんどです。
線を描いて接続するピンが一つの状態はエラーの可能性が高く、「シングルポイント接続」と呼ばれています。こうした接続をプログラムで見つけてレポートすると、事前にミスを発見して修正できる可能性が高まります。実際のチェックもプログラムで行うので一瞬でできるので、チェックの効率化や時間の短縮にもつながります。
Python での実装例
シングルポイント接続をチェックするプログラムは簡単に実装できます。 前回紹介した要領でネットリストのデータを読み込んだ場合には以下の様なコードで簡単にチェックできます。
def check_single_point(nets):
result = []
for net in nets:
if len(net["pins"]) == 1:
result.append(net)
return result
「nets」は、ネットリストのファイルから読み込んだネットリストのデータです。この関数にデータを渡すと、各ネット(接続)のピンの数をチェックして、ピンの数が「1」、つまり、接続されているピンが一つだけのネットを「result」という配列(array)に入れて返してくれます。
「len()」は配列(array)の要素の数を返す関数なので、これを利用すれば難しいコードは一切書く必要がありません。
あとは、前回した要領で、ネットリストのデータを読み込んで、この関数を呼び出して結果を表示したり、ファイルに保存して、必要なネットの接続を再確認すれば、ミスを簡単に発見して事前に修正する事ができます。
まとめ
この記事では、回路設計でよくあるミスのシングルポイント接続をチェックする例を紹介しました。この例では、シングルポイントの接続をチェックしているだけですが、これを応用すると他にもいろいろなチェックが可能です。
今日、コンピュータのインターフェースの接続は高速信号が多く、その殆どが一対一(point-to-point)の接続なので、ネットの名前に区別できるような名前をつけて、接続数が2でない場合は警告を出力する様にすると、こうした接続のチェックもほぼ同じ方法で可能です。
また、メモリなどの接続も、サポートするメモリモジュール(DIMM)の数やメモリチップの数で接続数が決まるので同じような方法で接続数をチェックできます。
プログラム自体は非常にシンプルなので、プログラミングの初心者でも簡単に実装できます。
コンピュータで処理できる仕事はたくさんありますが全ての仕事の分野に便利なプログラムが用意されているわけではありません。あなたのプログラミング以外の仕事の経験を生かして、コンピュータで仕事の一部でも処理できる様にすれば、プログラミングの初心者でも実用的で役に立つプログラムを開発する事が可能です。