Skip to main content

Getting Started With Beethoven

Beethoven provides a software and hardware ecosystem for designing, assembling, and deploying hardware accelerators. Below we show a high-level break-down of Beethoven into its hardware and software components.

Click the boxes to navigate the site!

At the center of it all is your hardware accelerator "core" implementation - a single functional unit. The goal is to make it comfortable to

  • Manage host-accelerator communication from the HW: Control signals from the host should align to your implemented algorithm and be otherwise straightforward to use.
  • Use this functional unit from the Host: Software implementations should not need to massively complicate the codebase for utilizing this accelerated function.
  • Manage data: Regardless of how the memory system is organized on your platform, it should be easy to access memory from your accelerator and read back results from the host.
  • Scale and Deploy your system: Beethoven generates platform-aware for your hardware acelerator by simply changing one line!

We will cover each of these points in this documentation. You can click on the blocks in the figure above to explore Beethoven's capabilities, or continue on to one of the following major sections:

Environment Setup

Beethoven uses the BEETHOVEN_PATH environment variable to export the hardware and generated software for a design.

mkdir <my-beethoven-dir>
echo "export BEETHOVEN_PATH=`pwd`/my-beethoven-dir" >> ~/.bashrc

If you use a different shell, you can put the equivalent in the corresponding rc file.

Dependencies

Beethoven Hardware depends on sbt and a Java version 8-17. Newer versions do not play well with sbt. We heavily encourage the use of an IDE for developing Chisel or Beethoven. We internally use the JetBrains IntelliJ IDE and find it very helpful. If you choose to use IntelliJ or a similar IDE, make sure to download the sbt plugin from the plugin marketplace.

Note: if you are using IntelliJ on a system with a Java version >17, then see here to see how to select the correct Java version inside the IDE - it's somewhat tricky.

Beethoven Software depends on a C++-17 compliant compiler and CMake.

Beethoven Software Install

The Beethoven Software library is required for both simulating and running your design on real hardware.

git clone https://github.com/Composer-Team/Beethoven-Software
cd Beethoven-Software
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DPLATFORM=discrete
make -j
sudo make install

Beethoven Runtime Install

The Beethoven Runtime manages the simulator and device backends. You only need to build this when you're ready to run a testbench.

git clone https://github.com/Composer-Team/Beethoven-Runtime
cd Beethoven-Runtime
bash setup_dramsim.sh
# this will build and run the simulator
make sim_icarus