デジタル回路シミュレータ
ver1.002 2007.3.21

変更履歴
2007.3.11 新規作成
2007.3.17 追加
2007.3.18 追加

2007.3.21 ライブラリー解説書追加

【はじめに】

デジタル回路はシーケンシャルなため,タイミングチャートをたくさん書いてもバグがなくなりません。
まあ、そこで,HDLを使うのが一般的ですが、適当にシミュレーションするんであれば,Cで書いてやれば十分です。
なお、ここでは遅延が考慮されていません。いずれ....

【準備】
まず、Cの開発環境を用意しなければなりません。MINGW(32bit版と64bit版があります)をインストールします。

なお、editorはここから持ってきます。
http://k2top.jpn.org/index.php?K2Editor

以上、貴重なソフトの公開ならびに一般への提供ありがとうございます。もし、これらがなければ大変なことです。感謝です。

【概略】

仕様としましては,キャラクタベースです。

変数の型はLOGICとstateの2つです。

typedef  enum  {L,H,X,Z}  LOGIC;
typedef  enum  {Change,Hold}  state;

使用するセルは以下のように


変数宣言して,

SN7408_1.in1=SN7474_1.Q;
SN7408_1.in2=SN7474_2.Q;

という風に接続を書いてゆきます。
なお、セル宣言文でD_FF SN7474_1={X,X,・・・の初期化は必ず不定(X)からはじめます。すると、Xは伝播してゆきますのでデバッグに役立ちます。


trans=trans+and2(&SN7408_1);

これは実際のゲート動作で,transは状態変化を見ている変数です。

これは、ジョンソンカウンタの動作例です。



まあ、単純なCでずらずら書くわけなんで,こういう風に手抜きします。


do whileは内部状態変化がなくなるまで回ります。状態変化はtransでカウントしています。loopsは1000回回っても状態が安定にならなかったらレーシングとしてループを抜けています。

circuit.hは接続がかかれており,


となっています。記述順番は,関係しないようにしてありますが、NANDゲートでset-resetフリップフロップを作ると記述順序でレーシングが発生することがあります。
state1.hは、


で、terminal_l.hは端子の入力を書いています。


という具合に,なるべくネットリストに近いものにしています。
report.hは表示をしています。



という具合です。

「デジタル回路シミュレーション」のダウンロード

解凍はhomeディレクトリーで行います。
>tar zxvf tools.tar.gz
です。

2007.3.18追加
以下のものはtoolsのディレクトリで解凍してください。その下にディレクトリーを作ります。
「JK 6進カウンタシミュレーション」のダウンロード
「EXORシミュレーション」のダウンロード

ライブラリーの解説書はここです。


つづく