SystemC: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
mNessun oggetto della modifica
Recupero di 1 fonte/i e segnalazione di 0 link interrotto/i.) #IABot (v2.0.9.5
 
(30 versioni intermedie di 25 utenti non mostrate)
Riga 1:
'''SystemC''' è un tipo di [[linguaggio di descrizione hardware]], simile al [[VHDL]] o al [[Verilog]], utilizzato nella descrizione dei [[Sistema|sistemi]], poiché mostra la sua potenza di funzionamento con [[Modello (scienza)|modelli]] a livello transazionale e comportamentali, nei quali il grado di dettaglio dell'andamento nel tempo dei segnali di uscita viene tralasciato in favore di una più concisa rappresentazione della descrizione della funzione richiesta.
{{T|lingua=inglese|argomento=informatica|data=luglio 2007}}
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.
 
== Storia ==
Il SystemC è un set di [[Libreria software|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.
* [[27 settembre]] [[1999]]: annunciata ''Open SystemC Initiative''
* [[1º marzo]] [[2000]]: rilasciatadistribuito SystemC v0.91
* [[28 marzo]] [[2000]]: rilasciatadistribuito SystemC v1.0
* [[1º febbraio]] [[2001]]: rilasciatedistribuite specifiche del SystemC v2.0 ed il [[codice sorgente]] della v1.2 Beta
* [[3 giugno]] [[2003]]: rilasciatodistribuito SystemC 2.0.1 LRM (''language reference manual'')
* [[6 giugno]] [[2005]]: rilasciatodistribuito SystemC 2.1 LRM and TLM 1.0 (''transaction-level modeling'')
* [[12 dicembre]] [[2005]]: [[Institute of Electrical and Electronics Engineers|IEEE]] approva lo [[norma tecnica|standard]] IEEE 1666-2005 per il SystemC
* [[13 aprile]] [[2007]]: distribuito SystemC v2.2 released
 
ARM Ltd., CoWare, Synopsys e CynApps unirono le forze per sviluppare SystemC (successivamente CynApps divenne Forte Design Systems), pubblicando la prima bozza nel 1999. Il concorrente principale all'epoca era SpecC, un altro pacchetto ''[[open source]]'' basato sul C++, sviluppato da membri dell'[[Università della California, Irvine|Università di Irvine]], [[California]], e da alcune compagnie giapponesi.
<!--
 
The behaviours (processes) defined may be instantiated any number of times, and provisions are made for processes defined by hierarchies of other processes, as one would expect.
A giugno del 2000 venne formato un gruppo di standardizzazione denominato ''[[Open SystemC Initiative]]'' con il compito di organizzare le attività e permettere ai concorrenti di [[Synopsys]], Cadence e [[Mentor Graphics]], di avere voce nello sviluppo.
 
A luglio 2004 Synopsys terminò il proprio coinvolgimento in SystemC.
 
== Descrizione ==
 
Il SystemC è un setinsieme di [[Libreria software|librerie]] e [[Macro (informatica)|macro]] scritte 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 ambientecontesto simulato ''[[sistema real-time]]'' attraversousando segnali di tutti i tipi di segnaledato cheofferti offre ildal C++, edinsieme ad altri offerti dalle librerie SystemC, oltre a quelli definiti dal programmatoredall'utilizzatore.
 
The language thus offered has semantical similarities to [[VHDL]] and [[Verilog]], but may be said to have a syntactical overhead compared to these. On the other hand, greater freedom of expressiveness is offered in return, like [[Object-oriented programming | object oriented design partitioning]], template classes and [[dynamic memory allocation]]. Which is more: SystemC is ''both'' a description language ''and'' a simulation kernel. The code written will compile together with the library's simulation kernel to give an executable that behaves like the described model when it is run. The performance of this simulation kernel is not to be compared with that of commercial VHDL/Verilog simulators at the present.
-->
== 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]]: [[Institute of Electrical and Electronics Engineers|IEEE]] approva lo [[standard]] IEEE 1666-2005 per il SystemC
* [[13 aprile]] [[2007]]: SystemC v2.2 released
<!--
The behaviours (processes) defined may be instantiated any number of times, and provisions are made for processes defined by hierarchies of other processes, as one would expect.
SystemC was originally developed by Synopsys, Inc., an Electronic Design Automation (EDA) company, to act as the modeling foundation for forthcoming system simulation and synthesis tools. A number of Synopsys' end-users suggested that the only way a modeling environment like SystemC would be adopted broadly, would be as an open source project. Synopsys teamed with a number of large electronics companies, ARM Ltd. and CoWare to launch SystemC in 1999. The chief competitor at the time was another C++ based open source package offered by a small startup called CynApps which later became Forte Design Automation. In June 2000, a standards group know as the Open SystemC Initiative was formed to provide an industry neutral organization to host SystemC activities and to allow Synopsys' largest competitors, Cadence and Mentor Graphics, democratic representation in SystemC development.
-->
Il linguaggio offre una [[semantica]] simile a quella di [[VHDL]] e [[Verilog]], ma al costo di un aggravamento sintattico rispetto a questi. D'altro canto, permette un maggiore libertà espressiva, come [[programmazione orientata agli oggetti]] e [[Classe (informatica)|classi]] [[template]]. Più in generale, SystemC è sia un linguaggio di descrizione sia un sistema di simulazione che permette di generare un eseguibile che si comporta come il modello descritto al momento dell'esecuzione. Le prestazioni del sistema di simulazione sono difficilmente paragonabili a quelle dei simulatori VHDL/Verilog commercializzati attualmente, specialmente per via delle differenze di ambito applicativo. Mentre Verilog e VHDL sono stati pensati, originariamente proposti e nel tempo sviluppati per la progettazione a ''livello di trasferimento tra registri'' ([[Register transfer level|RTL]]), il SystemC, nei suoi primi anni di vita, ha veicolato una forte spinta verso la progettazione a livelli di astrazione superiore, con produzione di strumenti per la Sintesi di Alto livello e successivi sviluppi del paradigma transazionale, nel quale la comunicazione tramite segnali digitali viene sostituita con un più generico passaggio di messaggi.
== Caratteristiche ==
 
Nei fatti, tuttavia, l'iniziale spinta innovativa non ha trovato riscontro nei risultati prodotti; il costo di mantenimento della coerenza della rappresentazione è rimasta in larga misura sulle spalle dell'utilizzatore, data la mancanza di strumenti di controllo semantico sufficientemente robusti, più di quanto non capiti con altri linguaggi di descrizione dell'hardware, e nel frattempo l'introduzione, nel 2005, del SystemVerilog, variante orientata agli oggetti del Verilog, ha di fatto pressoché annullato i vantaggi che la natura di libreria di classi C++ del SystemC aveva dato a questo inizialmente.
 
La parte che aveva destato più interesse nella fase di sviluppo vivace della modellazione transazionale, ovvero la formalizzazione dei concetti di connessione tramite port/export, canali, e socket, è stata riproposta in SystemVerilog, organizzata secondo i dettami della programmazione a [[Design pattern|pattern]], all'interno della libreria di classi [http://accellera.org/downloads/standards/uvm UVM], che attualmente rappresenta l'elemento di maggior successo nell'ambito della progettazione di ambienti e componenti di verifica per la progettazione di dispositivi digitali e ''mixed signal''.
 
== 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. I moduli possono essere pensati come i blocchi costruttivi del linguaggio.
 
=== Porte ===
Le porte permettono la comunicazione fra l'interno del modulo e l'esterno, di solito verso altri moduli.
 
=== Processi ===
I processi sono i componenti principali che realizzano l'elaborazione. Sono ad esecuzione concorrente.
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 caviconnessione o complessi sistemi di comunicazione complessi, come code [[FIFO]] o [[bus (informatica)|bus]]
 
Canali elementari:
Riga 49 ⟶ 57:
 
=== Tipi di dati ===
Il SystemC introduce alcunivari tipi di dati che supportano deila modellimodellazione dell'hardware.
 
Tipi standard estesi:
* sc_int<> 64-bit signedintero con integersegno
* sc_uint<> 64-bit unsignedintero senza integersegno
* sc_bigint<> intero a arbitraryprecisione precisionarbitraria signedcon integersegno
* sc_biguint<> intero arbitrarya precisionprecisione unsignedarbitraria integersenza segno
 
Tipi logici:
* sc_bit singolo bit a 2-valued single bitvalori
* sc_logic singolo bit a 4-valued single bitvalori
* sc_bv<> vettore vector ofdi sc_bit
* sc_lv<> vettore vector ofdi sc_logic
 
Tipi in virgola fissa:
Fixed point types:
* sc_fixed<> template in virgola templatedfissa signedcon fixed pointsegno
* sc_ufixed<> template in templatedvirgola unsignedfissa fixedsenza pointsegno
* sc_fix tipo in virgola fissa con untemplated signed fixed pointsegno
* sc_ufix tipo in virgola fissa senza untemplated unsigned fixed pointsegno
 
== Esempio ==
Esempio di codice per un sommatore:
<sourcesyntaxhighlight lang="cpp">
#include "systemc.h"
 
SC_MODULE(adder) // dichiarazione di // modulemodulo (classclasse) declaration
{
sc_in<int> a, b; // portsporte
sc_out<int> sum;
 
void do_add() // processprocesso
{
sum = a + b;
}
 
SC_CTOR(adder) // constructorcostruttore
{
SC_METHOD(do_add); // register do_add to kernel
Riga 90 ⟶ 98:
}
};
</syntaxhighlight>
</source>
 
== Bibliografia ==
* T. Grötker, S. Liao, G. Martin, S. Swan, ''System Design with SystemC''. Springer, 2002. ISBN 14020707211-4020-7072-1
* [{{cita web |1=http://sclive.blogsite.org/ |2=A SystemC based Linux Live CD with C++/SystemC tutorial] |accesso=16 luglio 2007 |urlarchivio=https://web.archive.org/web/20080820010200/http://sclive.blogsite.org/# |dataarchivio=20 agosto 2008 |urlmorto=sì }}
* J. Bhasker, ''A SystemC Primer'', Second Edition, Star Galaxy Publishing, 2004. ISBN 09650391290-9650391-2-9
* D. C. Black, J. Donovan, ''SystemC: From the Ground Up'', Springer 2005. ISBN 03872924030-387-29240-3
* Frank Ghenassia (Editor), ''Transaction-Level Modeling with Systemc: Tlm Concepts and Applications for Embedded Systems'', Springer 2006. ISBN 03872623260-387-26232-6
 
== Collegamenti esterni ==
* {{en}}cita [web|1=http://www.systemc.org/ |2=Open SystemC 2.x]|lingua=en|accesso=16 luglio 2007|urlarchivio=https://web.archive.org/web/20081006172519/http://systemc.org/#|dataarchivio=6 ottobre 2008|urlmorto=sì}}
* {{en}}cita [httpweb|https://sourceforge.net/projects/systemc/ |Open SystemC 1.0]|lingua=en}}
* {{en}}cita [httpweb|url=https://wwwgithub.deit.univpm.itcom/orcioni/systemc-wms |titolo=SystemC-WMS Homepage]|lingua=en||}}
* {{en}}cita [web|1=http://standards.ieee.org/getieee/1666/ |2=IEEE 1666 Standard System C Language Reference Manual]|lingua=en|accesso=16 luglio 2007|dataarchivio=2 novembre 2010|urlarchivio=https://web.archive.org/web/20101102230506/http://standards.ieee.org/getieee/1666/|urlmorto=sì}}
{{Norme IEEE}}
{{Logica programmabile}}
{{portale|elettronica|informatica}}
 
[[Categoria:Librerie software]]
[[Categoria:Linguaggi di descrizione hardware]]
 
[[de:SystemC]]
[[en:SystemC]]
[[es:SystemC]]
[[fr:SystemC]]
[[ja:SystemC]]
[[pl:SystemC]]
[[zh:SystemC]]