1. 从开关到逻辑门运算器的原子世界当你按下电灯开关时电流通过金属触点完成通路这个简单的开/关状态正是计算机世界的基石。在硬件设计中晶体管就是这样的微观开关而逻辑门则是用晶体管搭建的三种基础电路与门AND就像串联的两个开关只有两个输入都为1时输出才为1或门OR类似并联的开关任一输入为1时输出即为1非门NOT最简单的反向器输出总是与输入相反用Verilog硬件描述语言可以这样定义与门module AND_gate(input a, b, output y); assign y a b; endmodule实际硬件中CMOS工艺的与非门NAND通常作为基础构建块。下图展示了一个用MOS管实现的与非门电路当两个输入均为高电平时输出才会拉低我曾用示波器观察过逻辑门的信号传播延迟——当输入信号频率达到100MHz时输出信号会出现约2ns的延迟。这个看似微小的数字在GHz级CPU中会成为制约性能的关键因素。2. 加法器的进化之路2.1 一位全加器的诞生将三个逻辑门巧妙组合就能实现最基本的加法单元。一个全加器需要处理三个输入A、B和进位Cin产生两个输出和S与进位Cout。其真值表如下ABCinSCout00000010101001011001...省略其他组合...用Verilog描述的逻辑表达式assign S A ^ B ^ Cin; assign Cout (A B) | ((A ^ B) Cin);2.2 串行进位的困境将8个全加器首尾相连就构成了串行进位加法器。我在Xilinx FPGA上实测发现这种结构完成8位加法需要约16ns因为进位信号要像多米诺骨牌一样依次传递。当位数增加到32位时延迟会线性增长到64ns。2.3 并行进位的突破超前进位加法器CLA通过预判进位打破了这一限制。其核心思想是同时计算所有位的进位用更多的逻辑门换取时间// 4位超前进位生成逻辑 assign G[0] A[0] B[0]; assign P[0] A[0] ^ B[0]; assign C[1] G[0] | (P[0] Cin); assign G[1] A[1] B[1]; assign P[1] A[1] ^ B[1]; assign C[2] G[1] | (P[1] G[0]) | (P[1] P[0] Cin); // 类似逻辑扩展到更高位...在TSMC 7nm工艺下64位CLA的延迟仅0.3ns比串行结构快200倍以上。但代价是面积增加约5倍这就是硬件设计典型的时空权衡。3. ALU的完整架构3.1 算术单元的扩展现代ALU除了加法器还集成有桶形移位器用多级复用器实现单周期移位乘法阵列采用Booth编码和Wallace树压缩比较器通过减法结果判断大小关系一个支持8种运算的ALU控制信号编码示例S[2:0]运算类型000加法001带进位加010减法011逻辑与......3.2 标志位的生成逻辑状态寄存器是CPU决策的关键其核心标志包括零标志ZF所有结果位或运算进位标志CF最高位进位输出溢出标志OF最高位进位与次高位进位异或always (*) begin ZF (result 0); SF result[WIDTH-1]; // 符号位 OF (A[WIDTH-1] B[WIDTH-1]) (result[WIDTH-1] ! A[WIDTH-1]); end在x86架构中JZ为零跳转等指令就是通过检测这些标志位来实现条件分支。4. 从ALU到处理器4.1 数据通路的构建将ALU与寄存器堆、内存接口连接就形成了基本的数据通路。典型RISC-V流水线中ALU在EX阶段完成计算。下图展示了五级流水线中ALU的位置取指(F) - 译码(D) - 执行(E) - 访存(M) - 回写(W) ↑ ALU4.2 性能优化技术现代处理器通过多种技术提升ALU吞吐量多端口寄存器堆允许同时读取多个操作数旁路转发解决数据冒险避免流水线停顿多发射ALU如Intel的AVX-512单元可同时执行16个32位加法在SPECint2017基准测试中采用4个ALU的处理器比单ALU设计性能提升可达3.8倍但功耗也相应增加约2.5W。5. 硬件设计实践指南5.1 Verilog编码规范始终使用非阻塞赋值描述时序逻辑组合逻辑用always (*)或assign语句为关键路径添加寄存器级切割module ALU #(parameter WIDTH32) ( input [WIDTH-1:0] A, B, input [2:0] opcode, output reg [WIDTH-1:0] result, output ZF, CF, OF ); always (*) begin case(opcode) 3b000: result A B; 3b001: result A - B; 3b010: result A B; // 其他操作... endcase end assign ZF (result 0); // 其他标志位生成... endmodule5.2 时序收敛技巧对长进位链进行流水线分割关键路径采用进位选择加法器使用Synopsys Design Compiler进行逻辑综合时设置合理的时钟约束在28nm工艺下一个优化良好的64位ALU主频可达2.5GHz而未经优化的设计可能只能跑到1.2GHz。这提醒我们硬件设计需要平衡速度和面积。