デジタル回路シミュレーション(1) | 佐藤武久のブログ 「日本・モンゴル往来日記」

デジタル回路シミュレーション(1)

2015/01/25記(旧記事を編集し再掲載)
 
日刊工業新聞社の「電子技術」誌に1996年4月号から1999年1月号まで22回にわたり連載した記事の第15回の一部を抜粋再編集したものです。

第15回
   デジタル回路シミュレーション(1)

回路設計の実務では、パソコンベースの回路シミュレータとしてロジック回路のOrCADやアナログ回路のPSPICE,MicroCAPなどがよく使用されている。しかし電子回路の教育用や個人の学習用として使用するには価格もさることながらその操作法もかなりの習熟を必要とし決してなじみやすいものではない。
プリント基板の作成まで進める実務用ではなく、電子回路理論の自習用や教育用が主な用途であればフリーウェアやシェアウェアで操作もドローソフトを扱う程度の易しいものがある。回路に関する文献を読む場合に、手元で動作させて回路の振る舞いを確認しながら読み進めば一層理解が深まるだろう。
そこで今回はデジタル回路シミュレータとして「LogicSim 3.0b」を取り上げ、その操作法の特徴と応用例について学習する。これはMac版のみであるがWindows95用には「MultiMedia Logic」というよく似たソフトがある。

LogicSim について
LogicSim はデジタル回路をシミュレートするアプリケーションソフトで、クラリスドローのようなドローソフトに似た使いやすいGUIを持っている。
回路は標準部品(ゲート、バッファー、フリップフロップ、 LED 、スイッチなど)とできあいの回路を編集して作成するモジュールを含むことができ、モジュールを用いることで一層複雑な回路を組み立てることができる。
LogicSim はまた「Signal」ウインドウを持ち、回路のノードにおける信号をオシロスコープのように画面に表示する。
遅延時間は固定ではなく、すべてのゲートに任意の遅れを設定することができる。
LogicSimの入手はArnold' Web Page(http://www.planete.net/~amasson/logicsim.html)より最新版をダウンロードできる。ポストカードウェアなので使って気に入ったら作者に絵はがきを送るようにしよう。
 
A local copy logicsim-68k-3.0b.sit [288k] may be faster to download.

簡単な操作例 
LogicSim を起動するとメインウインドウ(図1 メインウインドウ)とHelp, Info,Commandsの3つのウインドウが開く。メインウインドウの左側は標準部品のパレットである。
パレットのそれぞれの部品の上にマウスを動かすとHelpウインドウに内容が表示され選択時の確認に役立つ。
 
イメージ 1

 スイッチ、クロック、2つの LED と XOR ゲートを ドラッグアンドドロップし 、下の図2 未結線部品の配置のように未配線の部品を配置してみよう。
 
イメージ 2

 オプションキーを押しながらマウスをゲートの出力ワイヤに動かし、オプションキーを押し続けたままLEDの入力端子にドラッグし、二つのデバイスを結線する。ワイヤは出力から入力に向かってのみ結線される。
配線を描き終わったら次に部品にラベル名を書き込む。対象部品を選びCircuitメニューからComponent Nameダイアログを開いてキー入力する。これでシミュレーションを実行できる回路図が完成する(図3 結線済み部品)。
 
イメージ 3


必要があれば対角線状のワイヤ配線を直角に整形する。シフトキーを押したままワイヤをクリックするとコーナーができるので任意位置にドラッグすればよい。
最後にクロック部品を選び、CircuitメニューからComponent Options ダイアログでそのPeriodを10にセットする。
WindowsメニューからNotesを選んで、短い記述をタイプして回路と一緒に保存しておけば将来の参考になる。
ここで回路をいったん保存してから、Simulationウインドウから RUN を選ぶと背景が黄色にかわる。そこで、スイッチとクロックをマウスでクリックすると出力のLEDが赤く点滅しシミュレーション動作に入る(図4 シミュレーションの実行)。
 
イメージ 4
 

標準部品 
1.電源と入出力デバイス
Circuitウインドウの左側の部品パレットには標準部品(電源と入出力デバイス、ゲートとバッファー、フリップフロップ)およびカスタムのモジュールが配列される。これらの部品は通常の方法で描画領域にドラッグアンドドロップしてシミュレーションに用いることができる。電源と入出力デバイスには図5 電源と入出力デバイスのようなものが用意されている(描画領域にドラッグアンドドロップした状態)。
 
イメージ 5


パレットの最上位にあるアースとVcc 電源はそれぞれ忠実なロジック(0)とロジック(1)の発生源である。
ボタンの出力は通常ロジック(0)になっているが、マウスをその上に置く間はロジック(1)に変わる。
スイッチはシミュレーションの実行中にマウスでクリックするとロジック(0)からロジック(1)に出力を反転させ、もう一度クリックすると元のロジック(0)に戻る。
クロックは矩形波を発生し、クロック期間は、クロックを選択して CircuitウインドウからComponent Optionダイアログを開き調節することができる。
クロックをマウスでクリックすると発振を始め、発振中のクロックをクリックすると停止する。
Input4 は16進数(hexadecimal)入力を生成するのに都合が良い。
出力デバイスは次の3つから選べる。
シングル LED :入力がロジック(1)のとき赤く輝く。
Display4 :入力レベルをデコードし、結果を16進数(0-9、 A- E)として7セグメント表示器に表示する 。
Beeper:音を再生する。音の高低はComponent Optionダイアログで変えることができ、また立ち上がりエッジにだけに応答して発音するオプションもある。

2.ゲートとバッファー
標準部品として図6 ゲートの2入力ゲートが登録されている。
 
イメージ 6

 この図でリストアップされたすべてのゲートと次図に示すBufferとNOTは、ctrlキーとCMDキーを押して、それを1回または数回クリックすることによって通常は 東西 向きになっている方向を別の方向に変えることができる。
シミュレーションではそれぞれの回路のピンはロジック(0)、ロジック(1)、ロジック(X)とロジック(Z)の4つの可能な状態(ステート)の1つに調整される。
ロジック(1)とロジック(0)は、通常の二進数で、これらのレベルのいずれかの値を取る出力はそれに接続されるすべての入力のレベルを決定する。
そのため、1つの入力が2つの出力に接続されることは禁止される。そのような場合、二つの出力は異なった値を持っている可能性があり、その結果は不確定となるだろう。
LogicSim はこのような接続が故意に作られることを許さないが、不確定あるい未知の状態が、他の方法で起こることはありうることで、そのような状態はロジック(X)で与えられる。例えば、システムの異なった部分がバスによって接続されるとか同じラインをドライブするいくつかの物理的に分離された出力を持つことが必要とされる状況がある。これはバッファーの1つであるトランジスタを使うことによって達成することができる。もしベース接続がロジック(1)であれば、入力は出力に直に接続され、ベースがロジック(0)であれば、出力とは完全に非接続となり、ハイインピーダンス状態ロジック(Z)に保たれる。

LogicSim はこの他にBufferとNOTを含む3種類のバッファー(図7 バッファー)を持っている。
 
イメージ 7


3.フリップフロップ 
LogicSim はいくつかのタイプのフリップフロップを提供する(図8 フリップフロップ)。
 
イメージ 8

 RSは単純なセット - リセットフリップフロップで、ck入力のポジティブゴーイングエッジでクロック動作をする。
供給されるフリップフロップの中で最も柔軟なものは JK2 で非同期プリセットとクリア入力を持つポジティブエッジでトリガーされるJK タイプである。
JK はJK2 に等価であるがそのプリセットとクリア端子が内部で Vcc に結び付けられた単純化されたタイプである。
DFFはDタイプまたはデータフリップフロップ でD入力だけを持ち、クロック入力にポジティブゴーイングエッジを受けたとき出力に移される。
DLATCH は、DFFに非常に良く似たデバイスであるが、エッジトリガーの代わりにクロック入力がロジック(1)である間D入力を出力に転送する。
TFFはTタイプあるいは「トグル」フリップフロップで、同様にただ1つの入力を持ち、T =ロジック(1)で、クロックが次のポジティブゴーイングエッジになるとき出力を反転させる。

部品の遅延時間とファミリー 
LogicSim はそれぞれのピンのために6つの実数値を保存しておくことでデバイスの伝搬遅延特性を規定する :  
最小、平均、最大の立上がり時間 
最小、平均、最大の降下時間
選ばれた部品にCircuitメニューからComponent Delays を使ってFamilyまたはNoneの遅れ時間セットを割り当てる。後者では遅れ時間は個々のピンで異なる値にセットすることができる。設定値は0<= Min < = Mean <= Max を満足しなくてはならない。同じタイプの一つ以上の部品を、例えば、CMDキーを押しながらクリックして選ぶと遅れ時間はそれらすべてに適用される。部品から作られるコピーはそのファミリーすなわち遅れ時間を継承する。
ファミリーとそれに関連する遅れ時間はCircuitメニューからCreate New Familyダイアログを用いて定義する。
部品をファミリーのメンバーに構成するにはComponent Delays ダイアログを用いる。
配布されている部品ははじめはすべて遅れ時間がゼロであるDefault Delay Familyのメンバーである。LogicSimのファミリーは LogicSim フォルダーの中の Families フォルダーに保存しなければならない。
シミュレーションはオプションとして最小、平均、最大およびランダムの4つの遅れ時間モードの1つを選んで実行できる。ランダムモードでは遅れ時間は規定された最小値と最大値の間に分布する。

シグナル・ウインドウ 
このウインドウは回路のさまざまなポイントにある信号レベルをオシロスコープで表示する(図9 シグナル・ウインドウ
 
イメージ 9

 このウインドウの中をマウスポインターでクリックすると縦のカーソルが生成され、これをドラッグすれば、イベントの正確な時間とシーケンスを確認することができる。左の下にある2つのボタンは、アンカーポイントとして働くカーソルに関する時間軸を拡大または縮小する。
もしシミュレーションが安定になると、記録は休止する。ただし、時間軸は矢印ボタンで隣の 編集可能なテキスト領域に示されるステップ数だけ手動で進めることができる。
これは、回路のスイッチやボタンをクリックして安定した回路への入力を変えるときに、何が起きるかを図示して見る場合に特に有用である。

カスタム化とモジュール 
LogicSim はフォルダー「Default components」またはこのエリアスを持つフォルダーを探して標準部品のパレットを作る。 これらのフォルダーはLogicSim アプリケーションと同じフォルダーになくてはならない。新しい部品やモジュールはフォルダー「Default components」またはそのサブフォルダーにが置くことができる。また滅多に使われないものは、フォルダーから取り除きパレットをカスタマイズできる。
部品はフォルダーにファイル名順にロードされ、画面上に部品がどのように整列されるかを制御することができる。
多くの部品をロードすると、新しい書類が開かれるときに、数秒をかかる。中止するにはCMD キーまたは esc キーを押せばよい。
技術的見地から見て、部品ファイルには次の3つのタイプがある。
1.標準部品、
2.LogicSim 回路で作成したモジュール
3.ソフトウェア開発キットSDKを使ってパスカル あるいはCソースからコンパイルされたコードリソース
いずれも全く同じ方法でロードできる。どんな LogicSim 回路もモジュールとして保存することができ、次にそれを一層複雑な回路でビルディングブロックとしてに使うことができる。
例題回路の「3 - IP AND cct 」(図10 「3-IP AND 」回路)は3入力AND動作を行う。
 
イメージ 10

 「Circuit」メニューから「Create Module」を選ぶとプレビューが表れ、モジュールがどのように表示されるかがわかる。入力スイッチ/ボタンと出力 LED の名前がピンラベルとして用いられる。
もしデフォルトの見栄えが好ましければ、モジュールは Save ボタンですぐに保存できる。モジュールの見栄えはドローパッケージを使って編集することもできる。その場合にはCopyとPasteボタンをクリックすると、クリップボードを介して PICT イメージに変換される。
モジュールダイアログの中の青と赤の円は、それぞれ入力と出力端子の位置を示し、ドラッグして位置を変えることができる。
完成したモジュールが Examples フォルダーにある「3ー IP AND 」(図11a 「3-IP AND 」モジュール)である。
 
イメージ 11

 同様に7400シリーズなども容易にモジュール化できる(図11b 「7400」モジュール)。
 
イメージ 12

いくつかのドローパッケージでは良い結果が得にくいので1pt のペンと 1dpi のグリッドで実験してから始めるのがよい。
モジュールを回路定義するときに他のモジュールを部品として含むことができる。
当然、モジュールの中で部品として用いられるモジュールのインターフィースを不用意に編集すると不具合が起こりうる。モジュールの包含関係を十分把握しておく必要がある。

ステミュラス・ウインドウ
スイッチとクロックは ステミュラス ・ウインドウの中のコマンドとしてリストすることによってシーケンスと動作の時間をあらかじめセットされた時間に自動的に状態を変えるようにプログラムすることができる。
コマンド構文は次のようになる :  
< ComponentName > : < TimeSpec1 >< State1 >< TimeSpec2 >< State2 >...
構文エラーは Info ウインドウにレポートされる。
行の上の//の後に続いているいかなるものもコメントとして取り扱われる。
LogicSim では、状態に許される値は スイッチ出力には{ L0 、 L1 、LX、 LZ }、クロック動作では{ON、OFF}である。
符号なし整数の TimeSpecs は、Execute ボタンが押された後のシミュレーションサイクルで絶対時間として扱われる。
頭に+ 符号の付いたTimeSpecs は前のコマンドのあと次のコマンドまで待つシミュレーションサイクルの数と解釈される。
例えば、図12 ステミュラスの例題回路の回路で、クロック動作を時間1000で開始し、500サイクル後で停止し、またスイッチを時刻0でロジック(0)に、時刻500でロジック(1)、時刻750でロジック(0)に戻るようにセットするとしよう。
 
イメージ 13

 ステミュラス・ウインドウ に次の行をタイプする必要がある :  
foo :1000 ON 1500 OFF
// Hello Mum !
bar : 0 L0 500 L1 750 L0

あるいは、次のように書いても等価である。
foo : 1000 ON + 500 OFF // Hello World
bar: 0 L0 + 500 L1 +250 L0  
コマンドは、実行されるとInfo ウインドウにリストアップされる。

LogicSimの応用
次号につづく


(つづく)


参考文献

Arnold's Web Page:http://www.planete.net/~amasson/logicsim.html(現在リンク切れ)
A local copy logicsim-68k-3.0b.sit [288k] may be faster to download.

佐藤武久「早わかりデジタル回路技術と実用ノウハウ」日刊工業新聞社「電子技術」誌連載(94年1月号から96年1月号まで全15回)