Program Counter【NandGame編】
はじめに
いつもブログをご覧いただきありがとうございます。
コーストFIRE中のIPUSIRONです😀
Program Counterレベル
Program Conterレベルのゴールは、プログラムカウンターの回路を組むことです。
入力st=0のとき、内部のPC値をインクリメントします。
割り込み(sw=1かつmd=1)が発生した際は、PC値をゼロに初期化します。
![](https://akademeia.info/wp-content/uploads/2023/12/program_counter1.png)
Program Counterレベルを解く
直前に解いたRegister with backupレベルの回路に対応するregisterコンポーネントが用意されているので、キャンバスに配置します。
![](https://akademeia.info/wp-content/uploads/2023/12/program_counter2.png)
![](https://akademeia.info/wp-content/uploads/2023/12/program_counter3.png)
PC値をインクリメントする処理を組み込みます。
![](https://akademeia.info/wp-content/uploads/2023/12/program_counter5.png)
指定アドレスにジャンプする仕組みとして、入力側にj端子とX端子があります。jはjumpフラグだと解釈して、セレクターで上書きするPC値を切り替えるようにします。
![](https://akademeia.info/wp-content/uploads/2023/12/program_counter4.png)
入力側のsb端子、sw端子、md端子をそのままregisterコンポーネントの同一名のピンに直結します。
![](https://akademeia.info/wp-content/uploads/2023/12/program_counter6.png)
リセット時にはPC値をゼロにするので、registerコンポーネントのX0ピンには0を与えます。
![](https://akademeia.info/wp-content/uploads/2023/12/program_counter7.png)
registerコンポーネントは、st=1のときの挙動を期待しているので、常に1を与えておきます。
![](https://akademeia.info/wp-content/uploads/2023/12/program_counter8.png)
テストにパスすると、クリアになります。
![](https://akademeia.info/wp-content/uploads/2023/12/program_counter9.png)