我设计了一个基于半字节的Verilog CPU,用于构建科学计算器
摘要
该项目使用FPGA在硬件中实现了一个功能齐全的科学计算器,包括自定义软CPU、微码固件和支持工具。它提供了一个基于Web的模拟器和开源的Verilog代码。
查看缓存全文
缓存时间: 2026/05/15 18:33
gdevic/FPGA-Calculator
来源:https://github.com/gdevic/FPGA-Calculator
从逻辑门到计算器
该项目使用 FPGA 在硬件上实现了一个功能齐全的科学计算器。它包含一个自定义软 CPU、微码固件以及配套工具。
完整故事请参见博客。
在网页浏览器中尝试:
- 无调试器版本 (https://baltazarstudios.com/files/calculator/Calculator.html)
- 有调试器版本 (https://baltazarstudios.com/files/calculator-d/Calculator.html)
截图
项目结构
| 文件夹 | 描述 |
|---|---|
verilog/ | CPU、ALU、I/O 及测试台架的 SystemVerilog 源文件 |
ucode/ | 软 CPU 的微码(固件) |
quartus/ | 用于 FPGA 综合的 Quartus 项目文件 |
modelsim/ | ModelSim 仿真设置 |
Qt/ | 基于 Qt 的仿真器和调试器(使用 Verilator) |
calctest/ | 硬件验证的命令行测试框架(使用 Verilator) |
tools/ | 微码的汇编器和脚本编译器 |
Pathfinding/ | 算法研究与验证项目 |
快速开始
体验计算器最快的方式是构建 Qt 仿真器:
# 在 WSL2 中
cd /mnt/c/Projects/FPGA-Calculator/verilog
make qt
然后打开 Qt/Calculator.pro 到 Qt Creator 中,并选择 “Desktop Qt MSVC2022 64 Bit” 进行构建。
所需工具
根据您的目标安装以下工具:
| 工具 | 用途 | 备注 |
|---|---|---|
| Verilator | Verilog 仿真 | Qt 仿真器必需 |
| Qt | 桌面/WebAssembly/Android 应用 | 版本 6.9+ |
| Quartus | FPGA 综合 | Cyclone II 需要 13.0 SP1 版本 |
| ModelSim | 波形仿真 | 可选 |
| Visual Studio 2022 | Qt 的 C++ 编译器 | 社区版 |
| Python 3 | 汇编器及工具 |
Verilator 设置
Verilator 运行在 WSL2(适用于 Linux 的 Windows 子系统)中。项目源文件位于 Windows 分区,并从 WSL2 访问。
| 目标 | Verilator 版本 | 备注 |
|---|---|---|
| 桌面 (Qt/MSVC) | 5.x (最新) | 推荐 |
| WebAssembly | 4.228 | 必需(无线程支持) |
# 安装依赖
sudo apt-get install build-essential autoconf flex libfl-dev bison
# 克隆并构建 Verilator
git clone https://github.com/verilator/verilator
cd verilator
git checkout v5.042 # 用于桌面,或 v4.228 用于 WebAssembly
autoconf
./configure
make -j8
make test
# 设置环境变量(添加到 .bashrc 中持久化)
export VERILATOR_ROOT=$(pwd)
可选安装 GtkWave 用于查看波形:
sudo apt install gtkwave
构建目标
| 目标 | 命令 | 描述 |
|---|---|---|
| Qt 仿真器 | verilog/ 中执行 make qt | 构建 Qt 桌面应用程序 |
| Calctest | verilog/ 中执行 make calctest,然后 calctest/ 中执行 make | 命令行测试框架 |
| ModelSim | verilog/ 中执行 make test_self | CPU 自测,用于 ModelSim |
| FPGA 硬件 | verilog/ 中执行 make revB | 为 RevB 板组装微码 |
各子文件夹中的 README 文件提供了详细的构建说明:
- verilog/README.md - Verilator 仿真与微码汇编
- calctest/README.md - 硬件验证命令行测试框架
- quartus/README.md - FPGA 综合与编程
- ucode/README.md - 微码源文件
寻路项目
独立的研究与验证项目:
| 文件夹 | 描述 |
|---|---|
Pathfinding/Proto/ | BCD 算术黄金参考,用于硬件验证(子模块) |
Pathfinding/Proof/ | 使用基本算术实现复杂运算的概念验证 |
Pathfinding/Methods/ | 计算器算法的 C++ 实现(已弃用) |
Pathfinding/Input/ | 数值输入状态机仿真 |
Pathfinding/Mockup/ | 键盘布局设计与用户交互测试 |
许可证
本项目采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 (https://creativecommons.org/licenses/by-nc-sa/4.0/)。
您可以自由地:
- 共享 — 以任何媒介或格式复制和分发本材料
- 改编 — 修改、转换或基于本材料进行创作
但必须遵守以下条款:
- 署名 — 您必须给出适当的署名,并指出是否进行了修改
- 非商业性使用 — 您不得将本材料用于商业目的
- 相同方式共享 — 贡献必须使用相同的许可协议分发
相似文章
Show HN: Nibble
Nibble 是一种类 C 的系统编程语言,用 3000 行 C 代码实现,无需外部依赖或堆分配即可生成 LLVM IR。它支持 defer、递归、多种类型、结构体、指针,并包含图形演示。
我用自己编写的编程语言写了一个CHIP-8模拟器
一个使用自定义编程语言Spectre编写的CHIP-8模拟器实现,作为开源项目发布在GitHub上。
构建 TD4 4 位 CPU
本文详细介绍了基于《如何构建 CPU》一书及开源 PCB 设计,亲自动手组装并测试 TD4 4 位 CPU 的过程。
20000个门电路与20 MIPS [pdf]
1990年Amdahl的历史论文,详述了由20,000个逻辑门构建的20 MIPS大型机处理器设计。
REAP 剪枝版 Nemotron-3-Super(512→256 experts)+ GRPO 微调 + FP8/AWQ,AIME 2026 90%+,附 Benchmark
社区发布:用 REAP 把 NVIDIA Nemotron-3-Super-120B 剪到 64B,再用 GRPO 做数学强化微调,最后 AWQ/FP8 量化,单卡 H100/RTX PRO 6000 即可跑到 AIME 2026 90%+。