Una clase para Loggearlos a todos

Una buena forma de sacar información de lo que está pasando en nuestras simulaciones SystemC es generar un archivo de log con la distinta información que necesitemos (nombre del módulo, tiempo de simulación, qué se está enviado o recibiendo, etc.).

Para ello la forma más elegante y sencilla de hacerlo es crearse una clase especial para la tarea, que los demás módulos puedan usar para enviar sus información y ésta los grabe en un fichero. Esto se consigue diseñando una clase de tipo singleton. Este patrón de diseño restringe la creación de un solo objecto de una clase dada. En nuestro caso, hará que todos los módulos usen el mismo objecto.

Continue reading »

Posted in General | Tagged , , , | Leave a comment

Ejemplo de Loosely-timed

Primero recordemos qué significa el estilo loosely-timed: en este estilo usamos la función bloqueante b_transport y por tanto tenemos dos puntos de sincronización asociados a cada transacción, que corresponden al inicio y al fin de la misma. Estos dos puntos pueden estar en el mismo tiempo de simulación o estar separados (en el caso de tener los dos puntos de sincronización en el mismo instante de simulación, estaríamos en el caso untimed). Continue reading »

Posted in Ejemplos | Tagged , , , , , | Leave a comment

Ejemplo de Untimed

Vamos con el primer ejemplo…

Initiator

Empezamos con los includes de las cabeceras necesarias

#include 

using namespace sc_core;

#include "tlm.h"

#include "tlm_utils/simple_initiator_socket.h"

Primero incluimos systemc (previsible, eh?) y luego tlm.h (también previsible).

Por último incluimos el socket mas sencillo de todos para este ejemplo.

A continuación declaramos la classe Initiator

class Initiator: sc_module

{

public:

tlm_utils::simple_initiator_socket initiator_socket;

SC_HAS_PROCESS(Initiator);

Initiator(sc_module_name name_);

private:

void initiator_thread();

};

Continue reading »

Posted in Ejemplos | Tagged , , , , , | 1 Comment