第2章 ALU 设计
第一篇 基础篇
2.1 ALU 概述#
算术逻辑单元(Arithmetic Logic Unit, ALU)是 CPU 的核心计算部件, 负责执行算术运算和逻辑运算。
2.2 基本运算#
一个基础的 ALU 需要支持以下运算:
| 运算 | 操作码 | 说明 |
|---|---|---|
| ADD | 0000 | 加法 |
| SUB | 0001 | 减法 |
| AND | 0010 | 按位与 |
| OR | 0011 | 按位或 |
| XOR | 0100 | 按位异或 |
| NOT | 0101 | 按位取反 |
2.3 实现#
module alu (
input [7:0] a,
input [7:0] b,
input [3:0] op,
output [7:0] result,
output zero,
output carry
);
always @(*) begin
case (op)
4'b0000: result = a + b;
4'b0001: result = a - b;
4'b0010: result = a & b;
4'b0011: result = a | b;
4'b0100: result = a ^ b;
4'b0101: result = ~a;
default: result = 8'b0;
endcase
end
endmoduleverilog2.4 状态标志#
除了计算结果,ALU 还需要输出状态标志:
- Zero (Z):结果为 0 时置位
- Carry (C):加法溢出或减法借位时置位
- Negative (N):结果的最高位
这些标志将被条件跳转指令使用,是实现分支逻辑的基础。