龙芯官方五级流水MIPS源码学习

前言

有同学问我要龙芯源码,这里放一个仓库:https://github.com/trialley/loongson_MIPS_demo
另外五级流水线很常见了,在CSDN随便一搜就可以搜到很多资料,我的计组课设就是基于CSDN的资料设计的。

CPU内总线

EX module

乘法器是需要时钟的,EX模块其他部分都是是纯粹的组合电路

ALU module

ALU接口

module alu(
    input  [11:0] alu_control,  // ALU控制信号
    input  [31:0] alu_src1,     // ALU操作数1,为补码
    input  [31:0] alu_src2,     // ALU操作数2,为补码
    output [31:0] alu_result    // ALU结果
    );

控制线绑定

控制线在输入时就是独热码,故此有多少计算类型就有多少条控制线

    assign alu_add  = alu_control[11];
    assign alu_sub  = alu_control[10];
    assign alu_slt  = alu_control[ 9];
    assign alu_sltu = alu_control[ 8];
    assign alu_and  = alu_control[ 7];
    assign alu_nor  = alu_control[ 6];
    assign alu_or   = alu_control[ 5];
    assign alu_xor  = alu_control[ 4];
    assign alu_sll  = alu_control[ 3];
    assign alu_srl  = alu_control[ 2];
    assign alu_sra  = alu_control[ 1];
    assign alu_lui  = alu_control[ 0];

输出

原来所有计算都是一旦有数据输入便会输出,而ALU最终的输出是由控制线控制的多路选择器来决定的

    // 选择相应结果输出
    assign alu_result = (alu_add|alu_sub) ? add_sub_result[31:0] : 
                        alu_slt           ? slt_result :
                        alu_sltu          ? sltu_result :
                        alu_and           ? and_result :
                        alu_nor           ? nor_result :
                        alu_or            ? or_result  :
                        alu_xor           ? xor_result :
                        alu_sll           ? sll_result :
                        alu_srl           ? srl_result :
                        alu_sra           ? sra_result :
                        alu_lui           ? lui_result :
                        32'd0;

最后ID来得低几位被命名为PC,不清楚为什么会有EXPC和MEMPC,program counter不是只在取址阶段才有吗,难道是为了展示不同器件处于不同的流水线状态?

你可能感兴趣的:(龙芯官方五级流水MIPS源码学习)