Make/Day

毎日なにか作ります

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の検証も書いていきたいと思います。

参考書籍