SystemC
From Wikipedia, the free encyclopedia
SystemC est un ensemble de classes C++, pour la conception, la modélisation, la simulation et la vérification de circuits logiques numériques. Il apporte des constructions et interfaces pour interagir avec un moteur de simulation évènementielle de façon similaire à un langage de description de matériel (HDL) tout en permettant des modélisations de systèmes intégrant les parties matérielles et logicielles.
| Dernière version | 3.0.2 ()[1] |
|---|---|
| Dépôt | github.com/accellera-official/systemc |
| Écrit en | C++ |
| Licence | Licence Apache 2.0 |
| Site web | systemc.org |
Un ensemble de macros permet d'avoir une syntaxe familière pour un développeur connaissant d'autres langages HDL (VHDL ou Verilog par exemple).
Standardisé et ratifié par la Open SystemC Initiative (OSCI) puis Accellera (en) Systems Initiative sous la norme IEEE Std. 1666-2011[2].
Description
SystemC permet de modéliser la partie matérielle d'un système numériques, comme un langage de description de matériel (HDL), tel que VHDL ou Verilog. Mais, comme n'étant qu'une surcouche au dessus de C++, les modélisation peuvent être de plus haut niveau, en intégrant des composantes logicielles ou en utilisant des abstractions de niveau plus élevé (transaction, threads par exemple).
Ce n'est pas un langage à part entière mais un ensemble de classes C++ qui introduisent les concepts nécessaires à la modélisation du matériel (par exemple la notion de processus concurrents). Conservant les fonctionnalités du C++, il reste possible de décrire des fonctions purement logicielles. SystemC permet donc de modéliser des systèmes matériels, logiciels, mixtes ou même non encore partitionnés. Il est donc particulièrement approprié à la conception de systèmes de type SoC[2].
SystemC intègre également la possibilité de simuler le modèle conçu, puis, par raffinements successifs, d'aboutir à une représentation implémentable.
SystemC a été développé en commun par plusieurs entreprises (voir la section historique). À cette fin, l'OSCI (Open SystemC Initiative) a été créé, chargé de diffuser, promouvoir et rédiger les spécifications de SystemC. En , SystemC est standardisé auprès de l'IEEE sous le nom de IEEE 1666-2005.
En 2011, une évolution majeure de SystemC est publiée avec la version 2.3 de la bibliothèque correspondant au standard IEEE 1666-2011. Depuis, le développement et la diffusion du standard sont contrôlés par Accellera (en)[3].
En plus du standard, Accellera distribue une implémentation de référence qui contient en plus des classes définies dans le standard, un moteur de simulation. D'autres implémentations existent liées à des outils de simulation propriétaires (par exemple les outils commerciaux de Cadence Design Systems, Mentor Graphics/Siemens EDA et Synopsys).
Exemples
- Exemple de logique combinatoire:
#include "systemc.h"
SC_MODULE(and3)
{
sc_in<bool> e1;
sc_in<bool> e2;
sc_in<bool> e3;
sc_out<bool> s;
void compute_and()
{
s = e1 & e2 & e3;
};
SC_CTOR(and3)
{
SC_METHOD(compute_and);
sensitive << e1;
sensitive << e2;
sensitive << e3;
}
}
- Exemple de logique séquentielle:
#include "systemc.h"
SC_MODULE(counter)
{
sc_in<bool> clk;
sc_in<bool> nrst;
sc_out<sc_uint<8> > q;
void count()
{
if(nrst == false)
q = 0;
else
q = q + 1;
};
SC_CTOR(counter)
{
SC_METHOD(count);
sensitive << clk.pos();
}
}
SystemC pour la synthèse
Il existe une proposition pour définir un sous-ensemble synthètisable de SystemC.
Cette proposition est à l'état de brouillon (draft) et est disponible chez Accellera en version 1.4
ICSC est un outil libre basé sur LLVM qui permet de transformer du code SystemC utilisant le sous-ensemble synthétisable en SystemVerilog. Le code généré peut par la suite être utilisé avec les outils de synthèse standard pour des cibles ASIC ou FPGA.
Historique
Ci-dessous, les différentes versions de SystemC[4] :
- Version 0.9 par Synopsys en 1999[5],[6]
- Version 1.0 par Frontier Design
- Version 1.1 par CoWare en 2001
- Création de L'OSCI (Open SystemC Initiative) en 2001
- Version 2.0 par L'OSCI
- Standardisation par l'IEEE IEEE1666-2005 en 2005.
- Version 2.2 conforme au standard IEEE en 2007[3]
- Version 2.3 avec révision du standard IEEE1666-2011 en 2011, avec notamment l'inclusion de TLM 2 au standard.
- Version 3.3.0 et la révision du standard IEEE1666-2023 fin 2023.
En une alliance entre Accellera et l'OSCI est annoncée[7],[8].
En , Accellera annonce que la bibliothèque est dorénavant distribuée sous les termes de la licence Apache 2.0[9]. À cette occasion la version 2.3.1 est distribuée.
- La version de SystemC s'appuie sur C++17 pour moderniser la base de code, simplifier la syntaxe de certaines constructions et met à jour l'API pour interagir avec le moteur de simulation[10].
Depuis [11], Accellera propose un dépôt Git officiel public (hébergé sur GitHub[12]) pour accéder au code source de la bibliothèque ainsi qu'aux versions en cours de développement.