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