Skip to main content

Migen (Milkymist generator)

migen logo

A Python toolbox for building complex digital hardware

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. Counter- intuitive 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 Migen FHDL 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 Migen libraries are built on FHDL and provide various tools such as a system-on-chip interconnect infrastructure, a dataflow programming system, a more traditional high-level synthesizer that compiles Python routines into state machines with datapaths, and a simulator that allows test benches to be written in Python.

See the doc/ folder for more technical information.

Migen is not spelled MiGen.

Code repository: https://git.m-labs.hk/M-Labs/migen

System-on-chip design based on Migen: https://git.m-labs.hk/M-Labs/misoc

Online documentation: https://m-labs.hk/migen/manual/

Quick intro

from migen import *
from migen.build.platforms import m1
plat = m1.Platform()
led = plat.request("user_led")
m = Module()
counter = Signal(26)
m.comb += led.eq(counter[25])
m.sync += counter.eq(counter + 1)
plat.build(m)

License

Migen is released under the very permissive two-clause BSD license. Under the terms of this license, you are authorized to use Migen for closed-source proprietary designs. Even though we do not require you to do so, those things are awesome, so please do them if possible:

  • tell us that you are using Migen
  • put the Migen logo (doc/migen_logo.svg) on the page of a product using it, with a link to http://m-labs.hk
  • cite Migen in publications related to research it has helped
  • send us feedback and suggestions for improvements
  • send us bug reports when something goes wrong
  • send us the modifications and improvements you have done to Migen. The use of "git format-patch" is recommended. If your submission is large and complex and/or you are not sure how to proceed, feel free to discuss it on the forum or IRC (#m-labs on OFTC) beforehand.

See LICENSE file for full copyright and license info.

"Electricity! It's like magic!"

Metadata

Release files for migen 0.10.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for migen 0.10.0
File Size Uploaded
migen-0.10.0.tar.gz 159.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for migen 0.10.0
File Interpreter ABI Platform
migen-0.10.0-py3-none-any.whl Python 3 none any Details

Total release size: 368.0 kB

Release files / migen-0.10.0.tar.gz

Download URL migen-0.10.0.tar.gz
Size 159.2 kB
Tags Source
SHA-256 checksum
How to use checksums
f8294a475456e46ffa9b2fba2ae99839fed77c1217264f8a7d536dd1b58c916d
BLAKE2b-256 checksum
How to use checksums
468e74bb701500efd3274cca30c20792d5891b463fd3f65edcd4dd2141ba28ac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release files / migen-0.10.0-py3-none-any.whl

Download URL migen-0.10.0-py3-none-any.whl
Size 208.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e2ba5a11906c46a434a39fa73c0881ed4ad697619492e7d28b9b30954a17bc4c
BLAKE2b-256 checksum
How to use checksums
98ff76f04ee0395e65110ed362a1c6be5971055a0da4d522e8209b1877e6e54d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.4

Release history Release notifications | RSS feed

This release

0.10.0 This release

2 release files

0.9.2

1 release file

0.9.1

1 release file

0.9

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page