CPU学习

四阶段“学练一体”路线图

第一阶段:建立数字逻辑与CPU全栈直觉(1-2个月)

核心:从开关电路到可运行程序的完整计算机。

  • :《编码》 + Nand2Tetris 课程(Part I)
  • 必做 Nand2Tetris 配套实验。这是“边学边模拟”的典范:
    • 实验1-5:使用课程提供的硬件模拟器,用逻辑门搭建组合/时序电路,最终构成一个完整的CPU和内存
    • 实验6-7:为你刚搭建的CPU编写汇编器,并让CPU执行汇编程序。
    • 即时反馈:你写的每一行HDL或汇编代码,都可以在图形化模拟器中单步执行,观察每一个引脚、寄存器、内存单元的状态变化。

第二阶段:深入CPU微架构与流水线(2-3个月)

核心:理解现代CPU的基石——流水线,及其带来的挑战与解决方案。

  • :《计算机组成与设计》第4、5、6章(处理器与流水线)。
    1. 图形化仿真(首选入门)
      • 工具Digital​ 或 Logisim Evolution
      • 任务:在仿真软件中,用逻辑门和基本元件搭建一个支持5级流水线(取指、译码、执行、访存、写回)的RISC-V CPU
      • 模拟重点:直观地观察数据冒险(Data Hazard)如何发生,并通过插入流水线气泡前向旁路(Forwarding)来解决它。可视化是理解流水线的绝佳方式。
    2. 硬件描述语言仿真(进阶)
      • 工具Icarus Verilog / Verilator​ 配合 GTKWave
      • 任务:用Verilog实现上述流水线CPU,编写测试平台(Testbench),通过波形图(Waveform)精确观察每个时钟周期下,信号、数据通路和控制信号的变化。这是工业界的标准验证方法。

第三阶段:解析现代CPU高级特性(3-4个月)

核心:拆解缓存、分支预测、乱序执行等性能引擎。

  • :《计算机体系结构:量化研究方法》第2、3、4章。
    1. 缓存(Cache)模拟
      • 工具自己用C/Python编写一个简单的Cache模拟器,或使用 dineroIV​ 等教学工具。
      • 任务:输入一段内存地址访问轨迹(trace),模拟不同容量、关联度、块大小的Cache,统计命中率/失效率。亲手验证“时间局部性”和“空间局部性”原理
    2. 分支预测模拟
      • 任务:编写代码模拟饱和计数器(BHT)​ 和两级自适应预测器,用真实程序的分支trace测试,比较预测准确率。
    3. 乱序执行(OoO)核源码分析
      • 工具Verilator​ 或阅读 RTL 代码。
      • 项目:下载一个中等复杂度的开源乱序执行核,如 CVA6​ 或 BOOM
      • 任务不急于理解全部,而是聚焦一个模块,如重排序缓冲(ROB)。在测试平台上运行一个简单程序,通过波形图或打印日志,跟踪一条指令从派发到 ROB,到执行完成,到提交的完整生命周期。这是理解OoO最直接的方式。

第四阶段:FPGA平台全系统集成与验证(2-3个月+)

核心:将CPU放入真实系统,与软件协同工作。

  • :SoC集成、总线协议、软硬件接口。
  • :在你的 正点原子达芬奇 Pro(Artix-7)FPGA​ 上实战:
    1. CPU集成:使用 LiteX​ 框架,将 VexRiscv​ 或 PicoRV32​ CPU 核,与内存控制器(MIG)、UART、定时器等外设集成,生成一个完整的SoC。
    2. 软硬件协同模拟:在综合到FPGA前,用 Verilator 对生成的整个 SoC 的 Verilog 进行协同仿真。可以同时运行C语言测试程序,验证CPU与外设的交互。
    3. 上板验证:将比特流下载到FPGA,通过串口与你的SoC交互。最激动人心的一步:将你之前移植的 xv6​ 内核,或一个简单的裸机程序,加载到DDR内存中,并看到它在你自己构建的CPU上成功启动和运行。

🛠️ 模拟工具链推荐(从易到难)

工具
类型
最佳学习阶段
核心优势
Nand2Tetris硬件模拟器
图形化/软件
第一阶段
零门槛,抽象恰到好处,完美匹配课程,即时反馈。
Digital / Logisim
图形化数字电路仿真
第二阶段
可视化数据流,拖拽搭建,理解流水线、冒险的绝佳工具。
Icarus Verilog + GTKWave
HDL仿真与波形查看
第二、三阶段
工业标准流程,通过波形调试,理解时钟精确行为。
Verilator
将Verilog转为C++模型
第三、四阶段
仿真速度极快,适合与软件一起做大规模协同仿真。
你的FPGA开发板
物理硬件
第四阶段
终极验证,获得真实的时序、资源使用和性能反馈。

💡 高效“学练一体”心法

  1. 最小闭环:每学一个概念(如“前向旁路”),立即在模拟器中实现一个能触发该场景的最小测试用例,并验证解决方案。不求大而全,但求通。
  2. 提问驱动:在模拟前,先问自己:“如果XXX发生,我认为电路/CPU会表现出YYY行为”。然后用模拟去验证或证伪你的预测。差异点就是知识的深化处。
  3. 利用开源测试:学习复杂CPU(如CVA6)时,先运行其自带的定向测试(directed test)和汇编测试,看波形,理解每个测试想要验证什么场景。
  4. 记录与复盘:为每个实验项目写简短的笔记,记录:设计目标、关键思路、遇到的“坑”及解决方法。这是将实践转化为深层理解的关键。

立即可以开始的行动

  1. 访问 nand2tetris.org,下载课程软件,今天就开始第一章的实验。
  2. 在电脑上安装好 Digital​ 和 Icarus Verilog​ 工具链。

总结:这条路径让你始终“手脑并用”。Nand2Tetris​ 建立全栈直觉,Digital/Verilog仿真​ 深入微架构细节,自写模拟器​ 理解高级特性,最终在 FPGA上集成运行OS​ 完成闭环。每个阶段,你都能看到、摸到、验证你所学的理论,这是最快也是最扎实的学习方式。

Mac(Apple Silicon)​ 是学习 CPU 设计的优秀平台。所有核心的模拟和开发工具都有成熟的 macOS 支持方案。下面为你整理一份 “学练一体”环境的完整安装指南

✅ 核心工具链安装(全部原生支持 Apple Silicon)

第一步:安装基础包管理器 Homebrew

这是 macOS 上安装开发工具的首选方式。打开终端(Terminal),执行以下命令:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

安装完成后,按照终端提示执行两行 echo 'eval...'命令,将 Homebrew 添加到环境变量。

第二步:分阶段安装学习工具

阶段一:数字逻辑与全栈仿真

工具:Digital(图形化数字电路仿真器)

  1. 下载并运行 Digital
    • 从 GitHub Releases下载 Digital.zip
    • 解压后,进入文件夹,双击 Digital.jar运行。
    • 若提示“无法验证开发者”:按住 Control键点击文件 → 选择“打开” → 点击“打开”即可。
  2. 替代方案(如果 Digital 遇到问题):使用 Logisim Evolution,同样支持 macOS,安装方式类似。

安装 Java 运行时(Digital 基于 Java):

brew install --cask temurin17  # 安装 Java 17

阶段二:CPU 微架构与 HDL 仿真

工具集:Icarus Verilog(编译仿真) + GTKWave(查看波形)

  1. 功能iverilog将你的 Verilog 代码编译为仿真程序,vvp运行它并生成波形文件(.vcd),gtkwave图形化显示波形。

验证安装

iverilog -v  # 应显示版本号
gtkwave --version

一键安装

brew install icarus-verilog
brew install --HEAD randomplum/gtkwave/gtkwave  # 专门适配 macOS 新版本的 GTKWave

工具:Verilator(高性能仿真与 linting)

brew install verilator

验证:verilator --version。Verilator 能将 Verilog 转换为 C++ 模型,仿真速度极快,适合复杂 CPU 设计的协同仿真。

阶段三:高级特性分析与 RISC-V 工具链

RISC-V 交叉编译工具链(用于编译运行在 CPU 上的程序):

brew tap riscv-software-src/riscv
brew install riscv-tools

验证:riscv64-unknown-elf-gcc --version

阶段四:FPGA 开发与 SoC 集成

开源 FPGA 工具链(OSS CAD Suite):由于 Xilinx Vivado 没有​ macOS 原生版本,对于你的正点原子达芬奇 Pro(Xilinx Artix-7),有以下方案:

方案
描述
适用场景
虚拟机(推荐)
使用 Parallels Desktop​ 或 UTM​ 安装 Ubuntu Linux,然后在虚拟机中安装完整的 Vivado。性能较好,环境最完整。
需要完整的 Vivado 进行综合、布局布线、生成比特流。
Docker + X11
在 Docker 容器中运行 Vivado,通过 X11 转发显示 GUI。配置较复杂。
轻量级使用,适合已有 Docker 经验的用户。
远程服务器
使用云服务器或另一台装有 Vivado 的 Linux 主机进行开发。
本地 Mac 只作为终端和代码编辑器。

对于学习 CPU 设计,一个更轻量且高效的选择是:使用 LiteX​ 和 VexRiscv,它们主要依赖 Python 和可移植的构建工具。你可以在 macOS 上完成 大部分开发和仿真,仅在最后生成比特流时,通过虚拟机或远程服务器运行 Vivado。

# 安装 LiteX 相关依赖
pip install meson ninja
brew install wget git make python3
# 克隆并安装 LiteX
git clone https://github.com/enjoy-digital/litex.git
cd litex
./litex_setup.py --init --install

第三步:集成开发环境(可选但推荐)

VS Code​ + 扩展:

  1. Verilog-HDL/SystemVerilog:语法高亮、代码片段。
  2. TerosHDL:更强大的 HDL 开发支持(linting、波形查看等)。
  3. PythonC/C++:用于编写测试和工具脚本。

📦 工具与学习阶段对应表

学习阶段
核心工具
macOS ARM 安装方法
用途
阶段一
数字逻辑与全栈
Digital / Logisim
Homebrew 安装 Java + 下载 Jar 包
图形化搭建 CPU 数据通路,可视化仿真。
阶段二
CPU 微架构
Icarus Verilog + GTKWave
brew install icarus-verilog
brew install --HEAD randomplum/gtkwave/gtkwave
编写 Verilog 代码,仿真并查看波形,调试流水线。
阶段三
高级特性分析
Verilator
RISC-V 工具链
brew install verilator
brew install riscv-tools
高性能仿真复杂 CPU;编译运行在 CPU 上的测试程序。
阶段四
FPGA 集成
LiteX + VexRiscv
(+ Vivado 虚拟机)
macOS 原生安装 LiteX
虚拟机运行 Vivado
构建 SoC,生成比特流,上板验证。

🚀 快速验证安装

安装完成后,可以创建一个简单的测试来验证工具链:

Verilator 测试

verilator --cc test.v --exe --build  # 应成功生成 C++ 模型

Verilog 仿真测试

echo 'module test(input clk, output reg [7:0] cnt); always @(posedge clk) cnt <= cnt + 1; endmodule' > test.v
echo 'module tb; reg clk=0; wire [7:0] cnt; test uut(clk, cnt); initial begin $dumpfile("test.vcd"); $dumpvars; #100 $finish; end always #5 clk=~clk; endmodule' > tb.v
iverilog -o sim test.v tb.v && vvp sim
gtkwave test.vcd  # 应能看到波形

⚠️ 注意事项

  1. ARM 原生支持:以上 Homebrew 安装的包均为 ARM 原生版本,性能良好。
  2. GTKWave 问题:如果 brew install --HEAD randomplum/gtkwave/gtkwave失败,可尝试从 SourceForge下载旧版 .app直接运行。
  3. Vivado 替代:对于 Xilinx FPGA,最终比特流生成仍需 Vivado。建议设置一个 Ubuntu 虚拟机(Parallels Desktop 或免费 UTM)专用于此步骤。日常仿真和开发完全可在 macOS 下进行。
  4. 开源工具链:如果你的 FPGA 是 Lattice iCE40​ 系列(如 TinyFPGA),则可以使用 OSS CAD Suite(yosys + nextpnr)在 macOS 上完成全流程,无需虚拟机。

🎯 立即开始

建议你按以下顺序安装和验证:

  1. 今天:安装 Homebrew → Icarus Verilog + GTKWave → 运行上面的测试,确保仿真环境就绪。
  2. 本周内:安装 Digital,开始 Nand2Tetris 的实验。
  3. 后续:根据学习进度,安装 Verilator 和 RISC-V 工具链。

你的 Mac ARM 电脑完全能够胜任从数字逻辑到复杂 CPU 设计的全流程学习和仿真。唯一需要虚拟机的只有针对 Xilinx FPGA 的最终比特流生成步骤,而这通常只占学习过程的很小一部分时间。祝你学习顺利!