SystemC

De Wikipedia, la enciclopedia libre

SystemC es frecuentemente descrito como un lenguaje de descripción de hardware como son VHDL y Verilog, pero es más adecuado describirlo como un lenguaje de descripción de sistemas, puesto que es realmente útil cuando se usa para modelar sistemas a nivel de comportamiento.

Descripción[editar]

SystemC es un conjunto de bibliotecas y macros implementadas en C++ que hacen posible una simulación de procesos concurrentes con la sintaxis del lenguaje C++ ordinario. Así los objetos descritos pueden comunicarse durante una simulación de tiempo real usando señales de cualquier tipo ofrecido por C++, además algunas otras ofrecidas por las librerías de SystemC y también otras definidas por el usuario.

La metodología de diseño es comenzar con un modelo de alto nivel escrito en C++ y aplicar un proceso iterativo consistente en transformar el código para usar sólo los elementos que tengan su equivalente en un lenguaje de descripción de hardware.

Lenguaje[editar]

Módulos[editar]

Los módulos (module) son los bloques básicos en el diseño de una jerarquía en SystemC. Un modelo SystemC consta habitualmente de varios módulos que se comunican a través de los puertos.

Puertos[editar]

Los puertos (port) permiten la comunicación de un módulo con el exterior, normalmente con otros módulos.

Procesos[editar]

Los procesos (processes) son los principales elementos de computación. Son concurrentes.

Canales[editar]

Los canales son elementos de comunicación de SystemC. Pueden ser simples cables o complejos mecanismos como sistemas FIFO o buses. Los canales básicos son:

  • signal
  • buffer
  • FIFO
  • mutex
  • semaphore

Interfaces[editar]

Los puertos usan las interfaces para comunicarse con los canales.

Eventos[editar]

Los eventos (events) permiten la sincronización entre procesos.

Tipos de datos[editar]

SystemC introduce varios tipos de datos para dar soporte al modelado de hardware.

Tipos extendidos[editar]

  • sc_int<> entero con signo de 64 bits
  • sc_uint<> entero sin signo de 64 bits
  • sc_bigint<> entero con signo de precisión arbitraria
  • sc_biguint<> entero sin signo de precisión arbitraria

Tipos lógicos[editar]

  • sc_bit un bit con dos únicos valores posibles2-valued single bit
  • sc_logic un bit en el que se pueden dar 4 valores
  • sc_bv<> vector de sc_bit
  • sc_lv<> vector de sc_logic
  • sc_lv<> normalmente se expresa en números decimales

Tipos de punto fijo[editar]

  • sc_fixed<> templated signed fixed point
  • sc_ufixed<> templated unsigned fixed point
  • sc_fix untemplated signed fixed point
  • sc_ufix untemplated unsigned fixed point

Ejemplo de código[editar]

El siguiente ejemplo es un sumador:

#include "systemc.h"

SC_MODULE(adder)         // módulo, declaración de la clase
{
 sc_in<int> a, b;        // puertos
 sc_out<int> sum;

 void do_add()           // proceso
 {
   sum = a + b;
 }

 SC_CTOR(adder)          // constructor
 {
   SC_METHOD(do_add);    // registro do_add al kernel
   sensitive << a << b;  // lista de sensibilidad de do_add
 }
};

Alternativas[editar]

SystemC usa el código escrito en C como entrada a sus programas de síntesis. Otra opción es transformar una descripción hecha en un lenguaje de programación a un lenguaje de descripción de hardware como VHDL o Verilog, algunas herramientas para ello son:

  • BachC
  • CoWare
  • OCAPI
  • CynApps
  • C2HDL
  • AR|T Builder

Véase también[editar]

Enlaces externos[editar]