This project is an open, reverse-engineered implementation of the Motorola MC68881 floating-point unit, written in VHDL and intended for use in FPGA-based 68k systems.
Despite the availability of several open Motorola 68000-family CPU cores, there does not currently appear to be an open hardware implementation of the original 68881/68882 FPU. In practice, this leaves FPGA 68k systems reliant on software emulation, stubs, or behavioural shortcuts that fail to reproduce real-world FPU behaviour. This project exists to address that gap.
Long term plans include amending an existing 68030 core to include a co-processor interface and support for this FPU.
If the approach succeeds an MMU will follow.
LUT Usage now fits comfortably on Artix a7-100t - now with room for a small processor as well as the fpu.
Overview
A VHDL-2008 implementation of a Motorola MC68881-compatible floating-point coprocessor targeting Xilinx 7-series FPGAs. The design implements the full MC68881 instruction set including all arithmetic, transcendental, program-control, system-control, and packed-decimal operations. It uses DSP-pipelined sequential FP units for the core arithmetic datapath with multi-cycle path constraints for timing closure.
The current plan and progress tracking live in docs/fpu-progress-checklist.md.
Peripheral interface: Register-mapped bus interface with DSACK handshake, suitable for M68000/M68010 peripheral-mode operation.
Utilization (Xilinx Artix-7 200T, post-place)
Resource
Used
Available
Util>#/th###
Slice LUTs
52,361
133,800
39.13>#/td###
Registers
13,131
267,600
4.91>#/td###
Block RAM
5 tiles
365
1.37>#/td###
DSP48E1
33
740
4.46>#/td###
Non-incremental synthesis + implementation, Vivado 2025.2, xc7a200tfbg676-1. Date: 2026-03-05. Includes Section 7 CIR coprocessor interface with FSAVE/FRESTORE Busy frame support and full exception dialog paths; see "CIR feature gating" below.
The design fits on several FPGA families. With CIR disabled (ENABLE_CIR_g => false), the core is ~58K LUTs and fits comfortably on smaller devices:
Device
LUTs
DSPs
Fit (full)?
Fit (no CIR)?
Xilinx Artix-7 200T
134,600
740
Yes (39%)
Yes (34%)
Xilinx Artix-7 100T
63,400
240
Yes (~83%)
Yes (~72%)
Xilinx Zynq UltraScale+ ZU3EG
~71,000
360
Yes (~74%)
Yes (~64%)
Intel Cyclone V 5CEBA7
150,720 ALMs
156
Yes
Yes
All RTL is vendor-portable (inferred DSP/BRAM, no Xilinx IP cores). Porting to Intel/Quartus requires XDC-to-SDC constraint conversion and minor DSP inference adjustments.