SpecC
SystemC
Esterel
ECL
CRSM
SHIM
SystemJ
+++
++
++
++
++
++
+++
Mix of a range of semantics or MoCs
+
++
-
-
++
+
++
Behavioural hierarchy
+
-
+++
+++
+++
+
+++
Support for exceptions and exception handling
++
-
+++
+++
++
-
+++
Mix of data and control dominated processing
++
++
+
++
-
++
++
-
-
+++
++
+++
+++
+
A classification and comparison of a few popular system-level languages System-Level Languages
SpecC
Asynchronous
GALS CRP
CCS
CSP
CFSM (POLIS)
Synchronous
CRSM
Dataflow
SHIM Signal
Control (Multiclock) Esterel
Lustre
Argos
ECL
Statecharts
The six major comparison criteria
Informal SystemC
Separation of computation from communication
Formal
Support for formal verification
The SystemJ Approach to System-level Design em o 20 Co 06 de
Flavius Gruian1, Partha Roop2, Zoran Salcic2, Ivan Radojevic2 2. {p.roop,z.salcic,i.radojevic}@auckland.ac.nz Dept. of Electrical and Computer Engineering The University of Auckland New Zealand
M
1.
[email protected] Dept. of Computer Science Lund Institute of Technology Sweden
SystemJ Example: A Protocol Stack
SystemJ, the language
1 2
designed for specification, modeling and synthesis of GALS systems
3 4 5 6 7
Java •object orientation •basic data and control processing •platform support GC, compilers, libraries
•desktop and embedded use
Asynchronous Constructs
+
Synchronous Constructs (Esterel-like)
+
•composition || •signal operations
8 9 10 11 12 13 14
•composition ><
15 16 17 18
creates new clock domains
19 20
•channel operations
21 22 23 24
(blocking) read,write also in combination with signal expressions
emit, present, await, RHS, ...
•pure/valued signals •preemptions
25 26 27 28 29 30 31 32 33 34 35 36
abort, suspend, trap
37 38
class Packet { public final static int HDRSIZE = 6 ; public final static int DATASIZE = 5 6 ; public final static int CRCSIZE = 2 ; public final static int PKTSIZE = HDRSIZE+DATASIZE+CRCSIZE ; protected byte packet [ ] ; public Packet ( ) { p a c k e t = new byte [ PKTSIZE ] ; } public int getCRC ( ) { return p a c k e t [ PKTSIZE − 2]= PKTSIZE packet(buffer)
data ! i++
reset_i
i >= to_send.length
TestBench
©2006 Copyright Flavius Gruian
data ? buffer[cnt] = data cnt++
TheStack
true await
inpkt crc = packet.cmpCRC()
lengthy computation
____packet___ crc_ok(crc == packet.getCRC())
kill_check
reset_i
Reset generator:
crc_ok = true crc_ok = false kill_check
reset_i
reset ?
______ reset_i