28日目 ~プログラムカウンタ~
こんにちは!今日はデジタル回路の話題で更新します。
今回紹介するのは、プログラムカウンタ(略して、PC)です。
PCは、実行する命令のアドレスを指し示し、さらにそれを更新するための重要な順序回路になります。
そんな回路なので、値を保持するDFFの周りに論理回路を組み合わせたものになります。
要件は3つ
- アドレスの保持
- アドレスの更新
- ジャンプ命令のためのアドレスロード
これにより、CPUは命令を得たり、サブルーチンへジャンプして所定の関数を実行したりができるようになります。
それではこれをVerilogコードにしてみると...
module PC ( input [15:0] in, input load, inc, reset, clk, output [15:0] out ); wire [15:0] incload, incout, loadout, todff, loopback; // インクリメント Inc16 U0(loopback, incload); Mux16 U1(in, incload, inc, incout); // ロード Mux16 U2(incout, in, load, loadout); // リセット Mux16 U3(loadout, 16'b0, reset, todff); Register U4(todff, 1'b1, clk, loopback); assign out = loopback; endmodule
となります。
少しずつコンピュータの完成に近づいてきました!時間がまとまり次第、ALUの検証も書いていきたいと思います。
参考書籍