The DSX/MJPEG platform

This platform is on the CD in topcells/dsx-mjpeg

Goals

Goal of this tutorial is to show how DSX can help creating a flexible architecture description in order to achieve early performance evaluation.

DSX overview

DSX targets network or multimedia applications handling packet streams. DSX applications can use a common communication infrastructure composed of shared-memory, locks, fifo channels, ...

On the hardware side, DSX targets multiprocessor system-on-chips. This needs some parrallelization of the embedded software.

DSX assumes only the application designer himself can understand the application enough in order to make it parrallel efficiently. The prefered communication model is a fifo channel where any number of producers and consumers can be attached: the MWMR channels.

A classical DSX application is composed of tasks, all communicating through MWMR channels, preferably using this only means of communication. This splitting has some advantages:

A DSX SoC description is composed of 3 parts:

As DSX is a library implemented in the Python language, a DSX application description is actually a python program, in which any control structure or parametrization can be achived.

The MJPEG application

The application showed here is a software MJPEG decoder where:

Creating the SoC

The amount of decoder pipelines implemented in the system can be choosen at compilation time, when calling the DSX descpription file (mjpeg.py), passing a numeric argument. Valid values range from 1 to 6.

The compilation process creates

Running the application

The exe.muteks_hard file is the main simulator, we can run it with ./exe.muteks_hard. It opens some windows:

Moreover, the terminal where we launched the simulator periodically prints the simulation speed.

output.png