
| https://www.crimson-systems.com | YouTube |
| ENIAC 10進リングカウンター → ENIACシュミレーター → ENIACプログラミング | |||||||||||||||||
![]() https://americanhistory.si.edu/collections/object/nmah_334746 真空管による 10個のフリップフロップを環状に繋ぎ、1つのパルスで 0~9までの数字を表現します。 このリングカウンターを10個組み合わせて10桁の数値を記憶します。 |
|||||||||||||||||
Arthur W. Burks → https://archive.computerhistory.org/resources/text/Knuth_Don_X4100/PDF_index/k-8-pdf/k-8-r5367-1-ENIAC-circuits.pdf ![]() |
|||||||||||||||||
|
|||||||||||||||||
●サイクリング・ユニット |
||||||||||||||||||||||||||||||||||||||||
| 全ての機器(ユニット)を同期させる為に、サイクリング・ユニットがあります。 主となる中央プログラミングパルス(CPP)は、すべてのユニットの動作を管理する為パルスを生成(送信)します。 加算時間と呼ばれる基本サイクルは、100kHz 20サイクル(200マイクロ秒)です。 この20サイクルは、マシン全体に送信される一連の信号を生成するために使用されます。 サイクリング・ユニットは下図の10個のパルス列を生成します。 また、1P、1′ P、2P、2′ P、4P、9P、および10P信号はすべて、各ユニットから送信される数字を生成するために使用されます。 |
||||||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
| リングカウンター回路図 | ||||||||||||||||||||||||||||||||||||||||
| ENIACは、内部の計算(パルスの加算)は、10進数で処理し、フリップ・フロップ 回路を利用し、1桁の数値 0~9まで表示できるようになっています。 | ||||||||||||||||||||||||||||||||||||||||
| ・フリップフロップを10組用意し、入力パルス加算により ネオン管で0~9を表示 | ||||||||||||||||||||||||||||||||||||||||
| ・パルス加算で、10になったら桁上げパルスの発生と0表示にする ・真空管の数を減らす為、1組のフリップフロップは双極管 6SN7 を使用 ※10桁を表示するには、このリングカクンターが10個必要 |

| アキュームレータの制御回路(簡易) Arthur W. Burks | ||
|
||
リングカウンター ブロック・ダイアグラム Arthur W. Burks |
||
![]() |
||
リングカウンター 0~9の模式図 |
||
![]() |
| アキュームレータの数値表示 各桁の数値をネオン管で表示 | ||
![]() |
![]() |

※1943年の提案では10個のアキュムレータを備えた計算機が求められ、1944年8月に、アキュムレータ2台のプロトタイプが完成しました。 その結果、計算機が実現可能であることが判明すると、弾道研究所(BRL)は20個のアキュムレータを備えた計算機を要求しました。 |
![]() |
| ●リングカウンターの基本動作 | |||||
| フリップフロップを 10個リング状に繋ぎ、そのうちどれか1だけONの状態が、その桁の数値を表します。 | |||||
| パルスが入力すると、 0、1、2、・・・ 8、 9 と変化し、さらにパルスが1個入力すると 0 に戻ります。 | |||||
| このような、リングカウンターを 10個繋ぐと10桁の数字が表現できます。 PX-5-304: Accumulator Block Diagram https://www.cs.drexel.edu/~bls96/eniac/drawings/px-5-304.pdf ![]() 送信 ACCの内容を送信するには、 10P による 10個のパルスでおこなわれ、出力チャンネル:A端子から出力されます。 10Pは、ACC内の10個の10進リングカウンターのそれぞれに同時に送られ、カウンターを1段階ずつ循環させます。 ACCの値が7の例 ・通常A端子のゲートは閉じています。 ・数値が 9から0に変わった時、出力チャンネル:A端子のゲートが開きパルスが1個出力されます。 ・ゲートが開いているので、残りの6個が出力されます。 つまり 7個出力されます。 |
|||||
|
| 加算 | |
![]() |
数値5が ON の状態で、入力パルスを3個受信すると リングは、6、7、8と遷移して停止します。 つまり 5+3=8を表しています。 さらにパルスを受信し、9を通過するとキャリーパルス(桁上げ)が送信され、0になります。 |
| 減算 | ||||||||||
減算は専用回路を設けず、補数を加算することで値を求めます。 下記の例 7 - 4 は、 10の補数を加算し、繰り上がった最上位の「10」を無視します。 ![]() 10の補数を作るには、サイクリング・ユニットの、9P と 1'Pを利用します。 |
||||||||||
![]() |
||||||||||
10の補数を取り出せるように、アキュームレータの出力チャンネルを S (Subtract)に設定します。 |
||||||||||
|
||||||||||
|
||||||||||
| ●高速乗算器(High-Speed Multiplier) |
| 乗算は、九九表を使い積を10位桁と1位桁に分け、10位(LHPP)と1位(RHPP)の部分積を集計して積を計算します。 |
| 被乗数:3の九九表の部分 ※サイクリングユニットの 1P, 2P, 2'P, 4Pで、乗数の1~9を生成することができます。 ※10Pのみ位相が違い、deline lineにより5μsずらす設計。 |
![]() |
被乗数3の 積を求め、Left Hand Partial Product(10の位) と Rigth Hand Partial Product(1の位)の値から、 サイクリングユニットの 1P, 2P, 2'P, 4Pで数値が生成できるようにします。 |
![]() |
上図の被乗数3の積の表から、 ・マトリックス回路で、パルスが通過できないよう抵抗で抑制します。 ・また数値の生成不要なパルスは省きます。 ![]() |
![]() |
Drawing PX-6-54 → https://www.cs.drexel.edu/~bls96/eniac/drawings/px-6-54.pdf |
| ●乗算処理の概要 ①被乗数をACC11、乗数をACC12へ ②乗算器は 10の位をACC13、1の位をACC14 or ACC15へ ③各々の部分積(LHPPとRHPP)を求める ④部分積は、シフター(桁処理)をおこない、L側・右側を加算する ⑤左側と右側の合計が乗算積(20桁) 10の位: LHPP(Left Hand Partial Product) 1の位: RHPP(Right Hand Partial Product) |
![]() |
例) 3 x 6 = 18 ・・・ 計算結果 1(Left Hand Partial roduct) と 8(Right Hand Partial roduct)の信号が生成される LとRの部分積を累計して結果のACCへ |

| ●ENIACのプログラミング | ||||||
| ユニットの演算結果を次のユニットに渡し、終了パルスを送ります。(ケーブル配線) ①開始パルスをユニット1に入力します。 ②ユニット1は設定されたプログラム制御(SWの設定)で演算します。 演算結果をデータラインからユニット2の入力へ 終了パルスをプログラムラインからユニット2のプログラム制御入力へ ③ユニット2は演算後、同様に次のユニット3に渡します。 |
||||||
![]() |
||||||
下記のプログラム(配線)は、ENIACに於ける並列計算の仕方・及び問題の分解・テクニック等の重要な要素があります。 The ENIAC: History, Operation and Reconstruction in VLSI (Jan Van der Spiegel et al.) から引用したもの。 ![]() 3つのアキュムレータにそれぞれ ACC#4 に aの値、 ACC#5 に bの値、 ACC#6 に cの値 が入っている状態で 上図のプログラムを開始すると、結果は a - b → ACC#4 b + 359 → ACC#5 c + 2b + 359 → ACC#6 ・・・ になります。 ※359の値は、カードリーダーから定数送信機(Constant Transmitter)を介して ACC#5 および ACC#6に送られます。 |
||||||
| アキュームレータの模式図 |
||||||
|
||||||
![]() |
||||||
① a - b ACC#5は、保持している値を2通りの方法で送出する必要があります。 プログラム5で、リピート回数を2にセットし、出力チャンネルをASにセットします。 出力チャンネルS(10の補数出力)を、ACC#4の入力チャンネルαに配線(ケーブル接続)します。 ACC#4の「プログラム制御1」で入力チャンネルαにセット ![]() |
||||||
② c + 2b = c + b +b c + 2b は、 c + b + b つまり、2回加算を繰り返します。 ACC#6は、ACC#5から 数値bを2回受け取るようにします。 つまり、ACC#6の「プログラム制御5」は、入力チャンネルαからの受け取り回数を2にセットします。 ACC#5のAチャンネル(通常)から、ACC#6の入力チャンネルαに配線(ケーブル接続)します。 ![]() |
||||||
③ c + 359、 b + 359 数値359は、カードリーダーから定数送信機(Constant Transmitter)を介して、ACC#5 と ACC#6に送ります。 ACC#5の「プログラム制御6」で入力チャンネルαにセット、リピート数は1にセット 定数送信機から、ACC#5の入力チャンネルαに配線(ケーブル接続)します。 ACC#6の「プログラム制御1」で入力チャンネルβにセット 定数送信機から、ACC#6の入力チャンネルβに配線(ケーブル接続)します。 ![]() |
||||||
④ケーブル接続 初期化ユニットの出力から送出されるスタートパルスを受信する為、 ACC#4の「プログラム制御1」の入力端子、 ACC#5の「プログラム制御5」の入力端子、 ACC#6の「プログラム制御5」の入力端子に接続します。 ACC#5の数値を2回送信すると、ACC#5の「プログラム制御5」から出力パルスが出力します。 ![]() |
||||||
⑤ケーブル接続 ACC#5の「プログラム制御5」からの出力パルス(トリガー)を、 ACC#5の「プログラム制御6」の入力端子、および「定数送信機」のプログラム入力端子に接続します。 ![]() |
| ENIAC Accumulator |
![]() https://www.kondo3d.com/eniac/jp.html より |
![]() https://cse.engin.umich.edu/about/history/eniac-display/ より |
![]() |
![]() |