Computer【NandGame編】
はじめに
いつもブログをご覧いただきありがとうございます。
コーストFIRE中の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の値で上書きされる。
![](https://akademeia.info/wp-content/uploads/2023/10/computer1.png)
![](https://akademeia.info/wp-content/uploads/2023/10/computer2.png)
Computerレベルを解く
1:用意されているコンポーネントを確認する
本レベルで使う候補となるものをピックアップします。
まずは制御ユニットに相当するcontrol unitコンポーネントです。右上の「i」を押しても詳細を表示できませんでした[1]別ブラウザーで試しても駄目だったので諦めました。。
![](https://akademeia.info/wp-content/uploads/2023/10/computer7.png)
次は複合メモリーであるmemoryコンポーネントです。レジスターAとD、そして1つのRAMが内蔵されています。
![](https://akademeia.info/wp-content/uploads/2023/10/computer3.png)
ROMは読み込み専用のメモリーであり、romコンポーネントになります。各アドレスに16ビットのデータが記憶できます。
![](https://akademeia.info/wp-content/uploads/2023/10/computer4.png)
romコンポーネントは[Edit ROM]ボタンを押すと、記憶する内容を変更できます。
![](https://akademeia.info/wp-content/uploads/2023/10/computer6.png)
プログラムカウンターはcounterコンポーネントが担当します。
![](https://akademeia.info/wp-content/uploads/2023/10/computer8.png)
クロック信号を生成するのがclockコンポーネントです。
![](https://akademeia.info/wp-content/uploads/2023/10/computer9.png)
2:主要コンポーネントを配置する
当該回路については、入出力端子は存在しません。コンポーネントを組み合わせてキャンバス上だけで完結する回路を組むことになります。
![](https://akademeia.info/wp-content/uploads/2023/10/computer10.png)
3:clockコンポーネントを接続する
clockコンポーネントの出力clピンを接続を考えます。各コンポーネントの入力に注目してclピンにつなげます。counterコンポーネントとmemoryコンポーネントに用意されているので、2本ワイヤーが伸びることになります。
![](https://akademeia.info/wp-content/uploads/2023/10/computer11.png)
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」⇒カウンター値がインクリメントされる。
![](https://akademeia.info/wp-content/uploads/2023/10/computer12.png)
5:romコンポーネントの入出力ピンをワイヤリングする
ROMの出力は制御ユニットの入力lに接続することは、仕様として与えられています。
![](https://akademeia.info/wp-content/uploads/2023/10/computer13.png)
6:memoryコンポーネントの入出力ピンをワイヤリングする
先にピン数が少ない出力側を処理していきましょう。A、D、*Aという3つのピンは、名前からそのまま制御ユニットの入力ピンと接続します。
![](https://akademeia.info/wp-content/uploads/2023/10/computer14.png)
最後にmemoryコンポーネントの入力ピンを処理します。
ピン名に注目すれば、a、d、*aの3つについては、そのまま制御ユニットの出力ピンと接続できます。
![](https://akademeia.info/wp-content/uploads/2023/10/computer15.png)
あとは、残された「memoryコンポーネントの入力Xピン」と「control unitコンポーネントの出力Rピン」を接続します。
![](https://akademeia.info/wp-content/uploads/2023/10/computer16.png)
この回路は(ロジックを含まないclockを除き)4つのコンポーネントを使っており、内部的に3,725個のNandゲートで構成されています。
以上でレベルクリアになります。
References
↑1 | 別ブラウザーで試しても駄目だったので諦めました。 |
---|