source: sources/src/sc_trace_ext.h @ 63

Last change on this file since 63 was 59, checked in by meunier, 8 years ago
  • Fixed memory leaks
  • Fixed indentation in some files
File size: 6.3 KB
RevLine 
[1]1/*------------------------------------------------------------\
2|                                                             |
3| Tool    :                  systemcass                       |
4|                                                             |
5| File    :                   sc_trace.h                      |
6|                                                             |
7| Author  :                 Kingbo Paul-Jerome                |
8|                           Buchmann Richard                  |
9|                                                             |
10| Date    :                   09_07_2004                      |
11|                                                             |
12\------------------------------------------------------------*/
13
14/*
15 * This file is part of the Disydent Project
16 * Copyright (C) Laboratoire LIP6 - Département ASIM
17 * Universite Pierre et Marie Curie
18 *
19 * Home page          : http://www-asim.lip6.fr/disydent
20 * E-mail             : mailto:richard.buchmann@lip6.fr
21 *
22 * This library is free software; you  can redistribute it and/or modify it
23 * under the terms  of the GNU Library General Public  License as published
24 * by the Free Software Foundation; either version 2 of the License, or (at
25 * your option) any later version.
26 *
27 * Disydent is distributed  in the hope  that it  will be
28 * useful, but WITHOUT  ANY WARRANTY; without even the  implied warranty of
29 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
30 * Public License for more details.
31 *
32 * You should have received a copy  of the GNU General Public License along
33 * with the GNU C Library; see the  file COPYING. If not, write to the Free
34 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
35 */
36
37#ifndef __SC_TRACE_EXT_H__
38#define __SC_TRACE_EXT_H__
39
40#include <vector>
41#include <iostream>
42#include <string>
43#include <sstream>
[59]44//#include <stdint.h>
[1]45
[52]46#include "sc_fwd.h"
47#include "alias.h"
[1]48#include "sc_module_ext.h"
49#include "sc_localvar.h"
50
51
[52]52
[1]53namespace sc_core {
54
[52]55using namespace sc_dt;
[4]56
[1]57
[52]58
59struct signal2trace {
60    const sc_interface * inter;
61    const char * alias;
62    unsigned int bit_size;
63    tab_t * pointer;
64    std::string nomSig;
[1]65};
66
67
68
[52]69template< typename T > struct bits_number_getter {};
70
71
72#define BITS_NUMBER_GETTER_DEF(newt, typ, expr)           \
73    template<newt> struct bits_number_getter<typ> {       \
74        typedef typ val_t;                                \
75        static inline unsigned int get() { return expr; } \
76    }
77
78
79BITS_NUMBER_GETTER_DEF(, bool          , 1);
80BITS_NUMBER_GETTER_DEF(, char          , 8 * sizeof(val_t));
81BITS_NUMBER_GETTER_DEF(, signed   char , 8 * sizeof(val_t));
82BITS_NUMBER_GETTER_DEF(, unsigned char , 8 * sizeof(val_t));
83BITS_NUMBER_GETTER_DEF(, unsigned short, 8 * sizeof(val_t));
84BITS_NUMBER_GETTER_DEF(, signed   short, 8 * sizeof(val_t));
85BITS_NUMBER_GETTER_DEF(, signed   int  , 8 * sizeof(val_t));
86BITS_NUMBER_GETTER_DEF(, unsigned int  , 8 * sizeof(val_t));
87BITS_NUMBER_GETTER_DEF(, signed   long , 8 * sizeof(val_t));
88BITS_NUMBER_GETTER_DEF(, unsigned long , 8 * sizeof(val_t));
89BITS_NUMBER_GETTER_DEF(, float         , 8 * sizeof(val_t));
90BITS_NUMBER_GETTER_DEF(, sc_unsigned   , 8 * sizeof(unsigned int));
91BITS_NUMBER_GETTER_DEF(, sc_signed     , 8 * sizeof(int));
92BITS_NUMBER_GETTER_DEF(, double        , 8 * sizeof(val_t));
[59]93BITS_NUMBER_GETTER_DEF(, uint64      , 8 * sizeof(val_t));
94BITS_NUMBER_GETTER_DEF(, int64       , 8 * sizeof(val_t));
[52]95BITS_NUMBER_GETTER_DEF(typename inval_t, sc_in<inval_t>    , bits_number_getter<inval_t>::get());
96BITS_NUMBER_GETTER_DEF(typename inval_t, sc_out<inval_t>   , bits_number_getter<inval_t>::get());
97BITS_NUMBER_GETTER_DEF(typename inval_t, sc_inout<inval_t> , bits_number_getter<inval_t>::get());
98BITS_NUMBER_GETTER_DEF(typename inval_t, sc_signal<inval_t>, bits_number_getter<inval_t>::get());
99BITS_NUMBER_GETTER_DEF(int W, sc_int<W>, W);
100BITS_NUMBER_GETTER_DEF(int W, sc_uint<W>, W);
101BITS_NUMBER_GETTER_DEF(int W, sc_bigint<W>, W);
102BITS_NUMBER_GETTER_DEF(int W, sc_biguint<W>, W);
103BITS_NUMBER_GETTER_DEF(int W, sc_bv<W>, W);
104BITS_NUMBER_GETTER_DEF(int W, sc_lv<W>, W);
[1]105#undef BITS_NUMBER_GETTER_DEF
[52]106
107
108template < typename T >
109inline unsigned int get_bits_number (const T & object) {
[1]110    return bits_number_getter<T>::get();
111}
112
113
[52]114
[1]115struct sc_trace_file;
116
117
[52]118extern void sc_trace(sc_trace_file * tf, const signal2trace & t, const std::string & name);
[1]119
[52]120
121template < class T > /*inline*/
122void sc_trace(sc_trace_file * tf, const sc_in< T > & port, const std::string & name) {
123    signal2trace t;
124    t.inter = (const sc_interface *) &port;
125    t.alias = alias();
126    t.bit_size = get_bits_number(port);
127    t.nomSig = name;
128    sc_trace (tf, t, name);
[1]129}
130
131
[52]132
[1]133template <class T> /*inline*/
[52]134void sc_trace(sc_trace_file * tf, const sc_out< T > & out, const std::string & name) {
135    signal2trace t;
136    t.inter = (const sc_interface *) &out;
137    t.alias = alias();
138    t.bit_size = get_bits_number(out);
139    t.nomSig = name;
140    sc_trace (tf, t, name);
[1]141}
142
143
[52]144
[1]145template <typename T> /*inline*/
[52]146void sc_trace(sc_trace_file * tf, const sc_inout< T > & inout, const std::string & name) {
147    signal2trace t;
148    t.inter = (const sc_interface *) &inout;
149    t.alias = alias();
150    t.bit_size = get_bits_number(inout);
151    t.nomSig = name;
152    sc_trace (tf, t, name);
[1]153}
154
155
[52]156
[1]157template <typename T> /*inline*/
[52]158void sc_trace( sc_trace_file * tf, const sc_signal< T > & signal, const std::string & name) {
159    signal2trace t;
160    t.inter = (const sc_interface *) &signal;
161    t.alias = alias();
162    t.bit_size = get_bits_number(signal);
163    t.nomSig = name;
164    sc_trace (tf, t, name);
[1]165}
166
167
168
[52]169#define DEF_SC_TRACE(T) /*inline \*/       \
170    extern void sc_trace (sc_trace_file *, \
171        const T & object,                  \
172        const std::string &);
[1]173
[52]174    DEF_SC_TRACE(bool)
175    DEF_SC_TRACE(float)
176    DEF_SC_TRACE(double)
177    DEF_SC_TRACE(unsigned char)
178    DEF_SC_TRACE(unsigned short)
179    DEF_SC_TRACE(unsigned int)
180    DEF_SC_TRACE(unsigned long)
181    DEF_SC_TRACE(char)
182    DEF_SC_TRACE(short)
183    DEF_SC_TRACE(int)
184    DEF_SC_TRACE(long)
185    DEF_SC_TRACE(uint64)
186    DEF_SC_TRACE(int64)
[1]187#undef DEF_SC_TRACE
188
189} // end of sc_core namespace
190
[52]191
[1]192#endif
193
[52]194/*
195# Local Variables:
196# tab-width: 4;
197# c-basic-offset: 4;
198# c-file-offsets:((innamespace . 0)(inline-open . 0));
199# indent-tabs-mode: nil;
200# End:
201#
202# vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
203*/
204
Note: See TracBrowser for help on using the repository browser.