===============================================
____ _____________ ___ ___
/ __ \___ ___ ___ / ___/ ___/ _ \/ _ | |_ |
/ /_/ / _ \/ -_) _ \/ /__/ (_ / , _/ __ |/ __/
\____/ .__/\__/_//_/\___/\___/_/|_/_/ |_/____/
/_/
===============================================
OpenCGRA2 is a parameterizable and powerful CGRA (Coarse-Grained Reconfigurable Architecture) generator to generate synthesizable Verilog for different CGRAs based on user-specified configurations (e.g., CGRA size, type of the computing units in each tile, communication connection, etc.). OpenCGRA2 uses modular design and standardized interfaces between modules. The configurability and extensibility are maximized by its parametrization system to fit in various research and industrial needs.
Different from the previous version (i.e., OpenCGRA), the partial predication is supported in OpenCGRA2 by giving (at least) three inputs (i.e., two for arriving data and one for predication signal) for each funtional unit. The computation of a functional unit can only be valid (for most operations, except first PHI, etc) when all the three inputs are valid (and ready).
- C. Tan et al. "OpenCGRA: An Open-Source Framework for Modeling, Testing, and Evaluating CGRAs." The 38th IEEE International Conference on Computer Design. (ICCD-20), Oct 2020
OpenCGRA2 is offered under the terms of the Open Source Initiative BSD 3-Clause License. More information about this license can be found here:
OpenCGRA2 requires Python3.7 and has the following additional prerequisites:
- graphviz, verilator
- git, Python headers, and libffi
- virtualenv
- PyMTL3
The steps for installing these prerequisites and OpenCGRA2 on a fresh Ubuntu distribution are shown below. They have been tested with Ubuntu Trusty 14.04.
% sudo apt-get install python3.7
% sudo apt-get install -y graphviz
Verilator is an open-source toolchain for compiling Verilog RTL models into C++ simulators. OpenCGRA2 uses Verilator for Verilog import.
$ sudo apt-get install git make autoconf g++ libfl-dev bison
$ mkdir -p ${HOME}/src
$ cd ${HOME}/src
$ wget http://www.veripool.org/ftp/verilator-4.036.tgz
$ tar -xzvf verilator-4.036.tgz
$ cd verilator-4.036
$ ./configure
$ make
$ sudo make install
We need to install the Python headers and libffi in order to be able to install the cffi Python package. cffi provides an elegant way to call C functions from Python, and PyMTL uses cffi to call C code generated by Verilator. We will use git to grab the PyMTL source. The following commands will install the appropriate packages:
% sudo apt-get install git python-dev libffi-dev
While not strictly necessary, we strongly recommend using virtualenv to install PyMTL3 and the Python packages that PyMTL3 depends on. virtualenv enables creating isolated Python environments. The following commands will create and activate the virtual environment:
% python3 -m venv ${HOME}/venv
% source ${HOME}/venv/bin/activate
% pip install git+https://github.com/tancheng/pymtl3.git
% pip install --upgrade pip setuptools twine
% pip install hypothesis
% pip list
We can now use git to clone the OpenCGRA2 repo.
% mkdir -p ${HOME}/cgra
% cd ${HOME}/cgra
% git clone https://github.com/tancheng/OpenCGRA2.git
In folder, just type:
% pytest --tb=short -sv CGRARTL_test.py
When you're done testing/developing, you can deactivate the virtualenv::
% deactivate