SystemCXML: FERMAT's SystemC Parser

Authors: Deepak Matthaikutty, David Berner, Hiren Patel, and Sandeep Shukla

Prerequisites: Apache's Xerces C++ XML Parser, Doxygen 1.3.7 or newer
Sourceforge Download: SystemCXML

Brief Description:
SystemCXML is a project developed to retrieve structural information from SystemC models. SystemC is a hardware description language with a free modeling and simulation environment provided by OSCI at SystemCXML is a component of the CARH framework that provides a data introspection service for SystemC models.

SystemC parsing is a challenging problem for many research groups and there are many ways in which people have tackled this problem. To name one approach is SystemPerl by Veripool at However, these require user defined hints in the source which we think it not necessary. We have used open-source technologies such as Doxygen and XML parser to display our prototype for a SystemC parser.

Recently there has been released another SystemC parser, that is based on the GNU GCC. It is called Pinapa and part of GreenSoCS. This has the advantage, that it makes not only structural but also behavioral information available. A disadvantage compared to SystemCXML is that is is quite heavy, it requires to modify GCC and the SystemC source libraries. Also since it depends on GCC, other compilers cannot be used.
Phases of development:
Phase 1: This phase employs the use of Doxygen in interpreting SystemC source and constructing the respective XML files based on our configuration supplied. Phase 1 converts the the XML files from Doxygen to an intermediate representation that we call ASLD (Abstract Syntax Language Definition), which is also in an XML format. The ASLD captures all SystemC structural information such as hierarchy, ports, signals, types etc.

Phase 2: The ASLD is used as the input to this phase. This is the stage responsible for creating an internal representation (data structure) to represent the structure represented in the ASLD along with netlist construction. The data structure has an API through which information about modules, their ports, types etc, can be extracted.

Backend passes: In order to use the internal representation, backend passes can be added that use the structural SystemC information. Currently we include an example backend pass that generates a graph of the module hierarchy in the DOT format.

More information:
There is now a technical report available describing the technology of SystemCXML and giving some more details about the internal workings: SystemCXML: An Extensible SystemC Frontend Using XML

To do / wishlist:

  • Primary implementation is done using C++ with Apache's Xerces C++ parsers. We have evolved our understanding of Doxygen such that we can further improve on how much Doxygen markup we can use to infer SystemC constructs from the Doxygen output. This may be used for a future replacement of Phase 1
  • To get a somewhat cleaner and more flexible parsing, it would be nice to replace Phase 1 with an additional implementation in a high level language auch as Python.
  • Additional backend passes can be added. We are particularly interested in a visualization of the netlist connections, on one or several levels of hierarchy.

  • Contact us:

    Improvements and suggestions are always welcome and definitely needed ;] Logo
Wed Jan 19 01:45:38 UTC 2005