This project is currently a work in progress (WIP). We are in the process of enabling and integrating individual IPs.
Working diligently to deliver a fully functional fabric by May 1, 2024.
Stay tuned for updates!
Welcome to the MAFIA Project, a initiative aimed at designing a System-on-a-Chip (SoC) Tile-based mesh fabric.
Our architecture is designed to be highly versatile, capable of incorporating a variety of functionalities.
This includes, but is not limited to:
- RISCV mini-cores and big-cores
- Hardware accelerators
- IO devices such as UART, keyboard, VGA, and DE10-Lite FPGA IO
The MAFIA Project is developed by final year Electrical and Computer Engineering students at Bar-Ilan University and the Technion in Israel. We aim to design a System-on-a-Chip (SoC) tile-based mesh fabric for integrating diverse range of IPs and functionalities. Key features and capabilities include:
- Acceleration of distributed workloads, particularly beneficial for AI inference and learning.
- Traditional program acceleration by utilizing a pipelining approach.
- Example flow: Decoding -> Decrypting -> Analyzing -> Writing new data -> Encrypting -> Encoding In our design, each core or cluster of cores handling a different stage, creating a pipe-line
- This SoC design provides a robust platform for versatile tasks, offering improved speed and efficiency
- The project's RTL is written in SystemVerilog.
- We utilize the GNU GCC for the RISCV software stack, which includes linker, assembly, and C source files.
- Python is employed for build scripts, post-processing, GUI, and other utilities.
Our architecture consists of the following key elements:
- A 4-way Router coupled with a local Endpoint.
- A 3-stage Mini Core that is RV32I compatible.
- A 7-stage Big Core, which is RV32IM CSR compatible and supports MMIO (VGA, UART, FPGA IO, PS2 Keyboard).
- A Memory Subsystem equipped with L1 Instruction and Data Cache, as well as a Memory Controller.
Our system runs on a simple proprietary RISCV embedded OS like system and includes:
- A software library for VGA graphical capabilities.
- A software library for accessing the FPGA MMIO and special control registers.
- Software examples demonstrating the utilization of many cores for distributed calculations and parallel computation.
The diagram below provides a visual representation of the project's hardware architecture.
For best experience we recomended using a windows machin running vscode + gitbash.
To see the build and run options, use the following command:
python build.py -h
For any issue please see here: fpga_mafia/discussions
Please add your question discussion tab
https://fpga-mafia.github.io/fpga_mafia_wiki/docs/build_script/intro
Before you start, make sure you have the following tools and software installed:
- RISCV gcc releases & install, a Windows gcc for RISCV ISA.
- Intel design SW for windows , modelsim + quartus + MAX10 (de10-lite). used to compile, simulate & load to FPGA the HW systemverilog design.
To make your experience smoother, we recommend installing the following tools:
- GitBash, a Windows version of Git that includes a "Unix-like" shell.
- Visual Studio Code, a code editor that supports many programming languages.
This project draws inspiration from innovative players in the field of computing.
These include:
- HammerBlade Manycore:Bespoke Silicon Group | Watch the video on Youtube
- Tesla: DOJO | Watch the video on Youtube
- Tenstorrent: Wormhole & more | Watch the video on Youtube
- Esperanto: ET-SoC-1 | Watch the video on Youtube
Similarly, this project offers a unique, highly-integratable mesh architecture that can support a wide range of agents, and execute parallel computing for distributed workflow.
Solution: Run the following command to resolve this issue:
pip install termcolor
'riscv-none-embed-gcc.exe' is not recognized as an internal or external command
Solution: Add the following line to your ~/.bashrc file:
export PATH=$PATH:/c/Users/'user_name'/AppData/Roaming/xPacks/riscv-none-embed-gcc/xpack-riscv-none-embed-gcc-10.2.0-1.2/bin
Then, reload the bashrc file with this command:
source ~/.bashrc
'quartus_map' is not recognized as an internal or external command,
Solution: Add the following line to your ~/.bashrc file:
export PATH=$PATH:/c/intelFPGA_lite/20.1/quartus/bin64/
Then, reload the bashrc file with this command:
source ~/.bashrc
For easy access, you can run the following commands in the GitBash shell for Windows:
./build.py -h
./build.py -dut big_core -tests alive -app -hw -sim
./build.py -dut cache -tests cache_alive -hw -sim -pp
./build.py -dut sc_core -tests alive -full_run