SystemC
Spesso si pensa al SystemC come ad un linguaggio di descrizione hardware, simile al VHDL o al Verilog, ma più precisamente è un linguaggio di descrizione dei sistemi, poiché mostra la sua potenza di funzionamento nei modelli a transizione di livelli e comportamentali.
Il SystemC è un set di librerie in C++ con cui è possibile simulare processi concorrenti, ovvero che avvengono nello stesso momento, ognuno descritto attraverso la sintassi C++. Nell'ambiente di lavoro del SystemC, gli oggetti descritti in questo modo possono comunicare in un ambiente simulato real-time attraverso tutti i tipi di segnale che offre il C++, ed altri offerti dalle librerie SystemC, oltre a quelli definiti dal programmatore.
Storia
- 27 settembre 1999: annunciata Open SystemC Initiative
- 1 marzo 2000: rilasciata SystemC v0.91
- 28 marzo 2000: rilasciata SystemC v1.0
- 1 febbraio 2001: rilasciate specifiche del SystemC v2.0 ed il codice sorgente della v1.2 Beta
- 3 giugno 2003: rilasciato SystemC 2.0.1 LRM (language reference manual)
- 6 giugno 2005: rilasciato SystemC 2.1 LRM and TLM 1.0 (transaction-level modeling)
- 12 dicembre 2005: IEEE approva lo standard IEEE 1666-2005 per il SystemC
- 13 aprile 2007: SystemC v2.2 released
Caratteristiche
Moduli
I moduli costituiscono i blocchi base di un progetto SystemC. Un modello di solito consiste in diversi moduli che comunicano attraverso le porte.
Porte
Le porte permettono la comunicazione fra l'interno del modulo e l'esterno, verso altri moduli.
Processi
Processes are the main computation elements. They are concurrent.
Canali
I canali sono gli elementi che permettono la comunicazione nel SystemC. Possono essere sia semplici cavi o complessi sistemi di comunicazione, come FIFO o bus
Canali elementari:
- signal
- buffer
- fifo
- mutex
- semaphore
Interfacce
Le porte usano le interfacce per comunicare con i canali.
Eventi
Permette la sincronizzazione fra i processi.
Tipi di dati
Il SystemC introduce alcuni tipi di dati che supportano dei modelli hardware.
Tipi standard estesi:
- sc_int<> 64-bit signed integer
- sc_uint<> 64-bit unsigned integer
- sc_bigint<> arbitrary precision signed integer
- sc_biguint<> arbitrary precision unsigned integer
Tipi logici:
- sc_bit 2-valued single bit
- sc_logic 4-valued single bit
- sc_bv<> vector of sc_bit
- sc_lv<> vector of sc_logic
Fixed point types:
- sc_fixed<> templated signed fixed point
- sc_ufixed<> templated unsigned fixed point
- sc_fix untemplated signed fixed point
- sc_ufix untemplated unsigned fixed point
Esempio
Esempio di codice per un sommatore:
#include "systemc.h"
SC_MODULE(adder) // module (class) declaration
{
sc_in<int> a, b; // ports
sc_out<int> sum;
void do_add() // process
{
sum = a + b;
}
SC_CTOR(adder) // constructor
{
SC_METHOD(do_add); // register do_add to kernel
sensitive << a << b; // sensitivity list of do_add
}
};
Bibliografia
- T. Grötker, S. Liao, G. Martin, S. Swan, System Design with SystemC. Springer, 2002. ISBN 1402070721
- A SystemC based Linux Live CD with C++/SystemC tutorial
- J. Bhasker, A SystemC Primer, Second Edition, Star Galaxy Publishing, 2004. ISBN 0965039129
- D. C. Black, J. Donovan, SystemC: From the Ground Up, Springer 2005. ISBN 0387292403
- Frank Ghenassia (Editor), Transaction-Level Modeling with Systemc: Tlm Concepts and Applications for Embedded Systems, Springer 2006. ISBN 0387262326