<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Formal Veri cation of SystemC Designs using the BLAST Software Model Checker</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Paula Herber</string-name>
          <email>paula.herber@tu-berlin.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Bettina Hunnemeyer</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Technische Universitat Berlin Ernst-Reuter-Platz 7</institution>
          ,
          <addr-line>10587 Berlin</addr-line>
          ,
          <country country="DE">Germany</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>SystemC is widely used in hardware/software codesign. Although it is also used for the design of safety-critical applications, existing formal veri cation techniques for SystemC are still hardly used in industrial practice. The main reasons for this are scalability issues, the lacking support for many practically relevant SystemC language constructs, and that counter-examples are not always easy to use for debugging. In this paper, we present an approach for the formal veri cation of SystemC designs using the BLAST model checker. The main advantages of our approach are: First, we enable a fully automatic veri cation of SystemC designs that makes use of counter-example guided abstraction re nement. Second, we support a large subset of SystemC, including pointers, arrays, and structs. Third, we ease debugging by keeping the structure of the design transparent to the designer. We demonstrate the applicability of our approach with experimental results from an Anti-Slip Regulation and Anti-Lock Braking system.</p>
      </abstract>
      <kwd-group>
        <kwd>SystemC</kwd>
        <kwd>Formal Veri cation</kwd>
        <kwd>Model Checking</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        Embedded systems are often used in domains where a failure results in high
nancial losses or even in serious injury or death, e. g., in cars, airplanes and
transportation systems. This makes it indispensable to ensure their correctness
with systematic and comprehensive veri cation techniques. At the same time,
embedded systems typically consist of deeply integrated hardware and software
components, which makes comprehensive veri cation a di cult challenge. A
language that is widely used for modeling such systems is the system level design
language SystemC [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]. SystemC enables modeling and simulation of both
hardware and software on various abstraction levels. SystemC designs often serve
as reference model for the remainder of the development process. This in turn
makes the correctness of SystemC designs a crucial issue. With simulation alone,
it is not possible to cover all input scenarios and corner-cases may be overlooked.
Only formal veri cation techniques can provide the degree of assurance needed
for such key models in the design process.
      </p>
      <p>
        In this paper, we present an approach for the formal veri cation of SystemC
designs using the software model checker BLAST [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. With our approach, we
tackle the scalability issue by applying the BLAST model checker's
capability for counter-example guided abstraction re nement. At the same time, the
BLAST model checker supports a large subset of C, including pointers, arrays,
and structs. With that, it is also very well-suited for supporting a large subset
of SystemC designs. Our main contribution is an interpretation of the SystemC
semantics that is executable as a sequential, non-deterministic C program, and
keeps the structure of the design transparent to the designer, which is very
important for debugging. We have implemented an automatic transformation from
SystemC into the input language of BLAST, and thus we can verify SystemC
designs using the BLAST model checker fully automatically. We demonstrate the
practical applicability of our approach with a case study from the automotive
domain, namely an Anti-Slip Regulation and Anti-Lock Braking System.
      </p>
      <p>The rest of this paper is structured as follows: In the next section, we brie y
introduce the preliminaries that are necessary for understanding the remainder of
the paper. In Section 3, we summarize related work. In Section 4, we present the
main contribution of this paper, namely our approach for the formal veri cation
of SystemC designs using the BLAST model checker. We present experimental
results in Section 5 and conclude in Section 6.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Preliminaries</title>
      <p>In this section, we brie y introduce the preliminaries that are necessary to
understand the remainder of the paper.
2.1</p>
      <sec id="sec-2-1">
        <title>SystemC</title>
        <p>
          SystemC is a system-level design language and a framework for HW/SW
cosimulation. The semantics of SystemC is informally de ned in an IEEE
standard [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ]. SystemC is implemented as a C++ class library, which provides the
language elements for the description of hardware and software, and allows for
the modeling of both hardware and software on di erent levels of abstraction. It
also features an event-driven simulation kernel, which enables the simulation of
the design during the whole development process.
        </p>
        <p>
          Like typical hardware description languages, SystemC supports the notion of
delta-cycles, which impose a partial order on parallel processes. This means that
the execution is split into an evaluate and an update phase. In the rst phase,
concurrent processes are evaluated. This may include read and write accesses to
so-called primitive channels, which store changes in temporary variables and do
not update their channel state until the update phase. This ensures that although
the processes are serialized, they all work on the same channel states (i. e., input
data). A delta-cycle lasts an in nitesimal amount of time, and an arbitrary,
nite number of delta-cycles may be executed at one point in simulation time.
Note that the order in which processes are executed within a delta-cycle is not
speci ed in [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ], i. e., it is inherently non-deterministic.
2.2
The software model checker BLAST (Berkely Lazy AbStraction veri cation
Tool) [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ] is an open source tool for the automatic veri cation of temporal logic
properties of C programs. It was developed at the University of California,
Berkeley. BLAST can be used both for program veri cation and for test case
generation. The decision procedure used in BLAST is based on the paradigm of
counter-example guided abstraction re nement (CEGAR) and lazy abstraction
[
          <xref ref-type="bibr" rid="ref7">7</xref>
          ]. The CEGAR loop starts with a coarse abstraction of the program, and
iteratively checks the abstract program against the speci cation. If there is a
spurious counter-example in the abstract program, which is due to the
imprecision of the abstraction, it is step-wise re ned until the program is proved safe,
or a non-spurious counter-example is found. Lazy abstraction is a technique
that improves this iterative process by searching the abstract state space on the
y, and by only re ning the coarse abstraction along the path of the spurious
counter-example, leaving the abstraction in other parts unchanged. The use of
CEGAR together with lazy abstraction makes BLAST strong when applied to
data-intensive systems, in particular if strong abstractions can be found.
3
        </p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Related Work</title>
      <p>
        There exist several approaches to provide a formal semantics for SystemC. Many
of them rely on the transformation of SystemC designs into some sort of state
machine, e.g. [
        <xref ref-type="bibr" rid="ref14 ref15 ref6">6, 14, 15</xref>
        ]. Habibi and Tahar [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] transform untimed SystemC
models into equivalent state machines but do not maintain the structure of the
underlying SystemC. Traulsen et al. [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] map SystemC to PROMELA, but only
handle SystemC designs on an abstract level, do not model the SystemC
scheduler and do not support primitive channels. Zhang et al. [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] introduce a
formalism called SystemC waiting-state automata, which model SystemC designs
at the delta-cycle level. They also do not model the scheduler and they do not
consider complex interactions between processes. Other approaches use process
algebras [
        <xref ref-type="bibr" rid="ref13 ref5">13, 5</xref>
        ], petri-nets [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] or a C representation [
        <xref ref-type="bibr" rid="ref3 ref4">4, 3</xref>
        ] for the veri cation of
SystemC designs. The formal language SystemCFL [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] is based on process
algebras and de nes the semantics of SystemC processes using structural operational
semantics style deduction rules. It considers only simple communications, and
no dynamic sensitivity or channels. Garavel et al. [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] translate SystemC/TLM
into the process algebra LOTOS and import C Code into the LOTOS model
using the veri cation toolbox CADP. They are able to support many SystemC
and C++ constructs, but the transformation has to be done manually and they
only support untimed SystemC designs. Karlsson et al. [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] use a petri-net based
representation to verify SystemC designs. As interactions between subnets
introduces additional subnets this approach produces a huge overhead. Cimatti
et al. [
        <xref ref-type="bibr" rid="ref3 ref4">4, 3</xref>
        ] propose a transformation from SystemC into both sequential and
threaded C programs. Their work is similar to our approach, and we adopt some
of their ideas.However, their approach uses method inlining and thus does not
keep the structure of a given design transparent to the designer, which makes
debugging hard. Furthermore, it is limited to a restricted set of data types and
can not handle structs or arrays.
      </p>
      <p>
        Besides Kroening et al. [
        <xref ref-type="bibr" rid="ref12 ref2">12, 2</xref>
        ], none of the related approaches can cope with
pointers, arrays, and structs. In [
        <xref ref-type="bibr" rid="ref12 ref2">12, 2</xref>
        ], the authors propose a semantics for
SystemC that is based on a labeled Kripke structure and automatically partition
the design into a hardware and a software part to increase e ciency of veri
cation. However, they abstract from hardware and do not consider timing or
inter-process communication via sockets and channels, which makes it di cult
to cope with deeply integrated hardware and software components.
      </p>
      <p>
        In our own previous work, we have presented an approach for the
transformation of SystemC designs into UPPAAL timed automata and their veri cation
using the UPPAAL model checker [
        <xref ref-type="bibr" rid="ref8 ref9">8, 9</xref>
        ]. However, the UPPAAL model checker
cannot handle data very well. In contrast, BLAST with its counter-example
driven abstraction re nement can cope with data comparatively e ciently.
4
      </p>
    </sec>
    <sec id="sec-4">
      <title>Transforming SystemC into Non-deterministic C</title>
      <p>The main contribution of this paper is a transformation from SystemC into
nondeterministic sequential C that keeps the structure of the design transparent
to the designer. The resulting C program can be veri ed using the BLAST
model checker. The main idea of the transformation is that we interpret the
SystemC semantics in sequential C code, using the non-deterministic choice of
the BLAST model checker to model the SystemC scheduler. To this end, we
transform each SystemC process of a given design into a set of C methods,
whose execution is controlled by C implementations of the (non-deterministic)
scheduler, events, and sensitivity. Our transformation supports a large subset
of SystemC programs, including static and dynamic sensitivity, time, pointers,
arrays, and structs. In the following subsections, we rst de ne this subset by a
set of assumptions we have to impose on a given input design. Then, we explain
how a SystemC design is represented as a C program using our interpretation
of its semantics. Finally, we describe our implementations of methods, events,
processes, the scheduler and the request-update mechanism of primitive channels.
4.1</p>
      <sec id="sec-4-1">
        <title>Assumptions</title>
        <p>We impose the following assumptions on a given input design:
1. No recursion is used.
2. No function pointers are used.
3. We assume that pointer arithmetic is used safely and that type safety of
memory accesses is given.
4. We assume that no integer over ows are present in the system.
5. So far, we do not support any hardware data types.
6. So far, we do not support class inheritance.</p>
        <p>The rst four assumptions are directly derived from the subset of C programs
that is supported by the BLAST model checker. Assumptions 5 and 6 could
potentially be lifted in future work.
4.2</p>
      </sec>
      <sec id="sec-4-2">
        <title>Representation of SystemC Designs in C</title>
        <p>The main challenge for the transformation from SystemC into non-deterministic
sequential C programs is to interpret the SystemC execution semantics and nd
an adequate representation of each SystemC language construct in the
resulting C program. The SystemC execution semantics is de ned by the interplay
between the scheduler, processes, events, and primitive channels. In particular,
the execution of processes is controlled by events and the scheduler. A process
may be interrupted by a wait call, which results in the suspension of the process
until it is triggered by an event or the expiration of a given timeout. To model
this behavior in a C program, it is necessary to implement interrupt routines,
which are able to save the current state of a process, suspend its execution and
resume it at a later point of execution.</p>
        <p>call</p>
        <p>Methods from all modules and channels</p>
        <p>interrupt handling
suspend
Processes
process state
sensitivity
type
activate
update</p>
        <p>notify</p>
        <p>Events
event state
notification
delay
notify
update
Scheduler
notify</p>
        <p>Support
variables
Member
variables
Primitive Channels
request_update()
request−update−flag
activate
update
g
// s e t dynamic s e n s i t i v i t y
d y n s e n s i t i v i t y [ p id ] = ev ;
. . .
4.3</p>
      </sec>
      <sec id="sec-4-3">
        <title>Design Transformation</title>
        <p>Listing 1.1. Transformation of Event Noti cation
The structure of a SystemC design is de ned by modules that are connected
via ports and channels. Each of the modules and channels contains local
variables, events, methods and processes, and possibly other modules or channels. In
contrast to SystemC, C does not support object-orientation. To cope with this,
we atten the hierarchy of a given SystemC design and translate all methods
and variables into global methods and variables. We keep the structure of the
original design transparent to the designer using pre xing. Port connections are
implicitly modeled by replacing the call of a method through a port with a call
to the channel method that is bound to this port.</p>
        <p>
          As stated above, the SystemC execution semantics is de ned by the interplay
of the scheduler, events, and processes. The main challenge when modeling the
SystemC scheduler in a sequential C program is to resolve concurrent processes
into a sequential execution order. Following the approach of [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ], we use a
nondeterministic variable to execute processes in an arbitrary order. This ensures
that the later veri cation of a given design considers all possible execution orders.
As this approach is already described in [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ], we focus on the transformation of
events and processes in this section.
        </p>
        <p>For illustration, we use a simple producer-consumer example, where a
producer and a consumer communicate through a rst-in- rst-out (FIFO) bu er.
Both the producer and the consumer have a main method, which is bound to a
process. Additionally, the producer has a method produce, which is called from
the main method and produces an item.</p>
        <p>
          Event Transformation As in [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ], we model events by two variables representing
their state and the point of time where the event will occur next (if noti ed with
a timed noti cation). The event state is one of DELTA, FIRED, TIMED, and
NONE. To notify an event, the corresponding process updates the event state
and possibly the event time accordingly. Immediate noti cations can be modeled
as shown in [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ] by simply setting the event state to FIRED and setting processes
that are sensitive to the event to runnable.
        </p>
        <p>An example of a timed noti cation of an event ev is shown in Lines 5 to 8 in
Listing 1.2. The semantics of SystemC event noti cations dictates that a timed
noti cation overwrites pending timed noti cations if the given timing delay
expires earlier than the pending noti cation. A timed noti cation is discarded if a
delta-delay noti cation is pending. We check these two conditions in Lines 5-6.
The event sensitivity is set to dynamic in Line 11.</p>
        <p>
          Process Suspension and Resumption To model event-triggered execution, we
have to cope with suspension and resumption of processes. For example, in the
producer-consumer design, the method produce is suspended after timed
notication. In order to enable the suspension of processes in the middle of a C
method, we do the following (similar to [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ]): 1. We save the values of local
variables (incl. parameters) in global variables. 2. We introduce a label and save it
as return label of the current process. 3. We suspend the method by using the
return statement. 4. At the return label, we restore local variables and continue
execution. Unlike Cimatti et al. [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ], who use method inlining to achieve exactly
one method per process, we parameterize all C methods with a unique process
ID to enable that multiple processes may enter the same method. The process
ID (pid) is used to update the process state to SLEEP, to save and restore local
variables, and to save the return label of the current process. The corresponding
global variables are implemented as arrays with an entry for each process of the
system. In future work, the size of the arrays may be reduced by checking how
many processes may enter a given method.
        </p>
        <p>
          An example for method suspension is shown in Listing 1.2. In Line 3, the
process is put to sleep. To actually suspend method execution, local variables and
the return label are saved in Line 5, 6 and 8. The method is left in Line 9. The
process can resume execution at the point where it was suspended by jumping
to the return label de ned in Line 11. Then, local variables are restored and
execution is continued.
Method Call Transformation A further challenge when modeling process
suspension that a process may be not necessarily in the method that is directly bound
to the process, it may also be in any method of its call stack. In [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ], this problem
is solved using method inlining. This, however, has the drawback that it destroys
the original structure of the SystemC design and thus makes debugging much
harder. Furthermore, method inlining seriously increases the code size of the
resulting C program. In our approach, we add return labels to method calls and
save local variables and the return label before a method is called. If the method
returns, we check whether the process was suspended during the execution of
the method call. If it was suspended, we save the return label and suspend the
outer method as well. For systems with many methods, this leads to a large
number of return labels. However, the number of return labels for each method
corresponds to the number of method calls plus one, and thus it is linear in the
code size.
        </p>
        <p>An example for a method call with process suspension is shown in Listing 1.3.
Note that local variables have to be saved before the method call (Line 4),
and also adding a return label and restoring of local variables have to be done
before the method is called (Line 6) to cope with the case where the called
method already was suspended and has to be called again. After the method
call (Line 8), the check whether it was suspended is performed and, if necessary,
the return label to execute the method call again is saved and the outer method
is suspended as well (Line 10 to 13).
5</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Experimental Results</title>
      <p>
        We have implemented the transformation from SystemC to the input language
of BLAST as described above in Java. To show the practical applicability of our
approach and to compare it with our previous approach where SystemC designs
are translated into UPPAAL timed automata [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], we have used an Anti-Slip
Regulation and Anti-Lock Braking System (ASR/ABS) The ABS/ASR system
monitors the speed at each wheel and regulates the brake pressure in order to
prevent wheel slip or lockup and improve the driver's control over the car. It
consists of approximately 500 LOC (18 processes, 12 channels). The C program
generated by our transformation engine comprises approximately 2400 LOC. All
experiments were run on a machine with an Intel Pentium 3.4 GHz CPU and 4
GB main memory and averaged over 10 runs.
      </p>
      <p>In our experiments, we checked that a wheel slip always triggers the anti-slip
regulation (ASR) and that a wheel lock always triggers the anti-lock braking
system (ABS). Both properties can be speci ed as reachability properties as
shown in Listing 1.4.</p>
      <p>
        The BLAST model checker automatically checks for reachability of the
ERROR label, which in this case is unreachable. This proves that the ASR is always
triggered if a wheel slip is detected. The veri cation times are shown in Table 1.
The veri cation of the ASR took approximately 7 minutes, the veri cation of
the ABS approximately 8 minutes. As shown in [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], model checking of the
ASR/ABS system with our previous approach was only possible with bit-state
hashing enabled, which uses a potentially unsafe abstraction of the state space.
With our novel approach for the automatic veri cation of SystemC designs using
the BLAST model checker we make counter-example guided abstraction re
nement (CEGAR) available for SystemC designs and thus can handle such designs
with reasonable e ort.
In this paper, we have presented an approach for the automatic veri cation of
SystemC designs using the BLAST model checker. Our main contribution is an
interpretation of the SystemC semantics in a non-deterministic, sequential C
program, which keeps the structure of the design transparent to the designer.
Our approach supports many important SystemC constructs, including static
and dynamic sensitivity, time, pointers, arrays, and structs. By providing an
explicit de nition of the SystemC scheduler, events, and processes, we soundly
capture the SystemC semantics. At the same time, our approach enables us to
use the BLAST model checker for SystemC designs. The main advantage is that
the BLAST model checker enables us to use counter-example guided abstraction
re nement, which scales well for an important class of SystemC designs, namely
asynchronous and mainly sequential SystemC designs with intensive data
handling. We have demonstrated this advantage with an Anti-Slip Regulation and
Anti-Lock Braking system, which could not be handled with previous approaches
for the veri cation of SystemC designs. With our novel approach, we can verify
properties of the ASR/ABS system in less than 10 minutes.
      </p>
      <p>In future work, we plan to combine our previous work, where the UPPAAL
model checker is used for veri cation, with our novel approach for the veri
cation of SystemC designs using the BLAST model checker. We think that the
former is better suited for systems or subsystems where time, concurrency and
communication play the most important role while the latter is better suited for
systems or subsystems where data handling predominates.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>D.</given-names>
            <surname>Beyer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T. A.</given-names>
            <surname>Henzinger</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Jhala</surname>
          </string-name>
          , and
          <string-name>
            <given-names>R.</given-names>
            <surname>Majumdar</surname>
          </string-name>
          .
          <article-title>The software model checker BLAST: Applications to software engineering</article-title>
          .
          <source>International Journal on Software Tools and Technology Transfer</source>
          ,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <given-names>N.</given-names>
            <surname>Blanc</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Kroening</surname>
          </string-name>
          , and
          <string-name>
            <given-names>N.</given-names>
            <surname>Sharygina</surname>
          </string-name>
          .
          <article-title>Scoot: A Tool for the Analysis of SystemC Models</article-title>
          .
          <source>In TACAS, LNCS 4963</source>
          , pages
          <fpage>467</fpage>
          {
          <fpage>470</fpage>
          . Springer,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <given-names>A.</given-names>
            <surname>Cimatti</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Griggio</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Micheli</surname>
          </string-name>
          ,
          <string-name>
            <surname>I. Narasamdya</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Roveri. Kratos - A Software Model</surname>
          </string-name>
          <article-title>Checker for SystemC</article-title>
          .
          <source>In CAV, LNCS 6806</source>
          . Springer,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>A.</given-names>
            <surname>Cimatti</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Micheli</surname>
          </string-name>
          ,
          <string-name>
            <surname>I. Narasamdya</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Roveri</surname>
          </string-name>
          .
          <article-title>Verifying SystemC: A software model checking approach</article-title>
          .
          <source>In FMCAD</source>
          , pages
          <volume>51</volume>
          {
          <fpage>59</fpage>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <given-names>H.</given-names>
            <surname>Garavel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Helmstetter</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
            <surname>Ponsini</surname>
          </string-name>
          , and
          <string-name>
            <given-names>W.</given-names>
            <surname>Serwe</surname>
          </string-name>
          .
          <article-title>Veri cation of an industrial SystemC/TLM model using LOTOS and CADP</article-title>
          .
          <string-name>
            <surname>In</surname>
            <given-names>MEMOCODE</given-names>
          </string-name>
          ,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <given-names>A.</given-names>
            <surname>Habibi</surname>
          </string-name>
          and
          <string-name>
            <given-names>S.</given-names>
            <surname>Tahar</surname>
          </string-name>
          .
          <article-title>An Approach for the Veri cation of SystemC Designs Using AsmL</article-title>
          .
          <source>In ATVA, LNCS 3707</source>
          , pages
          <fpage>69</fpage>
          {
          <fpage>83</fpage>
          . Springer,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <given-names>T. A.</given-names>
            <surname>Henzinger</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Jhala</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Majumdar</surname>
          </string-name>
          , and
          <string-name>
            <given-names>G.</given-names>
            <surname>Sutre</surname>
          </string-name>
          .
          <article-title>Lazy abstraction</article-title>
          .
          <source>In Symposium on Principles of Programming Languages</source>
          , pages
          <volume>58</volume>
          {
          <fpage>70</fpage>
          . ACM,
          <year>2002</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <given-names>P.</given-names>
            <surname>Herber</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Fellmuth</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.</given-names>
            <surname>Glesner. Model Checking SystemC Designs Using Timed</surname>
          </string-name>
          <article-title>Automata</article-title>
          .
          <source>In CODES+ISSS</source>
          , pages
          <volume>131</volume>
          {
          <fpage>136</fpage>
          . ACM press,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <given-names>P.</given-names>
            <surname>Herber</surname>
          </string-name>
          and
          <string-name>
            <given-names>S.</given-names>
            <surname>Glesner</surname>
          </string-name>
          .
          <article-title>A HW/SW Co-Veri cation Framework for SystemC</article-title>
          .
          <source>ACM Transactions on Embedded Computing Systems</source>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <given-names>IEEE</given-names>
            <surname>Standards</surname>
          </string-name>
          <article-title>Association</article-title>
          . IEEE Std.
          <volume>1666</volume>
          {
          <issue>2011</issue>
          ,
          <article-title>Open SystemC Language Reference Manual</article-title>
          . IEEE Press,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <given-names>D.</given-names>
            <surname>Karlsson</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Eles</surname>
          </string-name>
          , and
          <string-name>
            <given-names>Z.</given-names>
            <surname>Peng</surname>
          </string-name>
          .
          <article-title>Formal veri cation of SystemC Designs using a Petri-Net based Representation</article-title>
          .
          <source>In DATE</source>
          , pages
          <volume>1228</volume>
          {
          <fpage>1233</fpage>
          . IEEE Press,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <given-names>D.</given-names>
            <surname>Kroening</surname>
          </string-name>
          and
          <string-name>
            <given-names>N.</given-names>
            <surname>Sharygina</surname>
          </string-name>
          .
          <article-title>Formal Veri cation of SystemC by Automatic Hardware/Software Partitioning</article-title>
          .
          <source>In MEMOCODE</source>
          , pages
          <volume>101</volume>
          {
          <fpage>110</fpage>
          . IEEE,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>K. L. Man</surname>
          </string-name>
          .
          <article-title>An Overview of SystemCFL</article-title>
          .
          <source>In Research in Microelectronics and Electronics</source>
          , volume
          <volume>1</volume>
          , pages
          <fpage>145</fpage>
          {
          <fpage>148</fpage>
          ,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>C. Traulsen</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          <string-name>
            <surname>Cornet</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Moy</surname>
            , and
            <given-names>F.</given-names>
          </string-name>
          <string-name>
            <surname>Maraninchi</surname>
          </string-name>
          <article-title>:. A SystemC/TLM semantics in Promela and its possible applications</article-title>
          .
          <source>In SPIN, LNCS 4595</source>
          . Springer,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <given-names>Y.</given-names>
            <surname>Zhang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Vedrine</surname>
          </string-name>
          , and
          <string-name>
            <given-names>B.</given-names>
            <surname>Monsuez. SystemC Waiting-State Automata</surname>
          </string-name>
          .
          <source>In International Workshop on Veri cation and Evaluation of Computer and Communication Systems</source>
          ,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>