Chap.4では、全加算器の論理式をラダーに変換して、LD
Cv!で試しに動作させてみるところまでおこないました。
今回は、この全加算器を4個接続して、4ビットの加算をおこなってみます。
もちろん動作確認は、「番外編の命令語インタプリタ」でおこないます。
5.1 I/O番号の割付け
全加算器を4個接続して、図5.1のようにI/O番号を割り付けることにします。
(Chap.4では、表4.3のようにI/O番号を割り付けましたが、わかりやすい割付になっていなかったので、図5.1の割付に変更します。)
図をみると、4個の全加算器のCoとCiが芋蔓(いもづる)式に配線されています。
この配線は、ラダー図上では接続されているCoとCiに同一のI/O番号を使うことに相当します。
5.2 全加算器1の命令語プログラム
では、図5.1の回路のうち1桁分のラダー図を作成し、これを命令語に置き換えてみることにします。
前回おこなったのと同じ方法で、全加算器1をラダー図で表すと、図5.2のようになります。
このラダー図は赤枠、青枠で囲まれた回路ブロックをそれぞれOR結合しています。
したがって、回路ブロックの結合命令をサポートしていない「番外編の命令語インタプリタ」では、このラダー図を実行することができません。
そこで、これらの回路ブロックを、図5.3のようにいったんコイルM40〜M46に置き換えることにします。
回路ブロックをコイルに置き換えたので、今度は図5.4のように「番外編の命令語インタプリタ」でもOR結合が可能です。
図5.3と図5.4を一緒にすると、図5.2のラダー図と等価になります。
図5.3と図5.4のラダー図ならば、「番外編の命令語インタプリタ」でも実行可能な命令語プログラムに変換できます。
手作業で、図5.3と図5.4のラダー図を命令語に変換したのがリスト5.1です。
/* 全加算器1(1/7)
*/ LDNOT 7 ANDNOT 17 AND 8 OUT 40 /* 全加算器1(2/7) */ LD 7 ANDNOT 17 ANDNOT 8 OUT 41 /* 全加算器1(3/7) */ LDNOT 7 AND 17 ANDNOT 8 OUT 42 |
/* 全加算器1(4/7)
*/ LD 7 AND 17 AND 8 OUT 43 /* 全加算器1(5/7) */ LD 7 ANDNOT 17 AND 8 OUT 44 /* 全加算器1(6/7) */ LDNOT 7 AND 17 AND 8 OUT 45 |
/* 全加算器1(7/7)
*/ LD 7 AND 17 OUT 46 /* 全加算器1(出力Y0) */ LD 40 OR 41 OR 42 OR 43 OUT 27 /* 全加算器1(桁上げ) */ LD 44 OR 45 OR 46 OUT F |
5.3 4ビット加算器の命令語プログラム
ここまでで、全加算器1の命令語プログラムができあがりました。
同様にして、全加算器2〜全加算器4の命令語を作成し、全加算器1〜全加算器4を1つのプログラムにして、末尾にEND命令を追加したのがリスト5.2です。
(コイルへの置き換えは、48〜4E、50〜57、58〜5Eを使用しました。)
/* 全加算器1(1/7) */ LDNOT 7 ANDNOT 17 AND 8 OUT 40 /* 全加算器1(2/7) */ LD 7 ANDNOT 17 ANDNOT 8 OUT 41 /* 全加算器1(3/7) */ LDNOT 7 AND 17 ANDNOT 8 OUT 42 /* 全加算器1(4/7) */ LD 7 AND 17 AND 8 OUT 43 /* 全加算器1(5/7) */ LD 7 ANDNOT 17 AND 8 OUT 44 /* 全加算器1(6/7) */ LDNOT 7 AND 17 AND 8 OUT 45 /* 全加算器1(7/7) */ LD 7 AND 17 OUT 46 /* 全加算器1(出力Y0) */ LD 40 OR 41 OR 42 OR 43 OUT 27 /* 全加算器1(桁上げ) */ LD 44 OR 45 OR 46 OUT F |
/* 全加算器2(1/7) */ LDNOT 6 ANDNOT 16 AND F OUT 48 /* 全加算器2(2/7) */ LD 6 ANDNOT 16 ANDNOT F OUT 49 /* 全加算器2(3/7) */ LDNOT 6 AND 16 ANDNOT F OUT 4A /* 全加算器2(4/7) */ LD 6 AND 16 AND F OUT 4B /* 全加算器2(5/7) */ LD 6 ANDNOT 16 AND F OUT 4C /* 全加算器2(6/7) */ LDNOT 6 AND 16 AND F OUT 4D /* 全加算器2(7/7) */ LD 6 AND 16 OUT 4E /* 全加算器2(出力Y1) */ LD 48 OR 49 OR 4A OR 4B OUT 26 /* 全加算器2(桁上げ) */ LD 4C OR 4D OR 4E OUT E |
/* 全加算器3(1/7) */ LDNOT 5 ANDNOT 15 AND E OUT 50 /* 全加算器3(2/7) */ LD 5 ANDNOT 15 ANDNOT E OUT 51 /* 全加算器3(3/7) */ LDNOT 5 AND 15 ANDNOT E OUT 52 /* 全加算器3(4/7) */ LD 5 AND 15 AND E OUT 53 /* 全加算器3(5/7) */ LD 5 ANDNOT 15 AND E OUT 54 /* 全加算器3(6/7) */ LDNOT 5 AND 15 AND E OUT 55 /* 全加算器3(7/7) */ LD 5 AND 15 OUT 56 /* 全加算器3(出力Y2) */ LD 50 OR 51 OR 52 OR 53 OUT 25 /* 全加算器3(桁上げ) */ LD 54 OR 55 OR 56 OUT D |
/* 全加算器4(1/7) */ LDNOT 4 ANDNOT 14 AND D OUT 58 /* 全加算器4(2/7) */ LD 4 ANDNOT 14 ANDNOT D OUT 59 /* 全加算器4(3/7) */ LDNOT 4 AND 14 ANDNOT D OUT 5A /* 全加算器4(4/7) */ LD 4 AND 14 AND D OUT 5B /* 全加算器4(5/7) */ LD 4 ANDNOT 14 AND D OUT 5C /* 全加算器4(6/7) */ LDNOT 4 AND 14 AND D OUT 5D /* 全加算器4(7/7) */ LD 4 AND 14 OUT 5E /* 全加算器4(出力Y3) */ LD 58 OR 59 OR 5A OR 5B OUT 24 /* 全加算器4(桁上げ) */ LD 5C OR 5D OR 5E OUT 23 END |
このリスト2は、番外編の命令語インタプリタで実行することが可能です。
5.4 4ビット加算器の実行
では、リスト2の命令語プログラムを実際に動かしてみることにしましょう。
例として、7+10=17(2進数で、0111+1010=10001)を計算させてみます。
操作手順は、(1)〜(5)のとおりです。
(1)リスト2のプログラムをテキストエディタで作成し、適当なファイル名で保存します。
(2)番外編の命令語インタプリタを起動します。
(3)「ファイル読み込み」ボタンをクリックし、(1)で作成したファイル名を指定し、プログラムを読み込みます。
(4)「データ入力」ボタンをクリックし、図5.5のように数値を1ビットずつ入力します。
ここでは数値10と数値7なので、表5.1のように各ビットを入力します。
表5.1 各ビットの入力値 数値 入力操作 数値7
(2進数で0111)・アドレス04に、0を入力
・アドレス05に、1を入力
・アドレス06に、1を入力
・アドレス07に、1を入力
数値10
(2進数で1010)・アドレス14に、1を入力
・アドレス15に、0を入力
・アドレス16に、1を入力
・アドレス17に、0を入力
数値をすべて入力すると、図5.6のようになります。
(5)「スキャン実行」ボタンをクリックし、計算結果を見ます。(図5.7)
計算結果は、24〜27に出力され、計算の結果桁上げは、23に出力されます。
図5.7では、0111+1010=10001を計算していることがわかります。
数値を変えてみて、正しく加算していることを確かめてみてください。
たとえば、次のような計算です。
(1)4+8=12 (0100+1000=01100)
(2)13+15=28(1101+1111=11100) (注)28は16進数で1C、2進数で11100
5.5 実際のリレー回路へ適用する場合
これまでで、ラダー図をコンピュータ上でシミュレーションして、4ビットの加算がおこなえたことを確認できました。
シミュレーションできたのですから、実際にリレーを組み合わせても、加算器ができるはずです。
ただし、実際にリレーでラダー図の配線をおこなう場合は、そのリレー(部品)に内蔵している接点の数に制限があるため、使用する接点の数を満たすだけのリレーが必要となります。
さて、次回はメモリに挑戦します。
ここから先は、あまり考えていないので、色々な問題が出てくるかもしれません。