“Conocimientos Programación>C /C + + Programming

Como modelo de sistemas de hardware en SystemC

2011/4/1
Sistemas de herrajes se utiliza un modelo de descripción de hardware idiomas como Verilog . Estos idiomas tienen por objeto ayudar a los diseñadores escriben código que está muy cerca del hardware generado por lo que la cadena de herramientas para el diseño de chip puede utilizar el código para generar el hardware final. La desventaja de este enfoque es la escasa flexibilidad de programación en estos idiomas. SystemC es un conjunto de bibliotecas de clases construidas en el lenguaje de programación C + +, y su intención es la de sistemas de hardware de modelo y, al mismo tiempo, utilizar todas las características del lenguaje de C + + . Cosas que necesitará
C + + compilador como g+ + Sistema operativo
Mostrar más instrucciones
Uso SystemC
1

Descargar el paquete SystemC . SystemC se puede descargar libremente desde Internet. Antes de la descarga , se le pedirá que se registre con la comunidad SystemC . Una vez que el proceso de registro se haya completado, el paquete puede ser descargado después de acceder a la página web con el nombre de usuario y contraseña.
2

Desembale el paquete comprimido. El paquete comprimido tendrá una extensión de archivo llamado " tgz " . Supongamos que el nombre del paquete es " . Tgz " . El paquete puede ser descomprimido con los siguientes comandos :

gunzip tgz

tar - xvf tar
3 < . . p > Cambiar al directorio descomprimido con el comando "cd " . En este directorio, un archivo llamado "INSTALAR " se puede encontrar . Este archivo proporciona guías paso a paso para instalar el paquete. Siga los pasos e instalar SystemC . Una vez instalado SystemC , sistemas de hardware pueden ser modelados en la lengua . El paquete cuenta con diseños de la muestra en el directorio " ejemplos " .
4

Utiliza el siguiente código de ejemplo para sistemas de hardware modelo . El ejemplo es el de un diseño de un sistema con dos procesos . El primer proceso se llena una memoria intermedia de una profunda cada vez que está vacía . El segundo proceso de borra y muestra el valor de la memoria intermedia . Los dos procesos operan a diferentes frecuencias de reloj . El código se explica a continuación: .

Incluya los archivos de cabecera necesarios

# include " systemc.h "

# include

# incluir

Clase " mybuf " se dispone de dos relojes de entrada, clk1 y clk2 . Dos métodos a saber , poner y quitar , se definen , en el que se invoca "insertar" en el flanco positivo de clk1 , y " eliminar " se invoca en el flanco positivo de " clk2 "
clase

mybuf : . Sc_module pública {

público :

sc_in_clk clk1 ;

sc_in_clk clk2 ;

std :: deque valores ;

SC_HAS_PROCESS ( mybuf ) ;

mybuf ( sc_module_name nombre): sc_module ( nombre) {

initialize ();

SC_METHOD (insert) ;

sensible < < clk1.pos ();

SC_METHOD ( quitar) ;

sensible << clk2.pos (); }


void insertar ();

void remove () ;

void initialize (); }

;

las siguientes líneas de código implementan la inserción y extracción métodos , junto con un método de inicialización

void mybuf :: initialize () {

values.clear (); }


void mybuf . : : remove () {

if ( values.size ()> 0 ) {

std :: cout << sc_time_stamp () << " " << values.front () << endl ;

values.pop_front (); }


}

void mybuf :: insert () {

if ( values.size () == 0 ) {

int r = rand ()% 100 ;

values.push_back ( r ) ;

}

}

el segmento de código siguiente se implementa un banco de pruebas para el ejemplo. Los relojes clk1 y clk2 son expulsados ​​de este banco de pruebas
clase

mybuf_tb : sc_module pública {

pública : .

Sc_out clk1 ;
< p> sc_out clk2 ;

SC_HAS_PROCESS ( mybuf_tb ) ;

mybuf_tb ( sc_module_name nombre): sc_module ( nombre) {

SC_THREAD ( clock1 ) ;

SC_THREAD ( clock2 ) ;

}

clock1 void ();

clock2 void (); }

;
< p> void mybuf_tb :: clock1 () {

while ( true) {

clk1 = 0 ;

wait ( 10 , SC_NS ) ;

clk1 = 1 ;

wait ( 10 , SC_NS ) ;

}

}

void mybuf_tb :: clock2 () {
< p > while ( true) {

clk2 = 0 ;

wait ( 20 , SC_NS ) ;

clk2 = 1 ;

wait ( 20 , SC_NS ) ;

}

}

el siguiente segmento de código crea una instancia del módulo de diseño y su banco de pruebas . Luego se une a los relojes para que el banco de pruebas proporciona los valores de reloj para el módulo de diseño .

Sc_main int (int argc, char * argv [ ] ) {

sc_signal clk1 ;

sc_signal clk2 ;

mybuf newbuf ( " mybuffer ");

newbuf.clk1 ( clk1 ) ;

newbuf . clk2 ( clk2 ) ;

mybuf_tb 1 ;

}

C /C + + Programming
Cómo calcular el tamaño de los elementos en los tampones en C
Cómo utilizar un búfer temporal en C + +
Cómo escribir extensiones HTML en C
Cómo purgar un Reciba Socket búfer en C
Dinámica Llamar a funciones en archivos DLL
Cómo compilar C Fuente Con Visual C
Cómo acceder a una estructura C de Fortran
Cómo hacer un juego básico en C + +
Conocimientos Informáticos © http://www.ordenador.online