alu.v

这段代码实现了一个算术逻辑单元(ALU),用于处理各种算术和逻辑操作,以及分支条件的判断。以下是该模块的主要功能和结构介绍:

输入信号

  1. 时钟和复位
    • clk: 时钟信号,用于同步操作。
    • reset: 复位信号,用于初始化状态。
  1. 操作数
    • prega_in: 第一个操作数(寄存器A),64位宽。
    • pregb_in: 第二个操作数(寄存器B),64位宽。
  1. 操作码
    • ALUop: 5位操作码,指定要执行的操作类型(如加法、减法、逻辑运算等)。
  1. 目的寄存器索引
    • pdest_idx_in: 指定运算结果存储的目标寄存器索引。
  1. 指令寄存器
    • IR_in: 当前指令的32位值,包含指令操作码和操作数信息。
  1. 下一条指令地址
    • npc_in: 下一条指令的地址,用于控制流。
  1. 重排序缓冲区索引
    • rob_idx_in: 当前操作在重排序缓冲区中的索引。
  1. 执行使能和控制信号
    • EX_en_in: 指示是否启用执行。
    • next_gnt: 控制是否允许下一个操作的信号。
    • stall: 停顿信号,指示当前操作是否需要暂停。

输出信号

  1. 运算结果
    • result_reg: 64位运算结果寄存器,保存ALU的计算结果。
  1. 分支结果
    • BR_result_reg: 单位位输出,指示是否满足分支条件(1表示分支被采取,0表示不采取)。
  1. 分支目标地址
    • BR_target_addr_reg: 64位寄存器,保存分支指令的目标地址。
  1. 目的寄存器索引
    • pdest_idx_reg: 目标寄存器的索引,指向存储运算结果的寄存器。
  1. 指令寄存器
    • IR_reg: 32位寄存器,保存当前指令,用于后续处理。
  1. 下一条指令地址
    • npc_reg: 64位寄存器,保存下一条指令的地址。
  1. 重排序缓冲区索引
    • rob_idx_reg: 当前操作在重排序缓冲区中的索引。
  1. 完成信号
    • done: 表示当前操作是否完成的信号。
    • done_reg: 完成信号的寄存器,用于同步。
  1. 授权信号
    • gnt_reg: 用于控制是否允许下一操作的信号。

主要逻辑

状态管理

运算过程

分支处理