SystemC es un conjunto de clases y macros de C ++ que proporcionan una interfaz de simulación dirigida por eventos (ver también simulación de eventos discretos ). Estas funciones permiten a un diseñador simular procesos concurrentes , cada uno de los cuales se describe utilizando una sintaxis simple de C ++ . Los procesos de SystemC pueden comunicarse en un entorno simulado en tiempo real, utilizando señales de todos los tipos de datos ofrecidos por C ++, algunos adicionales ofrecidos por la biblioteca SystemC, así como definidos por el usuario. En ciertos aspectos, SystemC imita deliberadamente los lenguajes de descripción de hardware VHDL y Verilog , pero se describe más acertadamente como un lenguaje de modelado a nivel de sistema .
SystemC se aplica al modelado a nivel de sistema , exploración arquitectónica, modelado de rendimiento, desarrollo de software , verificación funcional y síntesis de alto nivel . SystemC a menudo se asocia con el diseño de nivel de sistema electrónico (ESL) y con el modelado de nivel de transacción (TLM).
Especificación de idioma
SystemC está definido y promovido por Open SystemC Initiative (OSCI - ahora Accellera ), y ha sido aprobado por la IEEE Standards Association como IEEE 1666-2011 [1] - el SystemC Language Reference Manual (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 del sitio web de OSCI. [2] Aunque OSCI tenía la intención de que los proveedores comerciales y el mundo académico 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 en parte, en el simulador de prueba de concepto de OSCI.
SystemC tiene similitudes semánticas con VHDL y Verilog , pero se puede decir que tiene una sobrecarga sintáctica en comparación con estos cuando se usa como lenguaje de descripción de hardware . Por otro lado, ofrece un mayor rango de expresión, similar al particionamiento de diseño orientado a objetos y clases de plantilla. Aunque es estrictamente una biblioteca de clases C ++, SystemC a veces se considera un lenguaje por derecho propio. El código fuente se puede compilar con la biblioteca SystemC (que incluye un kernel de simulación) para proporcionar un ejecutable. El rendimiento de la implementación de código abierto OSCI suele ser menos óptimo que los simuladores comerciales VHDL / Verilog cuando se utilizan para la simulación del nivel de transferencia de registros .
La versión 1 de SystemC incluía características comunes de lenguaje de descripción de hardware como jerarquía estructural y conectividad, precisión de ciclo de reloj, ciclos delta, lógica de cuatro valores (0, 1, X, Z) y funciones de resolución de bus. Desde la versión 2 en adelante, el enfoque de SystemC se ha trasladado a la abstracción de la comunicación, el modelado a nivel de transacción y el modelado de plataforma virtual. La versión 2 de SystemC agregó puertos abstractos, procesos dinámicos y notificaciones de eventos cronometradas.
Características del idioma
Módulos
SystemC tiene la noción de una clase de contenedor llamada módulo. Esta es una entidad jerárquica que puede contener otros módulos o procesos.
Los módulos son los bloques de construcción básicos de una jerarquía de diseño de SystemC. Un modelo SystemC generalmente consta de varios módulos que se comunican a través de puertos. Los módulos se pueden considerar como un componente básico de SystemC.
Puertos
Los puertos permiten la comunicación desde el interior de un módulo hacia el exterior (normalmente a 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 conductor (un autobús) mientras que las señales no resueltas pueden tener solo un conductor.
Exportaciones
Los módulos tienen puertos a través de los cuales se conectan a otros módulos. SystemC admite puertos bidireccionales y unidireccionales.
Las exportaciones incorporan canales y permiten la comunicación desde el interior de un módulo hacia el exterior (normalmente a otros módulos).
Procesos
Los procesos se utilizan para describir la funcionalidad. Los procesos están contenidos dentro de módulos. SystemC proporciona tres abstracciones de procesos diferentes [ ¿cuál? ] para ser utilizado por diseñadores de hardware y software. Los procesos son los principales elementos de cálculo. Son concurrentes.
Canales
Los canales son los elementos de comunicación de SystemC. Pueden ser cables simples o mecanismos de comunicación complejos como FIFO o canales de bus .
Canales elementales:
- señal: el equivalente a un cable
- buffer
- quince
- 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 presenta varios tipos de datos que admiten el modelado de 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 > n bits entero con signo para n > 64
- sc_biguint < n > n bits entero sin signo para n > 64
Tipos de lógica:
- sc_bit bit único de 2 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 puntos fijos:
- sc_fixed <> punto fijo firmado con plantilla
- sc_ufixed <> punto fijo sin firmar con plantilla
- punto fijo firmado sin plantilla sc_fix
- sc_ufix punto fijo sin plantilla sin firmar
Historia
- 1999-09-27 Anunciada la Iniciativa Open SystemC
- 2000-03-01 Lanzamiento de SystemC V0.91
- 2000-03-28 Lanzamiento de SystemC V1.0
- 2001-02-01 Se publica la especificación SystemC V2.0 y el código fuente V1.2 Beta
- 2003-06-03 Lanzamiento de SystemC 2.0.1 LRM (manual de referencia de idiomas)
- 2005-06-06 Lanzamiento del estándar de modelado a nivel de transacción SystemC 2.1 LRM y TLM 1.0
- 2005-12-12 IEEE aprueba el estándar IEEE 1666–2005 para SystemC
- 2007-04-13 Lanzamiento de SystemC v2.2
- 2008-06-09 Lanzamiento de la biblioteca TLM-2.0.0
- 2009-07-27 Lanzamiento de TLM-2.0 LRM, acompañado de la biblioteca TLM-2.0.1
- 2010-03-08 Extensiones de SystemC AMS 1.0 LRM lanzadas
- 2011-11-10 IEEE aprueba el estándar IEEE 1666-2011 para SystemC [3]
- 2016-04-06 IEEE aprueba el estándar IEEE 1666.1–2016 para SystemC AMS
SystemC tiene sus orígenes en el trabajo en 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 luego se convirtió en Forte Design Systems ) para lanzar su primer borrador en 1999. [5] [6] El principal competidor en ese momento era SpecC, otro código abierto basado en C paquete desarrollado por personal de UC Irvine y algunas empresas japonesas.
En junio de 2000, se formó un grupo de estándares conocido como Open SystemC Initiative para proporcionar una organización neutral en la industria para albergar las actividades de SystemC y permitir a los competidores más grandes de Synopsys, Cadence y Mentor Graphics, representación democrática en el desarrollo de SystemC.
Código de ejemplo
Código de ejemplo de un sumador :
#include "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 . escribir ( a . leer () + b . leer ()); // o simplemente suma = a + b } SC_CTOR ( sumador ) // constructor { SC_METHOD ( do_add ); // registra do_add en el kernel sensible << a << b ; // lista de sensibilidad de do_add } };
Estimación de potencia / energía en SystemC
La estimación de Potencia / Energía se puede realizar en SystemC mediante simulaciones. Powersim [7] es una biblioteca de clases SystemC destinada al cálculo de la potencia y el consumo de energía del hardware descrito a nivel de sistema. Con este fin, los operadores de C ++ son monitoreados y se pueden usar diferentes modelos de energía para cada tipo de datos de SystemC. Las simulaciones con Powersim no requieren ningún cambio en el código fuente de la aplicación.
Ver también
Notas
- ^ "Explorar estándares" . Standards.ieee.org .
- ^ www.systemc.org, el sitio web de Open SystemC Initiative Archivado 2008-10-06 en Wayback Machine
- ^ IEEE aprueba el estándar revisado IEEE 1666 ™ “SystemC Language” para el diseño de nivel de sistema electrónico, agregando soporte para modelado a nivel de transacción - http://www.businesswire.com/news/home/20111109006054/en/IEEE-Approves- Revisado-IEEE-1666% E2% 84% A2-% E2% 80% 9C Sistema C-Lenguaje% E2% 80% 9D
- ^ "ScenicDAC1997". CiteSeerX 10.1.1.56.6483 . Cite journal requiere
|journal=
( ayuda ) - ^ Synopsys y Co-Ware Inc., que hicieron gran parte del trabajo detrás de SystemC - http://www.electronicsweekly.com/Articles/1999/12/07/13906/stm-synopsys-in-3-year- rampd-deal.htm
- ^ " 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 idiomas que compiten para rol en SoC - http://www.eetimes.com/ip99/ip99story1.html
- ^ http://sourceforge.net/projects/powersim/
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.
- 1666-2011 - Manual de referencia del estándar IEEE para el lenguaje estándar 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, A SystemC Primer , segunda edición, Star Galaxy Publishing, 2004. ISBN 0-9650391-2-9
- DC Black, J. Donovan, SystemC: From the Ground Up , 2a ed., Springer 2009. ISBN 0-387-69957-0
- George Frazier, SystemC: construcciones orientadas a hardware en C ++
- Frank Ghenassia (Editor), Modelado a nivel de transacción con SystemC: Conceptos y aplicaciones de TLM para sistemas integrados , Springer 2006. ISBN 0-387-26232-6
- Stan Y. Liao, Steven WK Tjiang, Rajesh K. Gupta: una implementación eficiente de la reactividad para modelar hardware en el entorno de diseño escénico. DAC 1997: 70-75
enlaces externos
- Página web oficial
- Tutorial de SystemC
- ESCUG - Grupo de usuarios europeo de SystemC
- NASCUG - Grupo de usuarios de SystemC de América del Norte
- LASCUG - Grupo Latinoamericano de Usuarios de SystemC
- ISCUG - Grupo de usuarios de SystemC indio
- EDA Playground : C ++ / SystemC IDE gratuito basado en navegador web