Menu Close

ALU 是什么?CPU 是如何真正“计算”的(附完整 Verilog)

 

🧠 ALU 是什么?CPU 是如何真正“计算”的(附完整 Verilog)

如果说 Register File 是“数据来源”,
那么 ALU 就是——计算发生的地方

CPU 里,所有计算,本质都经过一个模块:

👉 ALU(Arithmetic Logic Unit)


🔍 一、什么是 ALU?

ALU = 算术逻辑单元

👉 它的作用很简单:

输入两个数据 → 执行操作 → 输出结果


🧩 在 RV32I 中,ALU 负责:

  • 加法(ADD / ADDI)
  • 减法(SUB)
  • 逻辑(AND / OR / XOR)
  • 比较(SLT / SLTU)
  • 位移(SLL / SRL)

👉 所有指令,最终都会变成:


⚙️ 二、ALU 的基本结构

Image

Image

Image

Image

Image

Image

一个最小 ALU 包含:

  • 输入 A(32-bit)
  • 输入 B(32-bit)
  • 控制信号(决定做什么运算)
  • 输出 Result(32-bit)

👉 核心就是:


🔄 三、ALU 是如何工作的?

例如:


执行流程:

1️⃣ 从寄存器读取 x1 → A
2️⃣ 从寄存器读取 x2 → B
3️⃣ 控制信号 = ADD
4️⃣ ALU 输出 A + B
5️⃣ 写回 x3


👉 所有复杂程序,最终都归结为这些操作


🧠 四、控制信号(关键点🔥)

ALU 并不知道要做什么

👉 是 Control Unit 告诉它

例如:

指令 ALU 控制
ADD ADD
SUB SUB
AND AND
OR OR

👉 所以:

ALU = 执行者
Control Unit = 指挥者


💻 五、完整 Verilog 实现(最小 RV32I ALU)

下面是一个可直接使用的 ALU 模块👇


🔥 六、关键设计点(必须理解)

1️⃣ 组合逻辑


👉 没有时钟
👉 输入变化 → 输出立即变化


2️⃣ zero 信号(分支用)


👉 用于:


3️⃣ 位移操作


👉 RV32I 只使用低5位作为 shift amount


🚨 七、常见错误

❌ 忘记 signed 比较

👉 SLT 必须用 $signed


❌ shift 用错位宽

👉 会导致错误结果


❌ 控制信号不统一

👉 ALU 和 Control Unit 对不上


⚡ 八、从“代码”到“电路”

你写的 Verilog:


在 FPGA 里变成:

👉 加法器电路
👉 门级逻辑


👉 关键认知:

你不是在写程序
你在定义电路行为


🚀 九、下一步

接下来你将进入最核心部分:

👉 《Datapath 是什么?一张图看懂 CPU》

你将:

  • 把 Register + ALU + Memory 连起来
  • 构建完整数据流
  • 接近一个真正的 CPU

📌 总结

  • ALU 是 CPU 的计算核心
  • 所有运算都在这里完成
  • 由 Control Unit 控制
  • 是 RV32I CPU 的关键模块

👉 一句话:

ALU 不是“计算工具”,它是“计算本身”

 

除教程外,本网站大部分文章来自互联网,如果有内容冒犯到你,请联系我们删除!
Posted in RISC-V教程