変更履歴
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シミュレーション」のダウンロード
ライブラリーの解説書はここです。
つづく