Skip to content
Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time
                __  ___  _   ____     _____
               /  |/  / (_) / __/__  / ___/
              / /|_/ / / / _\ \/ _ \/ /__
             /_/  /_/ /_/ /___/\___/\___/

            Copyright 2007-2020 / M-Labs Ltd
            Copyright 2012-2015 / Enjoy-Digital

    a high performance and small footprint SoC based on Migen

[> Features
 * LatticeMico32 CPU, modified to include an optional MMU (experimental).
 * mor1kx (a better OpenRISC implementation) as alternative CPU option.
 * High performance memory controller capable of issuing several SDRAM commands
   per FPGA cycle.
 * Supports SDR, DDR, LPDDR, DDR2 and DDR3.
 * Provided peripherals: UART, GPIO, timer, NOR flash controller, SPI flash
   controller, Ethernet MAC, and more.
 * High performance:
   - on Spartan-6, 83MHz system clock frequencies, 10+Gbps DDR
   SDRAM bandwidth, 1080p 32bpp framebuffer, etc.
   - on Kintex-7, 125MHz system clock frequencies (up to 200MHz without DDR3),
   64Gbps DDR3 SDRAM bandwidth.
 * Low resource usage: basic implementation fits easily in Spartan-6 LX9.
 * Portable and easy to customize thanks to Python- and Migen-based
 * Design new peripherals using Migen and benefit from automatic CSR maps
   and logic, etc.
 * Possibility to encapsulate legacy Verilog/VHDL code.

MiSoC comes with built-in targets for a few boards containing devices from all
major FPGA vendors. Support for other boards can easily be added as external

[> Quick start guide
0. If cloned from Git without the --recursive option, get the submodules:
   git submodule update --init

1. Install Python 3.5, Migen and FPGA vendor's development tools.
   Get Migen from:
   For flterm, you will also need asyncserial and pyserial:

2. Install JTAG tools. We recommend using OpenOCD, but other tools (e.g. from
   the FPGA vendor) may be used as well.

3. Compile and install binutils. Take the latest version from GNU.
   mkdir build && cd build
   ../configure --target=lm32-elf
   make install

4. Compile and install GCC. Take gcc-core and gcc-g++ from GNU
   (version 4.5 or >=4.9).
   rm -rf libstdc++-v3
   mkdir build && cd build
   ../configure --target=lm32-elf --enable-languages="c,c++" --disable-libgcc \
   make install

5. Install MiSoC with:
   python3 install

6. Build the bitstream and BIOS for your board by executing the corresponding
   target file (see misoc/targets), e.g.
   python3 -m misoc.targets.kc705

   Use the -h flag to see options. This will create a folder named e.g.
   misoc_basesoc_kc705 and build the BIOS and bitstream there.

   If your target uses BIOS execute-in-place, flash it.

   Load the bitstream.

7. Run a terminal program on the board's serial port at 115200 8-N-1.
   You should get the BIOS prompt.

8. Read and experiment with the source!
   Come to our IRC channel and mailing list!

9. Contribute a patch!
   Once you have experimented with stuff, please send your results back.
   For more details on how to do so, you can see the CONTRIBUTING.rst file.

[> License
MiSoC is released under the very permissive two-clause BSD license. Under
the terms of this license, you are authorized to use MiSoC 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 MiSoC
 * cite MiSoC 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 MiSoC.
   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 mailing list or IRC (#m-labs on Freenode) beforehand.

See LICENSE file for full copyright and license info.

[> Links

Code repository:

You can contact us on the public mailing list devel [AT]