This is the web site of System Designer and DSPE

System Designer is a software framework for developing domain-specific languages based on model-driven code-generation techniques.

The Digital Stream-Processing Environment (DSPE) is a development environment featuring a visual domain-specific language for designing and implementing stream-processing and signal-processing applications. DSPE has been developed with System Designer and supports multi-core processors and hardware accelerators.

What to do if …

You want to create a simple stream processing application

First of all you have to create a new System by using the New System wizard available on the System Designer toolbar or on the main or context menus.

Then you have to create some Definitions (DSPE model instances) and combine them into the design of you application. You can start designing you application bottom-up:

  • define your own Gates. They are the type system of your application. Alternatively you can import (context menu on the system->properties->Imported Systems) an already available System containing the gates you want to use. At the beginning we advice to stick to StandardGates and inside them just set the fields marked with an error by the validator.
  • Define your Units and add them (drag and drop from the palette) the required parameter input Gates, data input Gates, parameter output Gates or data output Gates.
  • Define a UnitBehaviour for each of you SoftwareUnits. At the beginning just use the most simple version of them (CImplementations). In your SoftwareUnits, remember to expand the header and set the associated UnitBehaviour for the simulation, the production or both versions. You may leave the information inside the CImplementations empty for the moment.
  • Create a Configuration. Drag and drop the required Units from the palette and link their Gates to connect them. Always remember to expand the header and to verify that the GenerationType of the OperationalAspect is aligned (either Production or Simulation) with the version of UnitBehaviours you want to use in your Units. It is also very important to check that the execution sequence is set correctly (move the small square with a number located in the top right corner of the Units).
  • Create a GUIApplication, expand the header and set the associated Structure by referencing your Configuration. Collapse the huge header and start adding parameter input and parameter output Gates by drag and drop from the palette. Link the parameter Gates of the Application with those of the Units inside the Configuration.
  • All of your Definitions should now be valid (which mean there is no red cross on them inside the System Explorer). You can then generate the skeleton of your application (context menu on your system->Generate).
  • In the Project Explorer two new projects will appear. Both with the name of your System and one with an additional “_c” and the other one with an additional “_wx”. Compilation should start automatically (if Project->Build Automatically is on in Eclipse). After compilation the “_wx” project should contain an executable of your application.
  • Please refer to the Eclipse documentation for C/C++ development on how to execute or debug the generated executables.
  • Obviously your application is now incomplete and will not produce any result because the algorithms inside the UnitBehaviours are still missing. Get back to the System Explorer and jump to the associated generated sources (context menu on the CImplementation->Go To->F_SomeName.c). You can develop the source code of the algorithms directly in the generated code (just avoid removing the extraction tags) and then extract them at the end by mean of context menu on the CImplementation->Extract.
  • Always remember to regenerate the System and clean the “_wx” project (Project->Clean…) to recompile the executables.
  • Iterate back to one of the previous steps to continue designing and implementing your application.
  • If you  always remember to extract the algorithms you can freely sometime throw away the generate “_c” and “_wx” projects to erase unused source files. Alternatively you can purge the projects by context menu on your system->Purge.

You want to create an application for multicores

  • Create a System and Gates, Units and a GUIApplication, … for all the basic elements. Follow the instructions provided above for creating a simple stream processing application.
  • Instead of using a Configuration to connect the Units, use a CoprocScheduler. It’s a special type of Configuration that is able to process Units in parallel.
  • In a CoprocScheduler, the execution will be driven by the flow of the events, you therefore have to create EventGates and add them to Units for all relevant inputs and outputs involved in scheduling the application’s processing.
  • For all Units that you want to execute in parallel, instead of using a CImplementations or CBlockOptimizations as a UnitBehaviour, you have to use a CoprocImplementation or CoprocBlockOptimization. For all other Units you have to use a StateImplementation or a StateBlockOptimization.
  • Verify that all the automatic features on your Implementations or BlockOptimizations are enabled: HasOPBuffer, HasOPBufferManagement, HasAutomaticTransfer, HasAutomaticTransit, HasAutomaticSend, HasAutomaticExecute have to be enabled and EventSupportType has to be set to Advanced.
  • Add all required Next Gates to the Units, connect them in the CoprocScheduler and remember to specify them in the UnitBehaviours. Next Gatex provide a way to drive the execution while the Units are processing concurrently.
  • Remember to specify and handle the InitEvent.
  • In the header of your GUIApplication, you’ll find some specialized fields to configure and optimize the behavior of your application while parallel processing.