| [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>
|
|---|
| 44 |
|
|---|
| [52] | 45 | #include "sc_fwd.h"
|
|---|
| 46 | #include "alias.h"
|
|---|
| [1] | 47 | #include "sc_module_ext.h"
|
|---|
| 48 | #include "sc_localvar.h"
|
|---|
| 49 |
|
|---|
| 50 |
|
|---|
| [52] | 51 |
|
|---|
| [1] | 52 | namespace sc_core {
|
|---|
| 53 |
|
|---|
| [52] | 54 | using namespace sc_dt;
|
|---|
| [4] | 55 |
|
|---|
| [1] | 56 |
|
|---|
| [52] | 57 |
|
|---|
| 58 | struct signal2trace {
|
|---|
| 59 | const sc_interface * inter;
|
|---|
| 60 | const char * alias;
|
|---|
| 61 | unsigned int bit_size;
|
|---|
| 62 | tab_t * pointer;
|
|---|
| 63 | std::string nomSig;
|
|---|
| [1] | 64 | };
|
|---|
| 65 |
|
|---|
| 66 |
|
|---|
| 67 |
|
|---|
| [52] | 68 | template< typename T > struct bits_number_getter {};
|
|---|
| 69 |
|
|---|
| 70 |
|
|---|
| 71 | #define BITS_NUMBER_GETTER_DEF(newt, typ, expr) \
|
|---|
| 72 | template<newt> struct bits_number_getter<typ> { \
|
|---|
| 73 | typedef typ val_t; \
|
|---|
| 74 | static inline unsigned int get() { return expr; } \
|
|---|
| 75 | }
|
|---|
| 76 |
|
|---|
| 77 |
|
|---|
| 78 | BITS_NUMBER_GETTER_DEF(, bool , 1);
|
|---|
| 79 | BITS_NUMBER_GETTER_DEF(, char , 8 * sizeof(val_t));
|
|---|
| 80 | BITS_NUMBER_GETTER_DEF(, signed char , 8 * sizeof(val_t));
|
|---|
| 81 | BITS_NUMBER_GETTER_DEF(, unsigned char , 8 * sizeof(val_t));
|
|---|
| 82 | BITS_NUMBER_GETTER_DEF(, unsigned short, 8 * sizeof(val_t));
|
|---|
| 83 | BITS_NUMBER_GETTER_DEF(, signed short, 8 * sizeof(val_t));
|
|---|
| 84 | BITS_NUMBER_GETTER_DEF(, signed int , 8 * sizeof(val_t));
|
|---|
| 85 | BITS_NUMBER_GETTER_DEF(, unsigned int , 8 * sizeof(val_t));
|
|---|
| 86 | BITS_NUMBER_GETTER_DEF(, signed long , 8 * sizeof(val_t));
|
|---|
| 87 | BITS_NUMBER_GETTER_DEF(, unsigned long , 8 * sizeof(val_t));
|
|---|
| 88 | BITS_NUMBER_GETTER_DEF(, float , 8 * sizeof(val_t));
|
|---|
| 89 | BITS_NUMBER_GETTER_DEF(, sc_unsigned , 8 * sizeof(unsigned int));
|
|---|
| 90 | BITS_NUMBER_GETTER_DEF(, sc_signed , 8 * sizeof(int));
|
|---|
| 91 | BITS_NUMBER_GETTER_DEF(, double , 8 * sizeof(val_t));
|
|---|
| 92 | BITS_NUMBER_GETTER_DEF(, uint64 , 8 * sizeof(val_t));
|
|---|
| 93 | BITS_NUMBER_GETTER_DEF(, int64 , 8 * sizeof(val_t));
|
|---|
| 94 | BITS_NUMBER_GETTER_DEF(typename inval_t, sc_in<inval_t> , bits_number_getter<inval_t>::get());
|
|---|
| 95 | BITS_NUMBER_GETTER_DEF(typename inval_t, sc_out<inval_t> , bits_number_getter<inval_t>::get());
|
|---|
| 96 | BITS_NUMBER_GETTER_DEF(typename inval_t, sc_inout<inval_t> , bits_number_getter<inval_t>::get());
|
|---|
| 97 | BITS_NUMBER_GETTER_DEF(typename inval_t, sc_signal<inval_t>, bits_number_getter<inval_t>::get());
|
|---|
| 98 | BITS_NUMBER_GETTER_DEF(int W, sc_int<W>, W);
|
|---|
| 99 | BITS_NUMBER_GETTER_DEF(int W, sc_uint<W>, W);
|
|---|
| 100 | BITS_NUMBER_GETTER_DEF(int W, sc_bigint<W>, W);
|
|---|
| 101 | BITS_NUMBER_GETTER_DEF(int W, sc_biguint<W>, W);
|
|---|
| 102 | BITS_NUMBER_GETTER_DEF(int W, sc_bv<W>, W);
|
|---|
| 103 | BITS_NUMBER_GETTER_DEF(int W, sc_lv<W>, W);
|
|---|
| [1] | 104 | #undef BITS_NUMBER_GETTER_DEF
|
|---|
| [52] | 105 |
|
|---|
| 106 |
|
|---|
| 107 | template < typename T >
|
|---|
| 108 | inline unsigned int get_bits_number (const T & object) {
|
|---|
| [1] | 109 | return bits_number_getter<T>::get();
|
|---|
| 110 | }
|
|---|
| 111 |
|
|---|
| 112 |
|
|---|
| [52] | 113 |
|
|---|
| [1] | 114 | struct sc_trace_file;
|
|---|
| 115 |
|
|---|
| 116 |
|
|---|
| [52] | 117 | extern void sc_trace(sc_trace_file * tf, const signal2trace & t, const std::string & name);
|
|---|
| [1] | 118 |
|
|---|
| [52] | 119 |
|
|---|
| 120 | template < class T > /*inline*/
|
|---|
| 121 | void sc_trace(sc_trace_file * tf, const sc_in< T > & port, const std::string & name) {
|
|---|
| 122 | signal2trace t;
|
|---|
| 123 | t.inter = (const sc_interface *) &port;
|
|---|
| 124 | t.alias = alias();
|
|---|
| 125 | t.bit_size = get_bits_number(port);
|
|---|
| 126 | t.nomSig = name;
|
|---|
| 127 | sc_trace (tf, t, name);
|
|---|
| [1] | 128 | }
|
|---|
| 129 |
|
|---|
| 130 |
|
|---|
| [52] | 131 |
|
|---|
| [1] | 132 | template <class T> /*inline*/
|
|---|
| [52] | 133 | void sc_trace(sc_trace_file * tf, const sc_out< T > & out, const std::string & name) {
|
|---|
| 134 | signal2trace t;
|
|---|
| 135 | t.inter = (const sc_interface *) &out;
|
|---|
| 136 | t.alias = alias();
|
|---|
| 137 | t.bit_size = get_bits_number(out);
|
|---|
| 138 | t.nomSig = name;
|
|---|
| 139 | sc_trace (tf, t, name);
|
|---|
| [1] | 140 | }
|
|---|
| 141 |
|
|---|
| 142 |
|
|---|
| [52] | 143 |
|
|---|
| [1] | 144 | template <typename T> /*inline*/
|
|---|
| [52] | 145 | void sc_trace(sc_trace_file * tf, const sc_inout< T > & inout, const std::string & name) {
|
|---|
| 146 | signal2trace t;
|
|---|
| 147 | t.inter = (const sc_interface *) &inout;
|
|---|
| 148 | t.alias = alias();
|
|---|
| 149 | t.bit_size = get_bits_number(inout);
|
|---|
| 150 | t.nomSig = name;
|
|---|
| 151 | sc_trace (tf, t, name);
|
|---|
| [1] | 152 | }
|
|---|
| 153 |
|
|---|
| 154 |
|
|---|
| [52] | 155 |
|
|---|
| [1] | 156 | template <typename T> /*inline*/
|
|---|
| [52] | 157 | void sc_trace( sc_trace_file * tf, const sc_signal< T > & signal, const std::string & name) {
|
|---|
| 158 | signal2trace t;
|
|---|
| 159 | t.inter = (const sc_interface *) &signal;
|
|---|
| 160 | t.alias = alias();
|
|---|
| 161 | t.bit_size = get_bits_number(signal);
|
|---|
| 162 | t.nomSig = name;
|
|---|
| 163 | sc_trace (tf, t, name);
|
|---|
| [1] | 164 | }
|
|---|
| 165 |
|
|---|
| 166 |
|
|---|
| 167 |
|
|---|
| [52] | 168 | #define DEF_SC_TRACE(T) /*inline \*/ \
|
|---|
| 169 | extern void sc_trace (sc_trace_file *, \
|
|---|
| 170 | const T & object, \
|
|---|
| 171 | const std::string &);
|
|---|
| [1] | 172 |
|
|---|
| [52] | 173 | DEF_SC_TRACE(bool)
|
|---|
| 174 | DEF_SC_TRACE(float)
|
|---|
| 175 | DEF_SC_TRACE(double)
|
|---|
| 176 | DEF_SC_TRACE(unsigned char)
|
|---|
| 177 | DEF_SC_TRACE(unsigned short)
|
|---|
| 178 | DEF_SC_TRACE(unsigned int)
|
|---|
| 179 | DEF_SC_TRACE(unsigned long)
|
|---|
| 180 | DEF_SC_TRACE(char)
|
|---|
| 181 | DEF_SC_TRACE(short)
|
|---|
| 182 | DEF_SC_TRACE(int)
|
|---|
| 183 | DEF_SC_TRACE(long)
|
|---|
| 184 | DEF_SC_TRACE(uint64)
|
|---|
| 185 | DEF_SC_TRACE(int64)
|
|---|
| [1] | 186 | #undef DEF_SC_TRACE
|
|---|
| 187 |
|
|---|
| 188 | } // end of sc_core namespace
|
|---|
| 189 |
|
|---|
| [52] | 190 |
|
|---|
| [1] | 191 | #endif
|
|---|
| 192 |
|
|---|
| [52] | 193 | /*
|
|---|
| 194 | # Local Variables:
|
|---|
| 195 | # tab-width: 4;
|
|---|
| 196 | # c-basic-offset: 4;
|
|---|
| 197 | # c-file-offsets:((innamespace . 0)(inline-open . 0));
|
|---|
| 198 | # indent-tabs-mode: nil;
|
|---|
| 199 | # End:
|
|---|
| 200 | #
|
|---|
| 201 | # vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
|
|---|
| 202 | */
|
|---|
| 203 |
|
|---|