SystemC::Manual - SystemPerl primary documentation
The publicly licensed SystemPerl package provides several extensions to SystemC. It provides sp_preproc, extending the language for AUTOmatic connection of hierarchy like my Verilog-Mode, trace files and netlist linting. Its netlist and parsing utilities are general enough for writing your own tools. Two additional tools provide for speeding up GCC compiles and dependency correction. You can download SystemC from the link off of http://www.veripool.org/systemperl
This package provides several major sub-packages. The SystemC::Parser understands how to read SystemC files, and extract tokens and such, similar to Verilog::Parser.
SystemC::Netlist builds netlists out of SystemC files. This allows easy scripts to determine things such as the hierarchy of SC_MODULEs. The netlist database may also be extended to support other languages.
sp_preproc provides extensions to the SystemC language, called the SystemPerl language. This allows most of the Tedium to be removed from SystemC coding, just as the author's /*AUTO*/ comments did for the Verilog language. See SystemC::SystemPerl after installation.
sp_include shows a technique for speeding up SystemC compiles using GCC. sp_makecheck allows for cleaning up dependency files when dependencies have been removed or changed.
Finally, the src directory contains useful C++ utilities for simulation, such as changing cout to send to both the screen and a file. You may point to this directory underneath the kit, or set SYSTEMPERL_INCLDUE to point to these sources.
package Trialparser; @ISA = qw(SystemC::Parser); sub module { my $self = shift; my $module = shift; print $self->filename.":".$self->lineno().": "; print "Contains the module declaration for $module\n"; } package main; my $sp = Trialparser->new(); $sp->read ("test.sp");
use SystemC::Netlist; my $nl = new SystemC::Netlist (); foreach my $file ('testnetlist.sp') { $nl->read_file (filename=>$file, strip_autos=>1); } $nl->link(); $nl->autos(); $nl->lint(); $nl->exit_if_error(); foreach my $mod ($nl->modules_sorted) { show_hier ($mod, " "); } sub show_hier { my $mod = shift; my $indent = shift; print $indent,"Module ",$mod->name,"\n"; foreach my $cell ($mod->cells_sorted) { show_hier ($cell->submod, $indent." ".$cell->name." "); } }
SC_MODULE(mod) { /*AUTOSIGNAL*/ SC_CTOR(mod) { SP_CELL (sub, submod); /*AUTOINST*/
This expands into:
SC_MODULE(mod) { /*AUTOSIGNAL*/ // Beginning of SystemPerl automatic signals sc_signal<bool> a; // For submod // End of SystemPerl automatic signals SC_CTOR(mod) { SP_CELL (sub, submod); /*AUTOINST*/ // Beginning of SystemPerl automatic pins SP_PIN (sub, a, a); // End of SystemPerl automatic pins
This version of SystemPerl has been built and tested on:
* i386-linux
It should run on any system with Perl, a C compiler, bison, and flex.
SystemC must be installed to get the complete function. Currently 1.2.1beta, 2.0.1, 2.1 and 2.2 are the versions supported for tracing, other versions should work without tracing or with minor editing.
Download the latest package from http://www.veripool.org/systemperl or CPAN and decompress.
gunzip SystemPerl_version.tar.gz ; tar xvf SystemPerl_version.tar}
cd to the directory containing this README notice. Some files will permanently live in this directory, so make sure it's in a site wide area.
cd SystemPerl*
Make sure the SYSTEMC environment variable points to your SystemC installed directory; or that SYSTEMC_INCLUDE points to the include directory with systemc.h in it, and that SYSTEMC_LIBDIR points to the directory with libsystemc.a in it. If using bash, this would consist of the line
SYSTEMC
SYSTEMC_INCLUDE
SYSTEMC_LIBDIR
export SYSTEMC=/path/to/systemc export SYSTEMC_INCLUDE=/path/to/systemc/include # with systemc.h export SYSTEMC_LIBDIR=/path/to/systemc/lib # with libsystemc.a
in your ~/.bashrc file.
~/.bashrc
If different than the above, make sure the SYSTEMC_KIT environment variable points to your original SystemC source code kit.
SYSTEMC_KIT
Type perl Makefile.PL to configure SystemPerl for your system.
perl Makefile.PL
You may get a warning message about needing Verilog::Netlist, if so you need to install or upgrade the verilog-perl package from CPAN.
verilog-perl
Type make to compile SystemPerl.
make
If you get a error message ``y.tab.c: error: parse error before goto,'' there is a problem between Bison and GCC. The simplest fix is to edit y.tab.c to comment out ``__attribute__ ((unused))''.
Type make test to check the compilation.
make test
You can see examples under the test_dir directory. The *.sp files are "inline" converted, while the *.h and *.cpp files are expanded from the .sp files.
Type make install to install the programs and any data files and documentation.
make install
Add a SYSTEMPERL environment variable that points to the directory of this kit (the directory you typed ``make install'' inside, not your site-perl directory.) If using bash, this would consist of the line
SYSTEMPERL
export SYSTEMPERL=/path/to/systemperl
Optionally add a SYSTEMPERL_INCLUDE environment variable if for some reason you wish to relocate the include files (the files under the kit's src directory). For example distributions often want to relocate the SystemPerl includes into the standard system include directory. Note that these files are not installed with make install (as Perl doesn't provide a standard way to install includes), which is why SYSTEMPERL or SYSTEMPERL_INCLUDE must point to them.
SYSTEMPERL_INCLUDE
SystemPerl is part of the http://www.veripool.org/ free SystemC software tool suite. The latest version is available from CPAN and from http://www.veripool.org/systemperl.
Copyright 2001-2013 by Wilson Snyder. This package is free software; you can redistribute it and/or modify it under the terms of either the GNU Lesser General Public License Version 3 or the Perl Artistic License Version 2.0.
This code is provided with no warranty of any kind, and is used entirely at your own risk.
Wilson Snyder <wsnyder@wsnyder.org>.
SystemC::Manual (This document)
SystemC::SystemPerl
sp_includer, sp_makecheck, sp_preproc
SystemC::Netlist, SystemC::Parser
SystemC::Coverage SystemC::Coverage::Item SystemC::Coverage::ItemKey
SystemC::Netlist SystemC::Netlist::AutoCover SystemC::Netlist::AutoTrace SystemC::Netlist::Cell SystemC::Netlist::Class SystemC::Netlist::CoverGroup SystemC::Netlist::CoverPoint SystemC::Netlist::File SystemC::Netlist::Method SystemC::Netlist::Module SystemC::Netlist::Net SystemC::Netlist::Pin SystemC::Netlist::Port
Verilog::Netlist
To install SystemC::Netlist, copy and paste the appropriate command in to your terminal.
cpanm
cpanm SystemC::Netlist
CPAN shell
perl -MCPAN -e shell install SystemC::Netlist
For more information on module installation, please visit the detailed CPAN module installation guide.