SystemC

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]

* Codiseño hardware-software
* Diseño de circuitos
* Nivel de transferencia de registros (RTL)

## Enlaces externos

[editar]

* Sitio web de SystemC
* Un CD Linux "Live" por SystemC con clase particular de C++/SystemC
* Synopsys, creadores de CoCentric SystemC Compiler
* Grupo de usuarios europeo de SystemC Archivado el 29 de agosto de 2005 en Wayback Machine.
* Guía de SystemC

Control de autoridades|

* Proyectos Wikimedia
* Datos: Q1753563
* Informática
* AUR: systemc
* Gentoo: sci-electronics/systemc

|

* Datos: Q1753563