Changeset 52 for sources/src/sc_trace_ext.h
- Timestamp:
- Jan 22, 2013, 4:23:22 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sources/src/sc_trace_ext.h
r4 r52 38 38 #define __SC_TRACE_EXT_H__ 39 39 40 #include "sc_fwd.h"41 #include "alias.h"42 40 #include <vector> 43 41 #include <iostream> … … 45 43 #include <sstream> 46 44 45 #include "sc_fwd.h" 46 #include "alias.h" 47 47 #include "sc_module_ext.h" 48 48 #include "sc_localvar.h" 49 49 50 //--------------------------------------------------------------------------- 50 51 51 52 52 namespace sc_core { 53 53 54 using namespace sc_dt; 55 56 //--------------------------------------------------------------------------- 57 58 struct signal2trace 59 { 60 const sc_interface *inter; 61 const char *alias; 62 unsigned int bit_size; 63 tab_t *pointer; 64 std::string nomSig; 54 using namespace sc_dt; 55 56 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; 65 64 }; 66 65 67 //--------------------------------------------------------------------------- 68 69 template<typename T> struct bits_number_getter {}; 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 BITS_NUMBER_GETTER_DEF(, bool ,1); 78 BITS_NUMBER_GETTER_DEF(, char ,8*sizeof(val_t)); 79 BITS_NUMBER_GETTER_DEF(, signed char ,8*sizeof(val_t)); 80 BITS_NUMBER_GETTER_DEF(, unsigned char ,8*sizeof(val_t)); 81 BITS_NUMBER_GETTER_DEF(, unsigned short,8*sizeof(val_t)); 82 BITS_NUMBER_GETTER_DEF(, signed short,8*sizeof(val_t)); 83 BITS_NUMBER_GETTER_DEF(, signed int ,8*sizeof(val_t)); 84 BITS_NUMBER_GETTER_DEF(, unsigned int ,8*sizeof(val_t)); 85 BITS_NUMBER_GETTER_DEF(, signed long ,8*sizeof(val_t)); 86 BITS_NUMBER_GETTER_DEF(, unsigned long ,8*sizeof(val_t)); 87 BITS_NUMBER_GETTER_DEF(, float ,8*sizeof(val_t)); 88 BITS_NUMBER_GETTER_DEF(, sc_unsigned ,8*sizeof(unsigned int)); 89 BITS_NUMBER_GETTER_DEF(, sc_signed ,8*sizeof(int)); 90 BITS_NUMBER_GETTER_DEF(, double ,8*sizeof(val_t)); 91 BITS_NUMBER_GETTER_DEF(, uint64 ,8*sizeof(val_t)); 92 BITS_NUMBER_GETTER_DEF(, int64 ,8*sizeof(val_t)); 93 BITS_NUMBER_GETTER_DEF(typename inval_t, sc_in<inval_t> ,bits_number_getter<inval_t>::get()); 94 BITS_NUMBER_GETTER_DEF(typename inval_t, sc_out<inval_t> ,bits_number_getter<inval_t>::get()); 95 BITS_NUMBER_GETTER_DEF(typename inval_t, sc_inout<inval_t> ,bits_number_getter<inval_t>::get()); 96 BITS_NUMBER_GETTER_DEF(typename inval_t, sc_signal<inval_t>,bits_number_getter<inval_t>::get()); 97 BITS_NUMBER_GETTER_DEF(int W, sc_int<W>,W); 98 BITS_NUMBER_GETTER_DEF(int W, sc_uint<W>,W); 99 BITS_NUMBER_GETTER_DEF(int W, sc_bigint<W>,W); 100 BITS_NUMBER_GETTER_DEF(int W, sc_biguint<W>,W); 101 BITS_NUMBER_GETTER_DEF(int W, sc_bv<W>,W); 102 BITS_NUMBER_GETTER_DEF(int W, sc_lv<W>,W); 66 67 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); 103 104 #undef BITS_NUMBER_GETTER_DEF 104 105 template < typename T > inline 106 unsigned int get_bits_number (const T & object) 107 {105 106 107 template < typename T > 108 inline unsigned int get_bits_number (const T & object) { 108 109 return bits_number_getter<T>::get(); 109 110 } 110 111 111 //--------------------------------------------------------------------------- 112 112 113 113 114 struct sc_trace_file; 114 115 115 //--------------------------------------------------------------------------- 116 117 extern void 118 sc_trace( sc_trace_file* tf, const signal2trace &t, const std::string &name ); 116 117 extern void sc_trace(sc_trace_file * tf, const signal2trace & t, const std::string & name); 118 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); 128 } 129 130 119 131 120 132 template <class T> /*inline*/ 121 void 122 sc_trace( sc_trace_file* tf, const sc_in<T>& port, const std::string &name ) 123 { 124 signal2trace t; 125 t.inter = (const sc_interface*) &port; 126 t.alias = alias(); 127 t.bit_size = get_bits_number(port); 128 t.nomSig = name; 129 sc_trace (tf, t, name); 130 } 131 132 //---------------------------------------------------------------------------- 133 134 template <class T> /*inline*/ 135 void 136 sc_trace( sc_trace_file* tf, const sc_out<T>& out, const std::string &name ) 137 { 138 signal2trace t; 139 t.inter = (const sc_interface*) &out; 140 t.alias = alias(); 141 t.bit_size = get_bits_number(out); 142 t.nomSig = name; 143 sc_trace (tf, t, name); 144 } 145 146 //---------------------------------------------------------------------------- 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); 140 } 141 142 147 143 148 144 template <typename T> /*inline*/ 149 void 150 sc_trace( sc_trace_file* tf, const sc_inout<T>& inout, const std::string &name ) 151 { 152 signal2trace t; 153 t.inter = (const sc_interface*) &inout; 154 t.alias = alias(); 155 t.bit_size = get_bits_number(inout); 156 t.nomSig = name; 157 sc_trace (tf, t, name); 158 } 159 160 //---------------------------------------------------------------------------- 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); 152 } 153 154 161 155 162 156 template <typename T> /*inline*/ 163 void 164 sc_trace( sc_trace_file* tf, const sc_signal<T>& signal, const std::string &name ) 165 { 166 signal2trace t; 167 t.inter = (const sc_interface*) &signal; 168 t.alias = alias(); 169 t.bit_size = get_bits_number(signal); 170 t.nomSig = name; 171 sc_trace (tf, t, name); 172 } 173 174 //---------------------------------------------------------------------------- 175 176 #define DEF_SC_TRACE(T) /*inline \*/ \ 177 extern void \ 178 sc_trace (sc_trace_file*, \ 179 const T& object, \ 180 const std::string&); 181 182 DEF_SC_TRACE(bool) 183 DEF_SC_TRACE(float) 184 DEF_SC_TRACE(double) 185 DEF_SC_TRACE(unsigned char) 186 DEF_SC_TRACE(unsigned short) 187 DEF_SC_TRACE(unsigned int) 188 DEF_SC_TRACE(unsigned long) 189 DEF_SC_TRACE(char) 190 DEF_SC_TRACE(short) 191 DEF_SC_TRACE(int) 192 DEF_SC_TRACE(long) 193 DEF_SC_TRACE(uint64) 194 DEF_SC_TRACE(int64) 195 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); 164 } 165 166 167 168 #define DEF_SC_TRACE(T) /*inline \*/ \ 169 extern void sc_trace (sc_trace_file *, \ 170 const T & object, \ 171 const std::string &); 172 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) 196 186 #undef DEF_SC_TRACE 197 187 198 188 } // end of sc_core namespace 199 189 200 //---------------------------------------------------------------------------- 190 201 191 #endif 202 192 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
Note: See TracChangeset
for help on using the changeset viewer.