Understanding Shakti Processors
- Shakti is an Open Source processor development program based on RISC-V ISA. There are many classes of processors in the Shakti ecosystem with varying compute capabilities. For this challenge, IIT Madras has made available two variants of Shakti, namely C-Class Yamuna - 32 bit varient and Ganga - 64 bit varient . Participants can learn more about RISC-V architecture from riscv.org. Knowing RISC-V architecture is not mandatory for building applications using Shakti processors.
C Class
- A controller class of processor, aimed at mid-range application workloads.
- The core is highly optimized, 6-stage in-order design with MMU support and capability to run operating systems Linux and Sel4.
- C-class targets compute/control applications in the 0.5-1.5 Ghz range.
- Amongst one of the most configurable RISC-V Cores
- Supported ISA:RV[32/64]{IMAFDCS}

Shakti ecosystem
- There is a Software Development Kit (SDK) dedicated for building application around Shakti SoC.
- A lot of sample applications integrating different sensors and chips are demonstrated.
- The whole ecosystem is vibrant and Open source.
Shakti-SDK
Shakti SDK provides all necessary scripts and board support packages to build applications. There are example programs demonstrating working of sensors. User manuals and guides can be downloaded from the Documents menu.
Operating systems
Virtual Machine ISO with built-in toolchain and Shakti-SDK support.
Docker
Shakti Dockerfile is provided through which a docker image can built and used for application development.Compatible with both Window (WSL) and Linux.
WHERE DO I START?
The following steps will walk you through the procedure for building and executing an application over Shakti SoC. The SoC (Yamuna and Ganga) is supported on Artix7 100t FPGA board. FPGA board will be provided by MeitY.
All links to the documents to be released soon !

Step 1: System Requirements for Shakti Ecosystem
The recommended system requirements are as follows,
Recommended:
- Windows with WSL or oracle Virtualbox / Ubuntu (virtualbox optional)
- 8 GB RAM
- 50+ GB space

Step 2: Installing Virtual Machine / Docker File
a) If your host machine is Windows/Ubuntu install Virtualbox and Virtual Machine using Shakti Distro manual
b) If your host machine is Windows install WSL & docker file using , Docker setup manual there is no installation needed to build docker image on ubuntu
- Video GuideTo be released soon

Step 3: Installing Vivado / Building Docker Image
a) Follow the VNC setup manual to install vivado inside the VM.
b) Follow the Docker manual to build the docker image.
- Video Guide To be released soon

Step 4: Configuring the FPGA
After Installing Vivado ,follow the below video guide to configure the Shakti SoC in FPGA board.
- Connect USB cable to laptop / pc and to FPGA board as shown in the image.
- Video guide To be released soon

Step 5: Develop, build and execute an Application
a) Follow the Shakti SDK User manual to develop , build and execute an application on Shakti SoC.
- Video Guide To be released soon
Getting to know the SoC - Yamuna and Ganga
Please select a SoC for developing your application. The features and details of each SoC is listed below.
Source code and mcs to be released soon !
Yamuna
A 32-bit C-class SoC on Artix7 100T board
- Features:
- C-class 6 stage In-order core
- RV32IMAC supported
- 256 MB of DDR and 4 KB of ROM
- Arduino Compatible pin assignments
- Pin Mux supported
- 32 GPIOs
- 6 PWM controllers
- 4 GPT controllers
- 2 SPI controllers
- 2 UART controllers
- 2 I2C controllers
- 4 Timer
- One Interrupt controller (PLIC)
- CLINT
- On board XADC
- Onboard FTDI based Debugger
- Ethernet Lite IP from Xilinx
Ganga
A 64-bit C-class SoC on Artix7 100T board
- Features:
- C-class 6 stage In-order core
- RV64IMAC supported
- 256 MB of DDR and 4 KB of ROM
- Arduino Compatible pin assignments
- Pin Mux supported
- 16 GPIOs
- 2 GPT controllers
- 1 SPI controller
- 1 UART controller
- 1 I2C controller
- 4 Timer
- One Interrupt controller (PLIC)
- CLINT
- On board XADC
- Onboard FTDI based Debugger
- Ethernet Lite IP from Xilinx
Documents & Tutorials
Document | Description |
---|---|
RISC-V ASM Manual | A complete guide to learn ASM programming from the scratch. |
RISC-V User Level ISA Spec | Provides the User level specifications. |
RISC-V Privileged ISA Spec | Provides the Privileged level specifications. |
Xilinx Licenses | A small guide to check for the Xilinx license in vivado. |
Stuck Somewhere?
Still not Clear?
Frequently Asked Questions
-
What should I do if I get error while loading shared libraries: libpython3.7m.so.1.0: cannot open shared object file: No such file or directory?
You may get this error while you run any RISC-V GDB. Note the python version missing, Install the respective package (Either 3.6 or 3.7).
sudo apt-get install libpython3.7-dev
-
What should I do if I get "error while loading shared libraries: libftdi1.so.2: cannot open shared object file: No such file or directory"?
You may get this error while you run any RISC-V OpenOCD. Pay attention to the package missing Here libFTDI is the missing file, so install the respective package.
sudo apt-get install libftdi1 libftdi1-2
-
What should I do if I get "error while loading shared libraries: libmpfr.so.4: cannot open shared object file: No such file or directory"?
You may get this error while you run any of the Shakti-tools. Create a soft link for libmpfr.
sudo ln -s /usr/lib/x86_64-linux-gnu/libmpfr.so.6 /usr/lib/x86_64-linux-gnu/libmpfr.so.4
-
What should I do if I get "miniterm.py: command not found" error?
- Download the pyserial package
- If the download fails, click here
- After downloading, follow the below commands
Note: Move into the folder into which pyserial is downloaded, then extract using tar command
tar -zxvf pyserial-2.6.tar.gz
cd pyserial-2.6
python setup.py build
sudo python setup.py install
- What should I do if I get "could not open port '/dev/ttyUSB1': [Errno 2] could not open port /dev/ttyUSB1: [Errno 2] No such file or directory: '/dev/ttyUSB1'"?
USB1 is not a valid port in this case, Press tab once to automatically get the port to which the board is connected. Press tab twice to see the available options.
- What should I do if I get an Exception while execution, For instance, Exception: mcause = 7, epc =800012ce ?
Check out our article on, how to debug when a trap occurs..