以前、ラダー図で計算機の構成要素を作って動かしてみようということで、加算器を作り、命令語インタプリタ上で動作させてみました。
今回は、第2弾として、ラダー図でメモリに挑戦します。
ラダー図でメモリといえば、真先に自己保持回路が思い浮びます。
しかし、自己保持回路は、1を書込むセット入力と、0を書込むリセット入力が別々にあります。
今回は、計算機の構成要素としての汎用的なメモリを考えるため、1つの入力から与えられた0または1のデータを、そのまま記憶させる仕様とします。
8.1 自己保持回路
まず、自己保持回路の復習から始めましょう。
図8.1に自己保持回路を示します。
この回路は、次のような動作をおこないます。
(1)セット入力M0を1にすると、コイルM100が1になります。
(2)その後、このセット入力M0を0に戻しても、コイルM100は1のままです。
(セット入力M0を0に戻しても、この接点と並列に接続されているM100が1のため、コイルM100は励磁され続けます。)
(3)この状態は、リセット入力M1を1(このとき、M1のb接点は切れる)にして、コイルM100が励磁されなくなるまで保持します。
(4)セット入力、リセット入力が両方0のときは、出力が0となります。すなわち、リセットが優先します。
この自己保持回路をブラックボックスとして、入出力のみに注目すると、図8.2のように表せます。
また、この自己保持回路の真理値表は、表8.1のようになります。
表8.1 M100の真理値表
(図8.1の自己保持回路)M0\M1 0 1 0 以前の状態を保持 0 1 1 0
8.2 1ビット記憶回路
自己保持回路では、セット入力、リセット入力という2つの入力によって記憶するデータを与えました。
このようなデータの与え方は、計算機のメモリとしては例外的です。
今回は、計算機の構成要素としての汎用的なメモリを考えるわけですから、1つの入力から与えられた0または1のデータを、そのまま記憶させることにします。
最終目標は、1ビット×4アドレスのアドレスデコーダ内蔵のメモリを考えていますが、とりあえずその基本的な構成要素である1ビットを記憶する回路(以下、1ビット記憶回路とよぶ)を考えてみましょう。
1ビット記憶回路の入出力は、図8.3にようにします。
この記憶回路は、書込指示(WR)を1にすることで、その時点のデータ入力(DI)の値が記憶されます。
書込指示(WR)が0のときは、読出モードとなるため、データ出力(DO)には以前記憶された値が出力されます。
この動作を、真理値表に表すと表8.2のようになります。
表8.2 DOの真理値表
(図8.3の1ビット記憶回路)WR\DI 0 1 0 以前の状態を保持 以前の状態を保持 1 0 1
8.3 1ビット記憶回路をつくる
では、この1ビット記憶回路を、ラダー図で作ってみることにします。
まず、最初に考えられる方法が、自己保持回路の流用です。
自己保持回路のセット入力、リセット入力に与える信号を工夫することによって、外部からは1ビット記憶回路に見えれば成功です。
以下、この方法について検討します。
まず、1ビット記憶回路に1を書込む条件を考えます。
表8.2の真理値表を見てわかるように、1ビット記憶回路に1を書込む条件は、DI=1かつWR=1です。
次に、1ビット記憶回路に0を書込む条件を考えます。
これも、表8.2の真理値表を見てわかるように、1ビット記憶回路に0を書込む条件は、DI=0かつWR=1です。
これらの条件を、図8.4のように、それぞれ自己保持回路のセット入力、リセット入力に与えれば、外側からは1ビット記憶回路に見えるはずです。
実際に、ラダー図でできた自己保持回路のセット入力、リセット入力を、図8.4に示す条件に置き換えると、図8.5のようになります。
(青枠部分がセット入力、赤枠部分がリセット入力に相当します。)
今回は、ラダー図開発ツールLD Cv!でラダー図を作成したため、LD Cv!の仕様により、末尾にEND命令を付加しています。
8.4 1ビット記憶回路の動作確認
図8.5の1ビット記憶回路をLD Cv!上でシミュレーションをおこない、実際に動作を確認してみましょう。
表8.3にしたがってM0(DI)、M1(WR)を変化させたとき、M100(DO)が表8.3の通り変化すれば、1ビット記憶回路は正常に動作しています。
表8.3 1ビット記憶回路の動作確認 M0(DI) M1(WR) M100(DO) 説明 0 0 0 シミュレーション開始 1 0 0 DI=1にする(WR=0のため、記憶内容は0を保持) 1 1 1 WR=1にする(1を書込) 1 0 1 WR=0に戻す(WR=0のため、記憶内容は1を保持) 0 0 1 DI=0にする(WR=0のため、記憶内容は1を保持) 0 1 0 WR=1にする(0を書込) 0 0 0 WR=0に戻す(WR=0のため、記憶内容は0を保持) 1 0 0 DI=1にする(WR=0のため、記憶内容は0を保持)
実際に、LD Cv!上でシミュレーションしてみると、表8.3のように動作することがわかります。
次回は、この1ビット記憶回路を使って、1ビット×4アドレスのアドレスデコーダ内蔵のメモリを作ってみることにします。