Counter【Turing Complete編】
はじめに
いつもブログをご覧いただきありがとうございます。
コーストFIRE中のIPUSIRONです😀
Counterステージ
Counterステージのゴールは、1tickで1ずつ増えていくカウンター回路を作ることです。
入力 | ・カウント制御:1ビット ONのとき、他方の入力1バイトからスタートする(上書きする)。 OFFのとき、直前のバイトデータをインクリメントし続ける。 ・Input:1バイト、インクリメント対象のバイトデータ |
出力 | ・Output:1バイト、インクリメントされたバイトデータ |
※クロック信号の入力は存在せずに、1tickごとに内部的にインクリメントしてそれを随時出力していきます。
Counterステージを解く
書籍によく載っているカウンターとはちょっと違います。
1:回路を検討する。
ポイントはカウント制御用の入力を持っているため、マルチプレクサーでインクリメント処理か入力バイトの上書き処理かを選択します。
インクリメント処理には加算器を用います。
カント制御信号をOFFからONにすると、内部の記憶が上書きされた後に、インクリメントが始まります。これを実現するために8ビットレジスターを1つ用意します。
2:回路を組む
以上を踏まえて回路を組むと次の通りになります。
3:テストする
[Run]ボタンを押すと高速でテストが走りますが、MEMORYとOUTPUTSの数値に注目してください。どちらも1ずれた状態でインクリメントされていく様子がわかります。
クリアすると、Counterコンポーネントがアンロックされます。
Addコンポーネントのキャリーイン端子を利用する【別解】
Addコンポーネントを使って1加算するために、8 Bit Makerコンポーネントを通じて1バイトデータの0000 0001bにしています。
Addコンポーネントの「キャリーインが使わずに空いていること」、「キャリーインは1ビットであること」、「キャリーインは単純に加算として使われること」といったことから、キャリーインにONコンポーネントを直結すれば+1するAddコンポーネントが完成します。
これで回路がすっきりしました。
※この回路のゲートスコアは161、遅延スコアは110です。
ゲートスコアを改善化する【別解2】
複雑になった分、スコアが改善されます。
この回路のゲートスコアは55、遅延スコアは20です。
実績「Binary Counter」はNANDスコア65以下が条件ですので、この回路によって実績を解除できます。