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
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 www.systemc.org. 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 www.veripool.com. 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.
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:
Improvements and suggestions are always welcome and definitely needed ;]