Nand to Tetris Unit 5 Computer Architecture メモ書き
課題のCPU作成で手を動かす前に考えをまとめる。
NAND 2 TETRISで作成CPUのインプットはinstruction, inM, resetになる。
instrucition: 4章の機械語のC命令, A命令に相当する16bitバイナリーデータになる。
inM: 4章のM registerで、メモリーからのインプットになる
registerやMUXの上や下から生えているC: Hack computerの仕様に準拠して実装していくことになる。つまり、selecterで分岐させたいのか、registerでロードさせたいのかinstructionから読み解いて実際にHDLで書く必要がある。
reset: プログラムカウンターを0に戻すためのパラメータになる。
instruction → MUX16 → A register
outALL →
instructionの後に、MUX16が続くのは、A registerへの書き込みパターンが2種類あるからである。
1つは、instructionから @hogehoge といった命令がくるパターンこれは A registerへの書き込み内容がinstruction上に直接存在するパターンである。
2つめは、ALUのcomp結果(outALU)である。これは instuctionが A=Dなどの命令がくるパターンで、ALUの計算結果をA registerに書き込むパターンになる。
つまり、MUX16のセレクターは、instructionの命令に応じて、この二つを使い分けるために存在している。
A registerの後に続くのは、ALUに渡す場合とプログラムカウンターに渡す2パターンになる。
パターン1 :
A register → MUX16 → ALU
M register(in M) →
パターン1は、ALUに渡すパラメータをA register か M register から渡すかをinstructionの文脈から判断してMUX16を実装していく必要がある。
パターン2 :
A register → Program Counter
パターン2のプログラムカウンターは instructionにJMP命令が含まれていたなどに(下の例など)、A命令やC命令(左辺のDestにAレジスタが含まれたいた場合など)で宣言されたAレジスタの出力から次に実行したいプログラムのアドレスを取得してジャンプさせるためにAレジスターの後ろにPCが存在している。
@hogehoge
0;JMP