An excerpt from the repository, fetched Nov 13, 2026.
Read the project’s introduction
Disclaimer:
This is a independent documentation project based on a combination of static analysis
and trial and error on real hardware. This work is 100% independent from and not
sanctioned by or connected with Broadcom or its agents.
No Broadcom documents or materials were used beyond those publically available
(see Referenced Materials).
This work was undertaken and the information provided for non commercial use on the
expectation that hobbyists of all ages will find the details useful for understanding
and working with their Raspberry Pi hardware.
The hope is that Broadcom will be flattered by the interest in the device and
understand the benefits of opening up understanding to a larger audience of
potential customers and developers.
Broadcom should be commended with making their SoC available for a project as
exciting as the Raspberry Pi.
The intent is that no copyrighted materials are contained in this repository.
Introduction
Purpose of this repo: Documentation and samples on the VideoCore IV instruction set as used in the BCM SoC used in the Raspberry Pi. As of early 2016, Broadcom has yet to release public information on the VPU, so it is hoped you find this repo useful.
The BCM2835 SoC (System on a Chip) in the original RaspberryPi has the following significant computation units:
(ARM) ARM1176JZF-S 700 MHz processor which acts as the "main" processor and typically runs Linux.
(VPU) Dualcore Videocore IV CPU @250MHz with SIMD Parallel Pixel Units (PPU) which runs scalar (integer and float) and vector (integer only) programs. Runs ThreadX OS, and generally coordinates all functional blocks such as video codecs, power management, video out.
(ISP) Image Sensor Pipeline (ISP) providing lens shading, statistics and distortion correction.
(QPU) QPU units which provide 24 GFLOPS compute performance for coordinate, vertex and pixel shaders. Whilst originally not documented, Broadcom released documentation and source code for the QPU in 2014.
Newer Raspberry Pi mix things up with faster and more modern ARM cores, but the VPU information here is still relevant.
For more information on the Raspberry Pi, see the foundation's site at http://raspberrypi.org,
or the embedded linux wiki at http://elinux.org/R-Pi_Hub.
Active discussions take place on IRC (freenode) on #raspberrypi-internals, #raspberrypi-osdev, #raspberrypi-dev,
and #raspberrypi.
There is a raspberrypi-internals mailing list, you can subscribe at mailing list page at
freelists.org.
We are in a very early stage of understanding of the device. At this stage we only have Serial IO and GPIO for
flashing things like the status led. You will need to attach a terminal to the Mini UART on the GPIO connector.
For more details see "Getting started" below.
It is now possibly to use VideoCore Kernels from Userland / Linux,
see https://github.com/hermanhermitage/videocoreiv/wiki/VideoCore-IV-Kernels-under-Linux. Our understanding of the
Videocore Processor is nearing completion, and it is an excellent target for integer SIMD and DSP kernels. Essentially,
it can be used for 16 way SIMD processing of 8, 16 and 32 bit integer values.
Videocore IV Community and Resources:
I recommend starting with Julian's GNU toolchain, at https://github.com/itszor/vc4-toolchain
[2016-06-15] SDRAM and ARM initialization reference code for the VPU is now available at https://github.com/christinaa/rpi-open-firmware
[2016-05-03] Kristina Brooks has got David Given's LLVM fork to work on rPi at https://github.com/christinaa/LLVM-VideoCore4
[2016-04-23] Julian Brown has pulled together bits and pieces of previous GNU toolchain work and fixed them up so they work together at https://github.com/itszor/vc4-toolchain
[2015-11-08] (QPU). Koichi NAKAMURA has developed a Python library for GPGPU on Raspberry Pi at https://github.com/nineties/py-videocore.
[2016-04-21] (QPU). mn416 has developed QPULib, a programming language and compiler for the Raspberry Pi's Quad Processing Units at https://github.com/mn416/QPULib
[2015-01-02] (QPU). A new QPU macro assembler from Marcel Müller. This builds on Pete and Eman’s earlier QPU assemblers to include support for macros and functions, at http://maazl.de/project/vc4asm/doc/index.html and https://github.com/maazl/vc4asm/
[2014-10-28] (VPU). RPi foundation discusses how Argon Design use the VPU to accerate stereo depth perception at https://www.raspberrypi.org/blog/real-time-depth-perception-with-the-compute-module/ a comment about using MMAL is at https://www.raspberrypi.org/blog/real-time-depth-perception-with-the-compute-module/#comment-1078440
[2014-06-10] (QPU). Louis Howe gives a talk on 'Hacking the Raspberry Pi's VideoCore IV GPU' at https://www.youtube.com/watch?v=eZd0IYJ7J40
[2014-06-09] (QPU). Pete Warden wrote a series of posts covering Deep Learning, Optimizing for QPU, and Image Recognition at https://petewarden.com/2014/06/09/deep-learning-on-the-raspberry-pi/, https://petewarden.com/2014/08/07/how-to-optimize-raspberry-pi-code-using-its-gpu/ and https://petewarden.com/2015/05/10/image-recognition-on-the-raspberry-pi-2/. He updated Eric's QPU assembler at https://github.com/jetpacapp/qpu-asm, and added QPU support to his DeepBeliefSDK at https://github.com/jetpacapp/DeepBeliefSDK/, and a QPU implementation of GEMM matrix-multiply at https://github.com/jetpacapp/pi-gemm
[2014-05-03] (QPU). Eric Lorimer wrote a set of posts on Hacking The GPU For Fun And Profit (including SHA hashing) at https://rpiplayground.wordpress.com/2014/05/03/hacking-the-gpu-for-fun-and-profit-pt-1/, and wrote his own QPU assembler at https://github.com/elorimer/rpi-playground
[2014-02-28] (QPU). Broadcom announced the release of full documentation for the VideoCore IV graphics core, and a complete source release of the graphics stack at https://www.raspberrypi.org/blog/a-birthday-present-from-broadcom/. Note this does NOT include VPU documentation, except in so much that the source drop includes sa
Read the full README on GitHub