stringtranslate.com

SistemaC

SystemC es un conjunto de clases y macros de C++ que proporcionan una interfaz de simulación basada en eventos (consulte también simulación de eventos discretos ). Estas funciones permiten al diseñador simular procesos concurrentes , cada uno de los cuales se describe utilizando 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 que ofrece C++, algunos adicionales que ofrece 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 a nivel de sistema electrónico (ESL) y con el modelado a nivel de transacción (TLM).

Especificación de idioma

SystemC está 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] Aunque la intención de OSCI era 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.

En comparación con las HDL

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 una mayor gama de expresión, similar a la partición de diseño orientada a objetos y las 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 núcleo de simulación) para obtener un ejecutable. El rendimiento de la implementación de código abierto OSCI suele ser peor que el de los simuladores comerciales VHDL/Verilog cuando se utilizan para la simulación del nivel de transferencia de registros . [ cita necesaria ]

Versiones

La versión 1 de SystemC incluía características comunes del lenguaje 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.

La versión 2 de SystemC en adelante se centró en la abstracción de la comunicación, el modelado a nivel de transacciones y el modelado de plataformas virtuales. También agregó puertos abstractos, procesos dinámicos y notificaciones de eventos cronometrados.

Características del idioma

Módulos

SystemC tiene una noción de una clase contenedora llamada módulo. Esta es una entidad jerárquica que puede tener otros módulos o procesos contenidos en ella.

Los módulos son los componentes básicos de una jerarquía de diseño de SystemC. Un modelo SystemC suele estar formado por varios módulos que se comunican mediante puertos. Los módulos pueden considerarse 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 unidireccionales y bidireccionales.

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 los módulos. SystemC proporciona tres abstracciones de procesos diferentes [ ¿cuáles? ] 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:

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 admiten el modelado de hardware.

Tipos estándar extendidos:

Tipos de lógica:

Tipos de punto fijo:

Historia

SystemC tiene sus orígenes 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 primera versión preliminar 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 mayores competidores de Synopsys, Cadence y Mentor Graphics, una representación democrática en el desarrollo de SystemC.

Código de ejemplo

Código de ejemplo de un sumador :

#incluir "sistemac.h" SC_MODULE ( sumador ) // declaración de módulo (clase ) { sc_in <int> a , b ; // puertos sc_out <int> suma ; _        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 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 clase SystemC destinada al cálculo del consumo de energía y potencia 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 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

  1. ^ "Estándares de exploración". estándares.ieee.org .
  2. ^ www.systemc.org, el sitio web de la Iniciativa Open SystemC Archivado el 6 de octubre de 2008 en Wayback Machine.
  3. ^ (10 de noviembre de 2011) IEEE aprueba el estándar revisado IEEE 1666 ™ "SystemC Language" para el diseño electrónico a nivel de sistema, agregando soporte para el modelado a nivel de transacción
  4. ^ Liao, Stan; Tjiang, Steve; Gupta, Rajesh (1997). "EscénicoDAC1997". págs. 70–75. CiteSeerX 10.1.1.56.6483 . 
  5. ^ 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
  6. ^ " A ARM le complace que Synopsys , CoWare y otras empresas 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 sobre los idiomas que compiten". para función en SoC: http://www.eetimes.com/ip99/ip99story1.html
  7. ^ Descarga de Powersim | FuenteForge.net

Referencias

enlaces externos