1
Organization

ALU Controlを実装していてパタヘネRISC-V版の誤りに気づいた件

パタヘネRISC-V版(David A. Patterson and John L. Hennessy: Computer Organization and Design: The Hardware/Software Interface: RISC-V Edition, Morgan Kaufmann Publishers, 2017)にしたがって,ALU ControlをSystemVerilogで実装したのですが,書籍の誤りに気づきました.

出来上がったコード

alu_control_rv32i.sv
module alu_control_rv32i(
    input logic [31:0] inst,
    input logic valid_inst,
    input logic [1:0] alu_op,
    output logic [3:0] alu_ctl
);

    logic [3:0] f;

    always_comb begin
        f = {inst[30], inst[14:12]};

        case (valid_inst)
            1: begin
                begin
                    alu_ctl[0] = (alu_op[1] & (f[1] & ~f[0]));
                    alu_ctl[1] = (~(alu_op[1]) | ~(f[2]));
                    alu_ctl[2] = (alu_op[0] | (alu_op[1] & f[3]));
                    alu_ctl[3] = 0;
                end
            end

            0: begin
                alu_ctl = 0;
            end
        endcase
    end

endmodule

書籍の誤りについて

Appendix C: Mapping Control to Hardware の C.2 Implementing Combinational Control Units の記載のFigure C.2.3が誤っていました.どのように訂正するかについては,前述のSystemVerilogのソースコードから察してください.

新規登録して、もっと便利にQiitaを使ってみよう

  1. あなたにマッチした記事をお届けします
  2. 便利な情報をあとで効率的に読み返せます
ログインすると使える機能について
zacky1972
北九州市立大学 国際環境工学部 准教授 / Elixir 推し / fukuoka.ex / Pelemay シリーズ / ZEAM / 技術相談,共同研究依頼など,随時受付ます
fukuokaex
エンジニア/企業向けにElixirプロダクト開発・SI案件開発を支援する福岡のコミュニティ

コメント

この記事にコメントはありません。
あなたもコメントしてみませんか :)
新規登録
すでにアカウントを持っている方はログイン
1