Articulo de referencia

Sistema C

SystemC es un conjunto de clases y macros de C++ que proporcionan una interfaz de simulación orientada a eventos (véase también simulación de eventos discretos ). Estas herramie...

SystemC es un conjunto de clases y macros de C++ que proporcionan una interfaz de simulación orientada a eventos (véase también simulación de eventos discretos ). Estas herramientas permiten al diseñador simular procesos concurrentes , cada uno descrito mediante sintaxis C++ estándar . Los procesos de SystemC pueden comunicarse en un entorno simulado en tiempo real, utilizando señales de todos los tipos de datos que ofrece C++, algunos adicionales proporcionados por la biblioteca SystemC, así como señales definidas por el usuario. En ciertos aspectos, SystemC imita deliberadamente los lenguajes de descripción de hardware VHDL y Verilog , pero se describe con mayor precisión como un lenguaje de modelado a nivel de sistema .

SystemC se aplica al modelado a nivel de sistema , la exploración arquitectónica, el modelado de rendimiento, el desarrollo de software , la verificación funcional y la síntesis de alto nivel . SystemC se asocia frecuentemente con el diseño de sistemas electrónicos (ESL) y con el modelado a nivel de transacción (TLM).

Especificación del lenguaje

SystemC es definido y promovido por la Open SystemC Initiative (OSCI, ahora Accellera ) y ha sido aprobado por la IEEE Standards Association como IEEE 1666-2011 [ 1 ] , el Manual de Referencia del Lenguaje SystemC (LRM). El LRM proporciona la declaración definitiva de la semántica de SystemC. OSCI también proporciona un simulador de prueba de concepto de código abierto (a veces denominado incorrectamente simulador de referencia), que se puede descargar desde el sitio web de OSCI. [ 2 ] Si bien la intención de OSCI era que los proveedores comerciales y la academia pudieran crear software original compatible con IEEE 1666, en la práctica la mayoría de las implementaciones de SystemC se han basado, al menos parcialmente, en el simulador de prueba de concepto de OSCI.

En comparación con las HDL

SystemC presenta similitudes semánticas con VHDL y Verilog , pero se podría decir que tiene una sobrecarga sintáctica en comparación con estos cuando se utiliza como lenguaje de descripción de hardware . Por otro lado, ofrece un mayor rango de expresión, similar a la partición del diseño orientado a objetos y las clases plantilla. Aunque estrictamente es una biblioteca de clases de C++, SystemC a veces se considera un lenguaje independiente. El código fuente se puede compilar con la biblioteca SystemC (que incluye un núcleo de simulación) para obtener un ejecutable. El rendimiento de la implementación de código abierto OSCI suele ser inferior al de los simuladores comerciales VHDL/Verilog cuando se utiliza para la simulación a nivel de transferencia de registros .

Versiones

La versión 1 de SystemC incluía características comunes de los lenguajes de descripción de hardware , como jerarquía estructural y conectividad, precisión del ciclo de reloj, ciclos delta, lógica de cuatro valores (0, 1, X, Z) y funciones de resolución de bus.

A partir de la versión 2 de SystemC, la atención se centró en la abstracción de la comunicación, el modelado a nivel de transacción y el modelado de plataformas virtuales. También se añadieron puertos abstractos, procesos dinámicos y notificaciones de eventos temporizadas.

Características del idioma

Módulos

SystemC tiene el concepto de una clase contenedora llamada módulo. Se trata de una entidad jerárquica que puede contener otros módulos o procesos.

Los módulos son los componentes básicos de la jerarquía de diseño de SystemC. Un modelo de SystemC suele constar de varios módulos que se comunican a través de puertos. Los módulos pueden considerarse como los componentes fundamentales de SystemC.

Puertos

Los puertos permiten la comunicación desde el interior de un módulo hacia el exterior (normalmente hacia otros módulos) a través de canales.

Señales

SystemC admite señales resueltas y no resueltas. Las señales resueltas pueden tener más de un controlador (un bus), mientras que las señales no resueltas solo pueden tener un controlador.

Exportaciones

Los módulos tienen puertos a través de los cuales se conectan con otros módulos. SystemC admite puertos unidireccionales y bidireccionales.

Las exportaciones incorporan canales y permiten la comunicación desde el interior de un módulo hacia el exterior (normalmente hacia otros módulos).

Procesos

Los procesos se utilizan para describir la funcionalidad. Los procesos se encuentran dentro de módulos. SystemC proporciona tres abstracciones de procesos diferentes para que las utilicen los diseñadores de hardware y software. Los procesos son los elementos de computación principales. Son concurrentes.

Canales

Los canales son los elementos de comunicación de SystemC. Pueden ser simples cables o mecanismos de comunicación complejos como FIFOs o canales de bus .

Canales elementales:

  • señal: el equivalente a un cable
  • buffer
  • fifo
  • mutex
  • semáforo

Interfaces

Los puertos utilizan interfaces para comunicarse con los canales.

Eventos

Los eventos permiten la sincronización entre procesos y deben definirse durante la inicialización.

Tipos de datos

SystemC introduce varios tipos de datos que permiten modelar el hardware.

Tipos estándar extendidos:

  • sc_int<n>entero con signo de n bits
  • sc_uint<n>entero sin signo de n bits
  • sc_bigint<n>Entero con signo de n bits para n > 64
  • sc_biguint<n>Entero sin signo de n bits para n > 64

Tipos lógicos:

  • sc_bit bit único de dos valores
  • sc_logic bit único de 4 valores
  • sc_bv<n> vector de longitud n de sc_bit
  • sc_lv<n> vector de longitud n de sc_logic

Tipos de punto fijo:

  • sc_fixed<> punto fijo firmado con plantilla
  • sc_ufixed<> punto fijo sin signo con plantilla
  • sc_fix punto fijo con signo sin plantilla
  • sc_ufix punto fijo sin signo sin plantilla

Historia

  • 27 de septiembre de 1999: Anuncio de la iniciativa Open SystemC
  • 1 de marzo de 2000: Lanzamiento de SystemC V0.91
  • 28/03/2000 Lanzamiento de SystemC V1.0
  • 1 de febrero de 2001: Se publican las especificaciones de SystemC V2.0 y el código fuente de la versión beta V1.2.
  • 3 de junio de 2003: Se publica el manual de referencia de lenguaje (LRM) de SystemC 2.0.1.
  • 6 de junio de 2005: Se publica el estándar de modelado a nivel de transacción SystemC 2.1 LRM y TLM 1.0.
  • 12/12/2005 IEEE aprueba el estándar IEEE 1666 2005 para SystemC.
  • Lanzamiento de SystemC v2.2 el 13 de abril de 2007
  • 09/06/2008 Se publica la biblioteca TLM-2.0.0
  • 27/07/2009 Se publicó el LRM TLM-2.0, acompañado de la biblioteca TLM-2.0.1.
  • 8 de marzo de 2010: Lanzamiento de la versión 1.0 del LRM para las extensiones SystemC AMS de SystemC
  • 2011-11-10 IEEE aprueba el estándar IEEE 1666 2011 para SystemC [ 3 ]
  • 6 de abril de 2016: IEEE aprueba el estándar IEEE 1666.1 2016 para SystemC AMS.
  • 5 de junio de 2023: IEEE aprueba la norma IEEE 1666 – 2023.

SystemC remonta sus orígenes al trabajo sobre el lenguaje de programación Scenic descrito en un artículo de DAC de 1997. [ 4 ]

ARM Ltd., CoWare , Synopsys y CynApps se unieron para desarrollar SystemC (CynApps más tarde se convirtió en Forte Design Systems ) para lanzar su primera versión preliminar en 1999. [ 5 ] [ 6 ] El principal competidor en ese momento era SpecC, otro paquete de código abierto basado en C desarrollado por personal de UC Irvine y algunas empresas japonesas.

En junio de 2000, se formó un grupo de estandarización conocido como Open SystemC Initiative para proporcionar una organización neutral en la industria que albergara las actividades de SystemC y para permitir que los mayores competidores de Synopsys, Cadence y Mentor Graphics, tuvieran una representación democrática en el desarrollo de SystemC.

Código de ejemplo

Código de ejemplo de un sumador :

#incluir "systemc.h"SC_MODULE ( sumador ) // declaración del módulo (clase) { sc_in < int > a , b ; // puertos sc_out < int > sum ;void do_add ( ) // proceso { suma.write ( a.read ( ) + b.read ( ) ) ; // o simplemente suma = a + b }SC_CTOR ( adder ) // constructor { SC_METHOD ( do_add ); // registra do_add en el kernel sensitive << a << b ; // lista de sensibilidad de do_add } };

Estimación de potencia y energía en SystemC

La estimación de potencia y energía se puede realizar en SystemC mediante simulaciones. Powersim [ 7 ] es una biblioteca de clases de SystemC destinada al cálculo del consumo de potencia y energía del hardware descrito a nivel de sistema. Para ello, se monitorizan los operadores de C++ y se pueden utilizar diferentes modelos de energía para cada tipo de dato de SystemC. Las simulaciones con Powersim no requieren ningún cambio en el código fuente de la aplicación.

Véase también

Notas

  1. "Explorar estándares" . IEEE . Archivado del original el 21 de diciembre de 2007.
  2. www.systemc.org, sitio web de la Open SystemC Initiative. Archivado el 6 de octubre de 2008 en la Wayback Machine.
  3. (10 de noviembre de 2011) IEEE aprueba la revisión del estándar IEEE 1666™ “SystemC Language” para el diseño de sistemas electrónicos, añadiendo soporte para el modelado a nivel de transacción.
  4. Liao, Stan; Tjiang, Steve; Gupta, Rajesh (1997). "ScenicDAC1997" . pp. 70–75 . CiteSeerX 10.1.1.56.6483 .  
  5. Synopsys y Co-Ware Inc., que realizaron gran parte del trabajo detrás del SystemC -- https://www.electronicsweekly.com/Articles/1999/12/07/13906/stm-synopsys-in-3-year-rampd-deal.htm
  6. " ARM se complace de que Synopsys , CoWare y otras compañías se hayan unido en SystemC, porque si la industria lo adopta, simplifica nuestro mundo", dijo Tudor Brown , director de tecnología de ARM Ltd. "En Babel de lenguajes que compiten por un papel en SoC - http://www.eetimes.com/ip99/ip99story1.html
  7. Descarga de Powersim | SourceForge.net

Referencias

  • 1666-2005 — Manual de referencia del lenguaje C del sistema estándar IEEE . 2006. doi : 10.1109/IEEESTD.2006.99475 . ISBN 0-7381-4871-7.
  • Manual de referencia del estándar IEEE para el lenguaje SystemC . 2012. doi : 10.1109/IEEESTD.2012.6134619 . ISBN 978-0-7381-6801-2.
  • T. Grötker, S. Liao, G. Martin, S. Swan, Diseño de sistemas con SystemC . Springer, 2002. ISBN 1-4020-7072-1
  • Un Live CD de Linux basado en SystemC con tutorial de C++/SystemC
  • J. Bhasker, Introducción al Sistema C , Segunda edición, Star Galaxy Publishing, 2004. ISBN 0-9650391-2-9
  • DC Black, J. Donovan, SystemC: From the Ground Up , 2.ª ed., Springer 2009. ISBN 0-387-69957-0
  • George Frazier, SystemC: Construcciones orientadas al hardware en C++
  • Frank Ghenassia (Editor), Modelado a nivel de transacción con SystemC: conceptos y aplicaciones de TLM para sistemas embebidos , Springer 2006. ISBN 0-387-26232-6
  • Stan Y. Liao, Steven WK Tjiang, Rajesh K. Gupta: Una implementación eficiente de la reactividad para el modelado de hardware en el entorno de diseño escénico. DAC 1997: 70-75
  • Sitio web oficial
  • Tutorial de SystemC
  • ESCUG - Grupo Europeo de Usuarios de SystemC
  • NASCUG - Grupo de Usuarios de SystemC de Norteamérica
  • LASCUG - Grupo Latinoamericano de Usuarios de SystemC
  • ISCUG - Grupo de Usuarios de SystemC de la India
  • EDA Playground : Entorno de desarrollo integrado (IDE) gratuito para C++/SystemC basado en navegador web.
Obtenido de " https://en.wikipedia.org/w/index.php?title=SystemC&oldid=1331155594 "