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

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

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

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

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

Computer【NandGame編】

はじめに

いつもブログをご覧いただきありがとうございます。

コーストFIRE中のIPUSIRONです😀

IPUSIRONのプロフィールを見る

Computerレベル

Computerレベルのゴールは、次のユニットを組み合わせてコンピューターを構築することです。

  • 制御ユニット(control Unit)
  • 記憶メモリー・・・RAMとレジスター
  • プログラムメモリーユニット・・・ROM。命令(1命令16ビットのデータ)の集まりをプログラムとして保持している。
  • プログラムカウンター(PC)・・・現在の命令アドレスを記憶するカウンター
  • クロックユニット(clock unit)

また、次の仕様を持つものとします。

  • ROMにおいてPCアドレスにあるデータは、制御ユニットの入力lに渡される。
  • 各クロックサイクルは、jに応じてPCを更新する。
    • j=0の場合、PCは1だけインクリメントする。
    • j=1の場合、PCはAの値で上書きされる。

Computerレベルを解く

1:用意されているコンポーネントを確認する

本レベルで使う候補となるものをピックアップします。

まずは制御ユニットに相当するcontrol unitコンポーネントです。右上の「i」を押しても詳細を表示できませんでした[1]別ブラウザーで試しても駄目だったので諦めました。

control unitコンポーネント

次は複合メモリーであるmemoryコンポーネントです。レジスターAとD、そして1つのRAMが内蔵されています。

memoryコンポーネント

ROMは読み込み専用のメモリーであり、romコンポーネントになります。各アドレスに16ビットのデータが記憶できます。

romコンポーネント

romコンポーネントは[Edit ROM]ボタンを押すと、記憶する内容を変更できます。

プログラムカウンターはcounterコンポーネントが担当します。

counterコンポーネント

クロック信号を生成するのがclockコンポーネントです。

clockコンポーネント

2:主要コンポーネントを配置する

当該回路については、入出力端子は存在しません。コンポーネントを組み合わせてキャンバス上だけで完結する回路を組むことになります。

3:clockコンポーネントを接続する

clockコンポーネントの出力clピンを接続を考えます。各コンポーネントの入力に注目してclピンにつなげます。counterコンポーネントとmemoryコンポーネントに用意されているので、2本ワイヤーが伸びることになります。

4:counterコンポーネントの入出力ピンをワイヤリングする

counterコンポーネントの出力ピンからはPCアドレス値が出力されます。このアドレス値はROMから命令を1つずつ取り出すのに使われます。そのため、romコンポーネントの入力Adに渡します。

counterコンポーネントが保持するPCアドレス値は、st=1のときにXから与えられたアドレス値で上書きします。そのアドレス値はmemoryコンポーネントの出力Aから送られてきます。

また、stピンについては、control unitコンポーネントの出力jピンと接続します。control unitコンポーネントでALU命令を処理するときは、出力jピンは内部のaluコンポーネントのjピンそのものです。一方、データ命令を処理するときは、出力jピンは0になります。

・「control unitコンポーネントのjピンが1」⇒「st=1」⇒カウンター値が上書きされる。

・「control unitコンポーネントのjピンが0」⇒「st=0」⇒カウンター値がインクリメントされる。

5:romコンポーネントの入出力ピンをワイヤリングする

ROMの出力は制御ユニットの入力lに接続することは、仕様として与えられています。

6:memoryコンポーネントの入出力ピンをワイヤリングする

先にピン数が少ない出力側を処理していきましょう。A、D、*Aという3つのピンは、名前からそのまま制御ユニットの入力ピンと接続します。

最後にmemoryコンポーネントの入力ピンを処理します。

ピン名に注目すれば、a、d、*aの3つについては、そのまま制御ユニットの出力ピンと接続できます。

あとは、残された「memoryコンポーネントの入力Xピン」と「control unitコンポーネントの出力Rピン」を接続します。

この回路は(ロジックを含まないclockを除き)4つのコンポーネントを使っており、内部的に3,725個のNandゲートで構成されています。

以上でレベルクリアになります。

References

References
1 別ブラウザーで試しても駄目だったので諦めました。