从零开始在FPGA上设计科学计算器
摘要
一系列详细的博客文章,记录了从零开始使用FPGA设计和实现科学计算器的过程,涵盖了数值方法、CPU架构、微码和硬件原型设计。
<p><a href="https://lobste.rs/s/vsrtfq/designing_scientific_calculator_from">评论</a></p>
查看缓存全文
缓存时间: 2026/05/17 22:23
# 在FPGA上从头设计科学计算器
来源: https://baltazarstudios.com/calculator/
## 章节
1. 计算器 \(1\):引言 (https://baltazarstudios.com/calculator-introduction/)
2. 计算器 \(2\):探路 (https://baltazarstudios.com/calculator-pathfinding/)
3. 计算器 \(3\):实用数值方法 (https://baltazarstudios.com/calculator-methods/)
4. 计算器 \(4\):框架 (https://baltazarstudios.com/calculator-framework/)
5. 计算器 \(5\):硬件 (https://baltazarstudios.com/calculator-hardware/)
6. 计算器 \(6\):设计CPU (https://baltazarstudios.com/calculator-cpu/)
7. 计算器 \(7\):为你刚发明的CPU编写微码 (https://baltazarstudios.com/calculator-microcode/)
8. 计算器 \(8\):从开发板到真实设备 (https://baltazarstudios.com/calculator-device/)
9. 计算器 \(9\):追逐最后一位精度 (https://baltazarstudios.com/calculator-precision/)
10. 计算器 \(10\):成功了!(https://baltazarstudios.com/calculator-conclusion/)
### 第一章 计算器 \(1\):引言 (https://baltazarstudios.com/calculator-introduction/)
这个项目的想法源于2021年2月德克萨斯州奥斯汀市停电的那一周。政府对此事的处理方式,可悲地令人难忘。依靠燃气壁炉作为唯一的热源和光源,用微弱的手机数据连接作为与外界的唯一联系,我有几天时间来思考一些新鲜有趣的事情做。我拿起我的HP-41CV,开始按键。一如既往,手感很好。我突然想自己也做一个类似的东西!
阅读本章 → (https://baltazarstudios.com/calculator-introduction/)
### 第二章 计算器 \(2\):探路 (https://baltazarstudios.com/calculator-pathfinding/)
每个严肃项目都有一个阶段,很少有人谈论或写作。它在你拥有设计之前、在你拥有架构之前、甚至在你不确定它是否可行之前就开始了。你选择一个方向,走到撞墙,然后转身另寻他路。你为了理解一些东西而构建它们,然后又抛弃它们。有时一个下午写成的工具最后用了好几年。有时一周的工作直接进了垃圾堆。有时你对自己学到的东西感到满意,就再也没有费心完成项目。这就是探路,它不是可有可无的。
阅读本章 → (https://baltazarstudios.com/calculator-pathfinding/)
### 第三章 计算器 \(3\):实用数值方法 (https://baltazarstudios.com/calculator-methods/)
第二篇文章回答了可行性的问题:是的,`tan`、`ln`、`exp` 和 `sqrt` 都可以仅用加法、减法和乘法,加上一些技巧计算出来。第三篇文章是关于如何正确计算,精度高达16位十进制数,并提供一个经过验证的参考实现,硬件最终将与之进行测试对比。
阅读本章 → (https://baltazarstudios.com/calculator-methods/)
### 第四章 计算器 \(4\):框架 (https://baltazarstudios.com/calculator-framework/)
在编写一行计算器代码之前,有一个值得问的问题:如何测试尚不存在的硬件?在本篇中,我描述了如何建立一个框架,使一个未经修改的Verilog源文件能够在四种截然不同的环境中运行:ModelSim用于信号级仿真,Verilator用于周期精确的C++建模,Qt用于带调试器控制台的桌面原型,以及WebAssembly以便同一应用程序在浏览器中运行而无需修改一行RTL。这些工具跨越了硬件和软件开发。这里使用的所有工具都是免费的。
阅读本章 → (https://baltazarstudios.com/calculator-framework/)
### 第五章 计算器 \(5\):硬件 (https://baltazarstudios.com/calculator-hardware/)
到目前为止,所有内容都停留在软件层面。这篇文章涵盖了第一块PCB订单——一个通过排线连接到EP2C5开发板的键盘矩阵和OLED显示板——以及从浏览器编辑器中的原理图到实际可以按键的板子所需的一切。仿真告诉你逻辑是正确的;硬件告诉你时序是否工作,以及零件的表现是否如数据手册所述。
阅读本章 → (https://baltazarstudios.com/calculator-hardware/)
### 第六章 计算器 \(6\):设计CPU (https://baltazarstudios.com/calculator-cpu/)
没有通用CPU拥有半字节可寻址内存和专为遍历16位BCD尾数而设计的寻址模式——所以这篇文章设计了一个。它涵盖了完整的指令集架构:12位固定长度指令、哈佛内存模型、14种ALU操作(包括从8086借鉴的BCD调整指令),以及一次添加一条指令、在Verilator中测试、让微码暴露出ISA设计缺陷的迭代过程。
阅读本章 → (https://baltazarstudios.com/calculator-cpu/)
### 第七章 计算器 \(7\):为你刚发明的CPU编写微码 (https://baltazarstudios.com/calculator-microcode/)
之前文章中的C++原型现在得到了回报:每个汇编文件都是经过验证的参考实现的直接移植,并针对数千个已知正确的向量进行了测试。这篇文章涵盖了编写完整计算器微码——数字输入、显示格式和算术函数——以及一个位于其上的小型脚本解释器,让像 y^x 这样的复杂操作简化为六行令牌。调试全部通过一个带有源码级断点、单步执行和实时寄存器查看的Qt桌面模拟器进行——因为当微码出错时,你不能简单地添加一条打印语句。
阅读本章 → (https://baltazarstudios.com/calculator-microcode/)
### 第八章 计算器 \(8\):从开发板到真实设备 (https://baltazarstudios.com/calculator-device/)
这篇文章涵盖了硬件旅程:从一个用排线连接的5美元EP2C5开发板,到一块直接焊接FPGA的定制PCB、一个3D打印外壳,以及采用HP标志性黄红色编码的键帽。两个编程连接器:JTAG用于开发期间的快速迭代,Active Serial用于持久化闪存,意味着编辑-综合-测试循环一直保持快速,直到最终设备完成。
阅读本章 → (https://baltazarstudios.com/calculator-device/)
### 第九章 计算器 \(9\):追逐最后一位精度 (https://baltazarstudios.com/calculator-precision/)
2021年的实现可以工作,但"大多数结果精确到约12位"并非一台16位BCD机器应有的表现。这篇文章涵盖了2025年的重写:从头重做算术引擎,包含适当的保护位和粘滞位跟踪、银行家舍入法、完整的三角函数套件、十个STO/RCL内存寄存器,以及一个硬件LFSR随机数生成器,全程通过数千个来自重写的C++参考实现的测试向量进行验证。还添加了中断功能,主要是因为设计其互连逻辑很有趣,而且只用了24个逻辑单元,不加上去就太可惜了。
阅读本章 → (https://baltazarstudios.com/calculator-precision/)
### 第十章 计算器 \(10\):成功了!(https://baltazarstudios.com/calculator-conclusion/)
最后一篇文章总结了所有内容:一个仅用1,593个逻辑单元即可工作的科学计算器,占一个小型廉价FPGA的35%,并诚实地反思了这个项目教会了什么以及哪些地方做得不够完美。键盘的手感仍然不如经典的HP计算器,TQFP-144的焊接让人紧张,从"工作台上能用"到"能放进包里"之间的跨度比预期更大。但快乐,始终在于过程和尝试。
阅读本章 → (https://baltazarstudios.com/calculator-conclusion/)
相似文章
我设计了一个基于半字节的Verilog CPU,用于构建科学计算器
该项目使用FPGA在硬件中实现了一个功能齐全的科学计算器,包括自定义软CPU、微码固件和支持工具。它提供了一个基于Web的模拟器和开源的Verilog代码。
Intel 8087浮点芯片的堆栈电路逆向工程
本文详细介绍了对Intel 8087浮点协处理器堆栈电路的逆向工程,解释了该芯片基于堆栈的寄存器架构和微码ROM如何实现快速浮点运算。
Intel 8087 浮点芯片微码中的条件
对 Intel 8087 浮点协处理器微码中使用的条件测试的详细研究,是逆向工程工作的一部分,旨在理解其算法。
Intel 8087浮点芯片的指令解码
对Intel 8087浮点协处理器指令解码的详细逆向工程分析,解释主CPU与协处理器之间的交互、微码ROM的使用以及总线接口单元。
EMiX:超越单FPGA限制的仿真
介绍了EMiX,一种可扩展的多FPGA框架,用于仿真超出单FPGA资源限制的多核RISC-V架构,并通过跨八个FPGA的64核系统进行了演示。