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 " gunzip tar - xvf 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 " 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 mybuf_tb : sc_module pública { pública : . Sc_out SC_HAS_PROCESS ( mybuf_tb ) ; mybuf_tb ( sc_module_name nombre): sc_module ( nombre) { SC_THREAD ( clock1 ) ; SC_THREAD ( clock2 ) ; } clock1 void (); clock2 void (); } ; while ( true) { clk1 = 0 ; wait ( 10 , SC_NS ) ; clk1 = 1 ; wait ( 10 , SC_NS ) ; } } void mybuf_tb :: clock2 () { 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 sc_signal mybuf newbuf ( " mybuffer "); newbuf.clk1 ( clk1 ) ; newbuf . clk2 ( clk2 ) ; mybuf_tb 1 ; }
3 < . . p > Cambiar al directorio descomprimido con el comando "cd
4
clase
clase
< p> sc_out
< p> void mybuf_tb :: clock1 () {
< p > while ( true) {