tiny-gpu入门4: ALU模块分析

ALU模块代码如下:

bash 复制代码
// ARITHMETIC-LOGIC UNIT
// > Executes computations on register values
// > In this minimal implementation, the ALU supports the 4 basic arithmetic operations
// > Each thread in each core has it's own ALU
// > ADD, SUB, MUL, DIV instructions are all executed here
module alu (
    input wire clk,
    input wire reset,
    input wire enable, // If current block has less threads then block size, some ALUs will be inactive

    input reg [2:0] core_state,

    input reg [1:0] decoded_alu_arithmetic_mux,
    input reg decoded_alu_output_mux,

    input reg [7:0] rs,
    input reg [7:0] rt,
    output wire [7:0] alu_out
);
    localparam ADD = 2'b00,
        SUB = 2'b01,
        MUL = 2'b10,
        DIV = 2'b11;

    reg [7:0] alu_out_reg;
    assign alu_out = alu_out_reg;

    always @(posedge clk) begin 
        if (reset) begin 
            alu_out_reg <= 8'b0;
        end else if (enable) begin
            // Calculate alu_out when core_state = EXECUTE
            if (core_state == 3'b101) begin 
                if (decoded_alu_output_mux == 1) begin 
                    // Set values to compare with NZP register in alu_out[2:0]
                    alu_out_reg <= {5'b0, (rs - rt > 0), (rs - rt == 0), (rs - rt < 0)};
                end else begin 
                    // Execute the specified arithmetic instruction
                    case (decoded_alu_arithmetic_mux)
                        ADD: begin 
                            alu_out_reg <= rs + rt;
                        end
                        SUB: begin 
                            alu_out_reg <= rs - rt;
                        end
                        MUL: begin 
                            alu_out_reg <= rs * rt;
                        end
                        DIV: begin 
                            alu_out_reg <= rs / rt;
                        end
                    endcase
                end
            end
        end
    end
endmodule

ALU会基于控制信号:2:0 core_state、decoded_alu_output_mux和1:0decoded_alu_arithmetic_mux,对寄存器rs和rt的值执行具体的计算。

core_state为执行态(EXECUTE)的话开始执行具体的操作,所有状态如下:

bash 复制代码
    localparam IDLE = 3'b000, // Waiting to start
        FETCH = 3'b001,       // Fetch instructions from program memory
        DECODE = 3'b010,      // Decode instructions into control signals
        REQUEST = 3'b011,     // Request data from registers or memory
        WAIT = 3'b100,        // Wait for response from memory if necessary
        EXECUTE = 3'b101,     // Execute ALU and PC calculations
        UPDATE = 3'b110,      // Update registers, NZP, and PC
        DONE = 3'b111;        // Done executing this block

只有EXECUTE态才执行操作。

接下来有两个分支以及两个控制信号:decoded_alu_output_mux和1:0decoded_alu_arithmetic_mux,decoded_alu_output_mux用来控制ALU的操作,decoded_alu_arithmetic_mux控制执行的是具体的运算指令(即加减乘除)。

decoded_alu_output_mux为0则ALU会执行具体的运算指令,为1的话则会执行BRnzp指令,如果NZP寄存器符合指令中的' NZP '条件,则分支指令跳转到另一行程序内存,以这种方式来实现循环和条件指令的执行(CMP指令结果判定)。

最终结果输出到alu_out 。

相关推荐
Smoothcloud_润云8 天前
Hermes Agent 的上下文记忆机制:一个开源 Agent 是怎么"记住"你的
人工智能·agent·gpu
RainbowC012 天前
CUDA软件实现跨线程块同步
gpu
xingyuzhisuan15 天前
算力租赁平台 GPU 资源隔离方案:显存抢占问题深度排查与解决
大数据·云计算·gpu算力
算力百科小星16 天前
2026 算力平台测评:智星云、Vast.ai、Lambda Labs 口碑与实力对比
图形渲染·gpu算力·gpu租用
劈星斩月16 天前
从“画图”到“算数”:GPU如何站上AI时代的C位
人工智能·gpu
xingyuzhisuan16 天前
8 卡 / 16 卡 GPU 服务器机架布线与高速互联带宽优化技术详解
运维·服务器·云计算·gpu算力
有来有去952716 天前
【训推框架】Vime-大规模 LLM/VLM 强化学习训练框架
人工智能·深度学习·语言模型·gpu算力·vllm
黄狗操作员16 天前
NCCL 2.29 官方文档参数解读
语言模型·云计算·运维开发·gpu算力
逻极17 天前
Windows 平台 Ollama AMD GPU 一键编译指南:基于 ROCm 7.1 的自动化实战
人工智能·windows·stm32·自动化·gpu·amd·ollama
向量引擎18 天前
AI API 正在进入“请求生命周期治理”阶段:从模型迁移、Agent 接入到成本与安全排错的工程化方法
java·人工智能·python·aigc·ai编程·ai写作·gpu算力