第16回
デジタル回路シミュレーション(2)
前号で紹介したようにLogicSimはソフト本体に含まれる標準部品は少ないが、ゲートやFlipFlopなどはAND、OR、NOTの基本3素子を使って容易に追加作成できる。そこではじめにゲートの入力数を4入力まで増やしたり、負論理の論理記号もライブラリーに加えておいたほうが後の作業が楽になる。
LogicSimは簡易シミュレータとはいうものの、階層設計が可能のこととタイミングチャートの表示が可能な点が大きな特徴である。今回は前半に階層設計の例として3桁の加算器を取り上げ、モジュールの作り方とシミュレーションの方法を学ぶ。また後半はカウンタやシフトレジスタなどの順序回路の動作をタイムチャートの機能を有効に使ってシミュレーションする。
標準部品の追加
LogicSimのシミュレータ本体に付属している標準部品としてのゲートは2入力のAND、OR、NAND、NORおよびXORだけであり、またバッファーはBufferとNOTだけである。ゲートの入力数は4入力までは標準で備えておきたい。また負論理の論理記号も回路動作の理解を助けるし、標準ICの等価回路を入力する際には欠かせない。
前号の「カスタム化とモジュール」の項で3入力ANDのモジュール化の例を紹介しており、多少重複するが、ここでは4入力NANDと4入力の負論理NORの例を取りあげる。
1.ゲートの入力数拡大
図1のように標準部品のAND2個とNAND1個をドラッグして4入力NAND回路を合成する。
「Circuit」メニューで「Create
Module]を選ぶとプレビューが表れるが、標準のシンボルはボックスで表示されるのでそのままでは使えない。そこでクラリスワークスのドロー環境を使ってあらかじめ4入力NANDのMIL論理記号によるシンボルを作成しておく(図2)。
完成したシンボルはグループ化し、これをコピーしておく。次にLogicSimのModule
PreviewでPasteボタンをクリックするとボックス形状のシンボルがこのMIL論理記号のシンボルに置き変る(図3)。
このとき入力と出力ピンの位置を示す青丸と赤丸はシンボルの端子位置からずれることがあるので丸をドラッグして位置を修正しておく。完成したらSaveボタンを押してModuleフォルダーに4NANDという名前で保存する。
図1の回路は負論理では4入力のNOR回路であるから、負論理NORのシンボルを別に用意してペーストすれば同じ回路が別の論理記号でモジュール化できる。このようにして標準部品はモジュール化によって増やすことができ、使用するときは「Circuit」メニューの「Load
Module」コマンドで部品パレットに呼び出してドラッグすればよい。
このようにしてできた新しいゲートとバッファーを図4に示す。
階層設計について
一般に論理回路設計は階層構造をとり、論理機能は機能単位にモジュール化される。この場合、上位レベルから設計を行うトップダウン方式と下位から設計を行うボトムアップ方式があるがLogicSimはボトムアップ方式の階層設計ができる。
階層設計の例として10進3桁の加算器の例を示す。この回路は下位から、半加算器、全加算器、4ビット加算器、BCD加算器の4層で構成される。
1.半加算器
図5は半加算器の回路図を示す。
この半加算器(Half
Adder)をシミュレーションで動作確認を行い、問題がなければCreate
Moduleコマンドをクリックする。Module previewウインドウ(図6)に表示される各ピンの名前は図4で入力した入出力部品の名前が割り付けられる。
ここでドローソフトで作っておいた論理記号をペーストして独自のものを作ってもよい。ピンの位置を修正した後、モジュール名HAとして保存する。
2.全加算器
次にまた新しいファイルを開き、Load Module
コマンドにより指定のフォルダーからHAモジュールを開くと部品パレットの下部にHAモジュールが追加されるので、これをドラッグして図7の全加算器(FULL
ADDER)の回路を作成する。
これも同様にしてシミュレーションにより動作を確認し、問題がなければFAという名前で保存する。
3.4ビット加算器
さらに、新しいファイルを開き、FAモジュールをドラッグして、図8の4ビット加算器の回路を作成する。
これもシミュレーションで動作を確認する。例えば、5+Cを実行すると和
は1でキャリー(COUT)は1となる。同様に4ADDERの名でモジュールとして保存する。
シミュレーションの実行時には、入力、出力の状態表示だけでなく回路の内部にある各部品について入力と出力の状態が表示されるので、回路規模が大きくなって段数が増えた場合にはこれを活用すると信号を追いかけてチェックするのに都合が良い。
4.BCD加算器
さらに新しいファイルを開き、この4ADDERモジュールを使って、図9のBCD加算器(BCD ADDER)の回路を作成する。
ここでは入力と出力に表示器を使い、10進1桁の加算動作がシミュレーションで直接確認できるようにしてある。被加数、加数の入力は表示器をクリックする毎に1づつ増加する。図の例では7+6で桁あげが生じ、CARRYのLEDが点灯し、一桁目の結果3が表示されている。FAでは8+8は和が0でキャリー1となったが、ここでは8+8は和が6でキャリーが1となる。
この回路をBCDADDERという名でモジュール化する。ただし、この回路のままでは入力と出力のピンが指定できないので表示器を入力スイッチとLEDに変えてピンの名前を指定した別名のファイルを用意する必要がある。
5.3桁加算器
図10はモジュールBCDADDERを3個使って10進数3桁の加算器を構成したものである。被加数、加数とも999まで入力可能で和はキャリーで1を表示するようにしているので1998まで表示できる。
6.2の補数によるBCD加算/減算回路
またFAモジュールを使った別の例として図11の2の補数によるBCDの加算/減算
回路を示す。S/AをLにしたときは加算動作、Hにしたときは減算動作が行われる。S/AがHの場合、減数B0、B1、B2、B3はEXーORによって反転されコンプリメントとなり全加算器に入力される。このときLSBの全加算器のキャリーCIにも1が加えられるので、結局、2の補数が作られたことになる。例えば、十進数で10-7=3の計算を例にとると、10進数の7は2進数では0111であるから、コンプリメントは1000となる。これに1を加えると1001で、これは2の補数であるから1010+1001=10011となる。加算の結果キャリーが1となるのは結果が正の場合で、はキャリーを捨てた残り0011(10進の3)がそのままは答えとなる。減算結果が負になる場合はキャリーが生ぜず、結果は2の補数として残るので、絶対値はさらにその補数をとる必要がある。
タイムチャートの活用
LogicSimの特徴は上記の階層設計が可能な点であるが、もう一つの特徴はタイムチャートの表示が可能な点である。これはフリップ・フロップ、カウンタやシフトレジスタなどの順序回路の動作を検証する場合に便利である。
1.並列データー直列データ変換回路
はじめに作成した4入力NANDゲートを利用して8入力のマルチプレクサ74HC151の等価回路を描き(図12)、これをモジュール化する。
このモジュールと別に用意した4ビットのカウンタモジュールを使って並列データー直列データ変換回路(図13)を作成する。
シミュレーションで並列データ10101010を入力しストローブを1にすると出力YのLEDが等間隔で点滅しブザーがなる。また「Windows」メニューでSignalsをチェックするとタイムチャートが表示され並列データ10101010が直列データに変換される様子を見ることができる(図14)。
2.DーFFとDラッチの動作
D-FFとDLatchの動作の違いを見るため図15の回路を作る。入力信号Dをステミュラスで図16のように定義してシミュレーションを実行すると図17のタイムチャートに示すように動作の明らかな違いを比較して見ることができる。
3.JKーFFのノイズによる誤動作
ステミュラスによって外来ノイズを定義してJKーFFのJ入力に加えてみるとマスタースレーブ方式では誤動作して出力が反転する様子を観察できる(図18)。エッジトリガー方式のJKーFFに同じノイズを加えても誤動作は見られない。
(つづく)
参考文献
Arnold's Web Page:http://www.planete.net/~amasson/logicsim.html
佐藤武久「早わかりデジタル回路技術と実用ノウハウ」日刊工業新聞社「電子技術」誌連載(94年1月号から96年1月号まで全15回)