当サイトの一部ページには、アフィリエイト・アドセンス・アソシエイト・プロモーション広告を掲載しています。

Amazonのアソシエイトとして、Security Akademeiaは適格販売により収入を得ています。

広告配信等の詳細については、プライバシーポリシーページに掲載しています。

消費者庁が、2023年10月1日から施行する景品表示法の規制対象(通称:ステマ規制)にならないよう、配慮して記事を作成しています。もし問題の表現がありましたら、問い合わせページよりご連絡ください。

参考:令和5年10月1日からステルスマーケティングは景品表示法違反となります。 | 消費者庁

Counter【Turing Complete編】

2023年10月18日

Counterステージ

Counterステージのゴールは、1tickで1ずつ増えていくカウンター回路を作ることです。

入力・カウント制御:1ビット
ONのとき、他方の入力1バイトからスタートする(上書きする)。
OFFのとき、直前のバイトデータをインクリメントし続ける。
・Input:1バイト、インクリメント対象のバイトデータ
出力・Output:1バイト、インクリメントされたバイトデータ
Counter回路の入出力

※クロック信号の入力は存在せずに、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以下が条件ですので、この回路によって実績を解除できます。