SystemC

Versione del 9 ago 2007 alle 18:09 di Nikbot (discussione | contributi) (Bot: Aggiungo avviso controlcopy)

Template:RevertBot

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

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

Collegamenti esterni