This project implements a fully functional scientific calculator in hardware using an FPGA. It includes a custom soft CPU, microcode firmware, and supporting tools.
For the full story, see the blog.
Try it in a web browser:
| Folder | Description |
|---|---|
verilog/ |
SystemVerilog source files for the CPU, ALU, I/O, and test benches |
ucode/ |
Microcode (firmware) for the soft CPU |
quartus/ |
Quartus project files for FPGA synthesis |
modelsim/ |
ModelSim simulation setup |
Qt/ |
Qt-based simulator and debugger (uses Verilator) |
calctest/ |
Command-line test harness for hardware verification (uses Verilator) |
tools/ |
Assembler and script compiler for the microcode |
Pathfinding/ |
Algorithm research and verification projects |
The fastest way to try the calculator is to build the Qt simulator:
cd /mnt/c/Projects/FPGA-Calculator/verilog make qt
Then open Qt/Calculator.pro in Qt Creator and build for "Desktop Qt MSVC2022 64 Bit".
See the verilog/ and Qt/ folders for detailed instructions.
Install these tools depending on your target:
| Tool | Purpose | Notes |
|---|---|---|
| Verilator | Verilog simulation | Required for Qt simulator |
| Qt | Desktop/WebAssembly/Android app | Version 6.9+ |
| Quartus | FPGA synthesis | Version 13.0 SP1 for Cyclone II |
| ModelSim | Waveform simulation | Optional |
| Visual Studio 2022 | C++ compiler for Qt | Community Edition |
| Python 3 | Assembler and tools |
Verilator runs in WSL2 (Windows Subsystem for Linux). The project source files reside on a Windows partition and are accessed from WSL2.
| Target | Verilator Version | Notes |
|---|---|---|
| Desktop (Qt/MSVC) | 5.x (latest) | Recommended |
| WebAssembly | 4.228 | Required (no thread support) |
sudo apt-get install build-essential autoconf flex libfl-dev bison
git clone https://github.com/verilator/verilator cd verilator git checkout v5.042 # For Desktop, or v4.228 for WebAssembly autoconf ./configure make -j8 make test
export VERILATOR_ROOT=$(pwd)
Optionally install GtkWave for viewing waveforms:
sudo apt install gtkwave
| Target | Command | Description |
|---|---|---|
| Qt Simulator | make qt in verilog/ |
Build for Qt desktop application |
| Calctest | make calctest in verilog/, then make in calctest/ |
Command-line test harness |
| ModelSim | make test_self in verilog/ |
CPU self-test for ModelSim |
| FPGA Hardware | make revB in verilog/ |
Assemble microcode for RevB board |
See the README files in each subfolder for detailed build instructions:
Independent research and verification projects:
| Folder | Description |
|---|---|
Pathfinding/Proto/ |
BCD arithmetic golden reference for hardware verification (submodule) |
Pathfinding/Proof/ |
Proofs of concept for complex operations using basic arithmetic |
Pathfinding/Methods/ |
C++ implementations of calculator algorithms (deprecated) |
Pathfinding/Input/ |
Numerical input state machine simulation |
Pathfinding/Mockup/ |
Keyboard layout design and user interaction testing |
This project is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
You are free to:
Under the following terms: