An opensource FPGA architecture
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Jonathan Tremesaygues 5146d75f9c fix type annotation 4 days ago
images Update readme 2 months ago
src/kfpga fix type annotation 4 days ago
tests blackify 2 months ago
.gitignore update ignores 4 months ago
LICENSE.EN.txt Add license 5 months ago
LICENSE.FR.txt Add license 5 months ago regroup useful stuff on an "API" module 2 months ago Update copyright 2 weeks ago
tox.ini update dependancies, generate junit result, generate coverage xml 4 months ago

killruana's FPGA (kFPGA)

Build Status

An open-source FPGA architecture and the tools needed for programming it.


Right now, there is no conveniant CLI or GUI tools for using kFPGA, only the API.

Create a core object

The core object represent a FPGA core. It is needed by virtually all useful API methods.

from kfpga.api import Core

core = Core(

Generate the RTL (verilog) of a core

from pathlib import Path
from kfpga.api import generate_core_rtl

output_dir = Path("/path/to/output/rtl/folder")
generate_core_rtl(core, output_dir)


Generation 1

This first iteration of the architecture is very simple. More functionalities are planned to be implemented in the next generations (see next title).

The architecture is composed of logic tiles of I/O adapters connecting the outer I/O pads of the FPGA to the routing network. Each FPGA has one clock signal and one reset signal.

Architecture overview

Each logic tile is composed of a switch box used for doing the routing and
one or more logic element

Logic tile overview

Each logic element is composed of a LUT followed by a by-passable DFF.

Logic element overview

All the LUT of a FPGA are the same size.

The DFF are asynchronously resettables on positive edge. They don't support synchronous reset, set functionality or enable signal.

The future

The following functionalities are planned to be implemented in the next generations of the architecture :

  • multiple external clock signals
  • multiple external set/reset signals
  • multiple external enable signals
  • DFF with set and reset functionality which can be synchronously or asynchronously asserted, an enable functionality
  • better logic elements with more functionality (like full-adder)
  • DSP blocks
  • memory blocks
  • support for generated clock, set, reset and enable signals