All Projects → nmigen → Nmigen

nmigen / Nmigen

Licence: bsd-2-clause
A refreshed Python toolbox for building complex digital hardware

Programming Languages

python
139335 projects - #7 most used programming language

Labels

Projects that are alternatives of or similar to Nmigen

Riscv
RISC-V CPU Core (RV32IM)
Stars: ✭ 272 (-29.9%)
Mutual labels:  fpga
S6 pcie microblaze
PCI Express DIY hacking toolkit for Xilinx SP605
Stars: ✭ 301 (-22.42%)
Mutual labels:  fpga
Pp4fpgas Cn
中文版 Parallel Programming for FPGAs
Stars: ✭ 339 (-12.63%)
Mutual labels:  fpga
Openpiton
The OpenPiton Platform
Stars: ✭ 282 (-27.32%)
Mutual labels:  fpga
Verilog
Repository for basic (and not so basic) Verilog blocks with high re-use potential
Stars: ✭ 296 (-23.71%)
Mutual labels:  fpga
Reduceron
FPGA Haskell machine with game changing performance. Reduceron is Matthew Naylor, Colin Runciman and Jason Reich's high performance FPGA softcore for running lazy functional programs, including hardware garbage collection. Reduceron has been implemented on various FPGAs with clock frequency ranging from 60 to 150 MHz depending on the FPGA. A high degree of parallelism allows Reduceron to implement graph evaluation very efficiently. This fork aims to continue development on this, with a view to practical applications. Comments, questions, etc are welcome.
Stars: ✭ 308 (-20.62%)
Mutual labels:  fpga
Edalize
An abstraction library for interfacing EDA tools
Stars: ✭ 270 (-30.41%)
Mutual labels:  fpga
Trisycl
Generic system-wide modern C++ for heterogeneous platforms with SYCL from Khronos Group
Stars: ✭ 354 (-8.76%)
Mutual labels:  fpga
Beagle sdr gps
KiwiSDR: BeagleBone web-accessible shortwave receiver and software-defined GPS
Stars: ✭ 300 (-22.68%)
Mutual labels:  fpga
F32c
A 32-bit RISC-V / MIPS ISA retargetable CPU core & SoC, 1.63 DMIPS/MHz
Stars: ✭ 338 (-12.89%)
Mutual labels:  fpga
Fastor
A lightweight high performance tensor algebra framework for modern C++
Stars: ✭ 280 (-27.84%)
Mutual labels:  fpga
Hal
HAL – The Hardware Analyzer
Stars: ✭ 298 (-23.2%)
Mutual labels:  fpga
Sdaccel examples
SDAccel Examples
Stars: ✭ 325 (-16.24%)
Mutual labels:  fpga
Icezum
🌟 IceZUM Alhambra: an Arduino-like Open FPGA electronic board
Stars: ✭ 280 (-27.84%)
Mutual labels:  fpga
Fpga Network Stack
Scalable Network Stack for FPGAs (TCP/IP, RoCEv2)
Stars: ✭ 345 (-11.08%)
Mutual labels:  fpga
Cores
Various HDL (Verilog) IP Cores
Stars: ✭ 271 (-30.15%)
Mutual labels:  fpga
Accelerating Cnn With Fpga
This project accelerates CNN computation with the help of FPGA, for more than 50x speed-up compared with CPU.
Stars: ✭ 301 (-22.42%)
Mutual labels:  fpga
Apio
🌱 Open source ecosystem for open FPGA boards
Stars: ✭ 366 (-5.67%)
Mutual labels:  fpga
Brevitas
Brevitas: quantization-aware training in PyTorch
Stars: ✭ 343 (-11.6%)
Mutual labels:  fpga
Fpga Imaging Library
An open source library for image processing on FPGA.
Stars: ✭ 325 (-16.24%)
Mutual labels:  fpga

nMigen

A refreshed Python toolbox for building complex digital hardware

Although nMigen is incomplete and in active development, it can already be used for real-world designs. The nMigen language (nmigen.hdl.ast, nmigen.hdl.dsl) will not undergo incompatible changes. The nMigen standard library (nmigen.lib) and build system (nmigen.build) will undergo minimal changes before their design is finalized.

Despite being faster than schematics entry, hardware design with Verilog and VHDL remains tedious and inefficient for several reasons. The event-driven model introduces issues and manual coding that are unnecessary for synchronous circuits, which represent the lion's share of today's logic designs. Counterintuitive arithmetic rules result in steeper learning curves and provide a fertile ground for subtle bugs in designs. Finally, support for procedural generation of logic (metaprogramming) through "generate" statements is very limited and restricts the ways code can be made generic, reused and organized.

To address those issues, we have developed the nMigen FHDL, a library that replaces the event-driven paradigm with the notions of combinatorial and synchronous statements, has arithmetic rules that make integers always behave like mathematical integers, and most importantly allows the design's logic to be constructed by a Python program. This last point enables hardware designers to take advantage of the richness of the Python language—object oriented programming, function parameters, generators, operator overloading, libraries, etc.—to build well organized, reusable and elegant designs.

Other nMigen libraries are built on FHDL and provide various tools and logic cores. nMigen also contains a simulator that allows test benches to be written in Python.

nMigen is based on Migen, a similar Python-based hardware description language. Although Migen works very well in production, its design could be improved in many fundamental ways, and nMigen reimplements Migen concepts from scratch to do so. nMigen also provides an extensive compatibility layer that makes it possible to build and simulate most Migen designs unmodified, as well as integrate modules written for Migen and nMigen.

The development of nMigen has been supported by SymbioticEDA, LambdaConcept, and ChipEleven.

Introduction

See the Introduction section of the documentation.

Installation

See the Installation section of the documentation.

Supported devices

nMigen can be used to target any FPGA or ASIC process that accepts behavioral Verilog-2001 as input. It also offers extended support for many FPGA families, providing toolchain integration, abstractions for device-specific primitives, and more. Specifically:

  • Lattice iCE40 (toolchains: Yosys+nextpnr, LSE-iCECube2, Synplify-iCECube2);
  • Lattice MachXO2 (toolchains: Diamond);
  • Lattice MachXO3L (toolchains: Diamond);
  • Lattice ECP5 (toolchains: Yosys+nextpnr, Diamond);
  • Xilinx Spartan 3A (toolchains: ISE);
  • Xilinx Spartan 6 (toolchains: ISE);
  • Xilinx 7-series (toolchains: Vivado);
  • Xilinx UltraScale (toolchains: Vivado);
  • Intel (toolchains: Quartus);
  • Quicklogic EOS S3 (toolchains: Yosys+VPR).

FOSS toolchains are listed in bold.

Migration from Migen

If you are already familiar with Migen, the good news is that nMigen provides a comprehensive Migen compatibility layer! An existing Migen design can be synthesized and simulated with nMigen in three steps:

  1. Replace all from migen import <...> statements with from nmigen.compat import <...>.
  2. Replace every explicit mention of the default sys clock domain with the new default sync clock domain. E.g. ClockSignal("sys") is changed to ClockSignal("sync").
  3. Migrate from Migen build/platform system to nMigen build/platform system. nMigen does not provide a build/platform compatibility layer because both the board definition files and the platform abstraction differ too much.

Note that nMigen will not produce the exact same RTL as Migen did. nMigen has been built to allow you to take advantage of the new and improved functionality it has (such as producing hierarchical RTL) while making migration as painless as possible.

Once your design passes verification with nMigen, you can migrate it to the nMigen syntax one module at a time. Migen modules can be added to nMigen modules and vice versa, so there is no restriction on the order of migration, either.

Community

nMigen has a dedicated IRC channel, #nmigen at freenode.net. Feel free to join to ask questions about using nMigen or discuss ongoing development of nMigen and its related projects.

License

nMigen is released under the very permissive two-clause BSD license. Under the terms of this license, you are authorized to use nMigen for closed-source proprietary designs.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].