SoCLib platforms

SoCLib platforms

Besides existing SoC platforms, APES can be used along with the SoCLib SoC simulation library. As such, we provide a set of hardware platforms, written using the CA/BA port of the SoCLib library, that can be used to execute applications based on APES. This section explains how to install the SoCLib library as well as the SystemCASS simulation engine, and details how to run an APES application on one of the proposed platforms.

The SoCLib library and the SystemCASS simulation engine

Since both SoCLib and SystemCASS have well-maintained documentations, we will ask our reader to refer to their corresponding installation instructions. SoCLib can be fetched here. Basic installation instructions can be found here. SystemCASS can be fetched here. Basic installation instructions can be found here.

WARNING: When fetching SoCLib from the SVN repository, you must use SoCLib’s SVN root folder instead of the /soclib branch, for the root folder contains external component descriptions required by our platforms.

SoCLib configuration file

The trickiest part of the SoCLib installation process is its configuration. You can find below a template configuration file to be placed in $HOME/.soclib/global.conf.

This file contains three path definitions that need to be tuned: PATH_TO_SYSTEMC, which contains the path to your SystemC installation (optional); PATH_TO_SYSTEMCASS, which contains the path to your SystemCASS installation (mandatory); and PATH_TO_SOCLIB_CONTRIB, which contains the path to the /contrib folder of your SoCLib source tree.

WARNING: While the first two paths can be relative to an environment variable, the last one MUST be absolute.

SoCLib platforms

The SoCLib platforms we provide can be found in our git repository at: git://tima-sls.imag.fr/SoclibSimulators.git. There sources can be browsed here.

This git repository contains multiple branches using the following naming convention: CPU_CLASS DOT CACHE_TYPE DOT INTERCONNECT_TYPE. For instance, the arm.cc.vgmn platform uses the ARMv6 ISS with cache coherence and the with VGMN interconnect (see here), while the mips.nc.ring platform uses the MIPS32 ISS without cache coherence and with a ring interconnect.

These platform cannot be used as it is, since they only contain basic CPU subsystems. Therefore, other branches might contains the following suffixes: DOT SYSTEM, which describes system-related components (namely a console, timers, mailboxes, and an advanced interrupt controller); and DOT MEDIA, which describes multimedia-related components (namely a block device and a framebuffer).

Building and running

In this section, we suppose that your SoCLib is correctly configured (did you compile and install the tools in $SOCLIB/utils ?) and your SystemCASS installation is visible from anywhere (LD_LIBRARY_PATH, people ?).

To build your SoCLib platform, just type make. At this point, if everything has been correctly installed, your platform should compile flawlessly.

To run your platform, simply type: ./simulation.x PATH_TO_BINARY, where PATH_TO_BINARY points to your application binary. To run with N processors, simply type: SIMULATION_N_CPUS=N ./simulation.x PATH_TO_BINARY.

Some parameters can be passed to the GDB server embedded in the SoCLib platform. To know more about these parameters, please refer to this page.

The Parallel MJPEG test case

If you correctly installed APES, SoCLib, and SystemCASS, you should be able to run the Parallel MJPEG test case. To do so, you need to fetch the Parallel MJPEG sources from our git repository at: @git://tima-sls.imag.fr/ParallelMJPEG$ and select the right branch according to your processor architecture choice (ARM or MIPS).

Then, you need to select either the arm.cc.vgmn.system.media platform or the mips.cc.vgmn.system.media platform, again according to your processor architecture choice. These architectures require a disk image made of the raw MJPEG movie and called disk.img.

Finally, you can run your simulation platform using the command given above. WARNING: The number of processors used in your platform MUST be the same as the one specified in your application’s ldscript as CPU_*_COUNT.