Delay【Turing Complete編】
はじめに
いつもブログをご覧いただきありがとうございます。
コーストFIRE中のIPUSIRONです😀
Delayステージ
現実的な、すべての基本ゲートにおいて遅延が発生します。全体の回路の遅延は、それを構成するビルディングブロックである基本ゲートの遅延から計算できます。
Delayステージのゴールは、NANDゲートを5個(ゲートコスト5)配置して、遅延6の回路を組むことです。
NAND SCOREとDELAY SCORE
シミュレーターの右上に"NAND SCORE"と"DELAY SCORE"が新しく表示されています。
NAND SCOREはキャンバスに配置したNANDの数です。
※置くだけでカウントされます。つないで電気が通過しなくてもカウントされます。
DELAY SCOREは回路全体の遅延を意味する数値です。入力端子から出力端子への間で1つのNANDを通過するたびに、2ずつ増えます。少ない方が回路全体の遅延が少ないことになります。
Delayステージを解く
1:NAND SCOREの仕様を確認する
本ステージで使えるのはNANDコンポーネントのみです。
キャンバス上にNANDコンポーネントを1つ配置してください。右上のNAND SCOREが0から1になりました。
配置したNANDコンポーネントを選択した状態にすると、下にNANDの入出力が出ていますが、その側にGATE SCOREとDELAY SCOREが出ています。これはコンポーネントのスコアになります。つまり、1つのNANDコンポーネントのGATE SCOREは1、DELAY SCOREは2ということです。
2:ワイヤリングした場合のスコアを確認する
入出力の間にNANDコンポーネントを置いて、ワイヤリングします。
右上のGATE SCOREは1(変わらず)、DELAY SCOREが2になりました。つまり、この回路は遅延2ということです。
※画像では、実質NOT回路になっています。
3:2つのNANDコンポーネントを直列にしてみる
入出力端子間で、2つのNANDコンポーネントを直列にしてみます。
・GATE SCOREは2・・・2個のNANDコンポーネントがあるため。
・DELAY SCOREは4・・・2個のNANDコンポーネントを通過するため。遅延2を2回通過で、合計遅延4。
ステージをクリアするには、NANDゲートを5個配置する必要がありました。普通に直列につないでしまうと、GATE SCOREが5、DELAY SCOREが10になってしまいます。
4:2つのNANDコンポーネントを並列にしてみる
入出力端子間で、2つのNANDコンポーネントを並列にしてみます。
・GATE SCOREは2・・・2個のNANDコンポーネントがあるため。
・DELAY SCOREは2・・・1個のNANDコンポーネントを通過するため。遅延2を1回通過で、合計遅延2。
上のNANDコンポーネントの出力をつないで、完全な並列回路にしてみます。
結果は変わりませんでした。
上のNANDコンポーネントで遅延2、下のNANDコンポーネントで遅延2になりますが、同時に遅延が起こっているため、回路から見た遅延は変わらないというわけです。
つまり、回路に複数の経路がある場合、その中でもっとも大きい遅延が回路全体の遅延そのものということです。
5:最後にキャンバスに配置するだけではどうなるのかを確認する
それではワイヤリングを一切せずに、キャンバスに1つだけ追加した状態を見てみます。
・GATE SCOREは2・・・2個のNANDコンポーネントがあるため。
・DELAY SCOREは2・・・1個のNANDコンポーネントを通過するため。
想像したとおりのはずです。
以上をまとめると、次のようになります。
NANDコンポーネントをどうするか | GATE SCORE | DELAY SCORE |
---|---|---|
直列に追加 | +1 | +2 |
並列に追加 | +1 | +0 |
キャンバスに配置だけ or 経路がない状態で追加 | +1 | +0 |
6:回路を組む
以上の試行錯誤により、5個のゲート(ここではNANDコンポーネントのみ)を使って、遅延6を満たす回路を組みましょう。
遅延6にするには、入出力間の経路で3つのNANDコンポーネントを通過しなければなりません。後は、5個を使うという条件を満たすために、キャンバス上にNANDコンポーネントを2つ配置すればよいでしょう。
以上のように考えるのが正攻法ですが、私は頭を使うのが面倒だったので、次の方法を採用しました。横着したやり方ですが、実際のところ次の方法がもっとも簡単です。
5個のNANDコンポーネントを使うのは確定なので、キャンバス上に5個を配置します。後は適当にワイヤリングをして遅延6を満たす回路を作りました。
7:テストする
回路を組んだら、下の[Check]ボタンを押します。条件を満たしていれば"Correct!"となり、ステージクリアになります。そうでなければ"Nope!"となります。
ステージクリアすると、DelayコンポーネントとDelay機能がアンロックします。
クリア後のメッセージにあるように、DELAY SCOREの隣の砂時計アイコンを押すと、遅延パスが表示されます。それに加えて、ワイヤー上に遅延数も表示されます。
Functionsカテゴリー以降の(回路計の)ステージでは、回路のスコア等が表示されるようになります。正解はいろいろあり、スコアを比べて回路の効率のよさを比較できるわけです(回路の見やすさは別として)。
※拡大するとスコアが読み取れます。