source: trunk/IPs/systemC/processor/Morpheo/Common/include/Debug.h @ 97

Last change on this file since 97 was 97, checked in by rosiere, 16 years ago

1) Update Prediction Table : statistics
2) Size instruction address on 30 bits
3) Change Log File
4) Add debug_level in simulation configuration file

  • Property svn:keywords set to Id
File size: 5.4 KB
Line 
1#ifndef Morpheo_Debug_h
2#define Morpheo_Debug_h
3
4/*
5 * $Id: Debug.h 97 2008-12-19 15:34:00Z rosiere $
6 *
7 * [ Description ]
8 *
9 * function to help the debugging :
10 *
11 *  - log_printf
12 *  - log_begin
13 *  - log_end
14 *  - log_function
15 *  - msg_print
16 *  - breakpoint
17 *
18 *  Debug's Level :
19 *  - None    : print elementary information
20 *  - Info    : print basic information
21 *  - Trace   : trace internal variable
22 *  - Func    : trace call and return function
23 *  - All     : print all information
24 */
25
26#include "Common/include/Message.h"
27#include "Common/include/FromString.h"
28#include "Common/include/ChangeCase.h"
29#include "Behavioural/include/Debug_component.h"
30#include <systemc.h>
31#include <stdio.h>
32#include <string.h>
33#include <iostream>
34#include <sstream>
35#include <string>
36
37namespace morpheo {
38
39typedef enum 
40  {
41    DEBUG_NONE ,
42    DEBUG_INFO ,
43    DEBUG_TRACE,
44    DEBUG_FUNC ,
45    DEBUG_ALL
46  } debug_verbosity_t;
47
48  extern debug_verbosity_t debug;
49
50void        debug_init    (void);
51void        debug_init    (debug_verbosity_t level);
52#ifdef DEBUG
53
54# define log_printf(level, component, func, str... )                    \
55  do                                                                    \
56    {                                                                   \
57      debug_init();                                                     \
58                                                                        \
59      if ((debug == DEBUG_ALL ) or                                      \
60          (DEBUG_ ## level == DEBUG_NONE) or                            \
61          (( DEBUG_ ## level     <= debug) and                          \
62           ( DEBUG_ ## component == true )) )                           \
63        {                                                               \
64          if (DEBUG_ ## level <= DEBUG_INFO)                            \
65            {                                                           \
66              msg("%s ",MSG_INFORMATION);                               \
67            }                                                           \
68          else                                                          \
69            {                                                           \
70              msg("%s ",MSG_DEBUG);                                     \
71            }                                                           \
72                                                                        \
73          if (debug >= DEBUG_ALL )                                      \
74            {                                                           \
75              switch (DEBUG_ ## level)                                  \
76                {                                                       \
77                case DEBUG_NONE  : msg(_("(none       ) ")); break;     \
78                case DEBUG_INFO  : msg(_("(information) ")); break;     \
79                case DEBUG_TRACE : msg(_("(trace      ) ")); break;     \
80                case DEBUG_FUNC  : msg(_("(function   ) ")); break;     \
81                case DEBUG_ALL   : msg(_("(all        ) ")); break;     \
82                default          : msg(_("(undefine   ) ")); break;     \
83                }                                                       \
84            }                                                           \
85          if (debug >= DEBUG_FUNC)                                      \
86            {                                                           \
87              msg(  "<%s> " ,func);                                     \
88              msg(_("In file %s, "),__FILE__);                          \
89              msg(_("at line %d " ),__LINE__);                          \
90              msg(  ": " );                                             \
91            }                                                           \
92          msg(str);                                                     \
93          msg("\n");                                                    \
94        }                                                               \
95    } while(0)
96
97# define log_begin(component, func)                                     \
98  do                                                                    \
99    {                                                                   \
100      log_printf(FUNC,component,func,_("Begin"));                       \
101    } while(0)
102
103# define log_end(component, func)                                       \
104  do                                                                    \
105    {                                                                   \
106      log_printf(FUNC,component,func,_("End"));                         \
107    } while(0)
108
109#else
110# define log_printf(level, component, func, str... )                    \
111  do                                                                    \
112    {                                                                   \
113    } while(0)
114
115# define log_begin(component, func)                                     \
116  do                                                                    \
117    {                                                                   \
118    } while(0)
119
120# define log_end(component, func)                                       \
121  do                                                                    \
122    {                                                                   \
123    } while(0)
124
125#endif // DEBUG
126
127# define log_function(component,func,name)                              \
128  do                                                                    \
129    {                                                                   \
130      log_printf(TRACE,component,func,_("[%d] %s.%s"),static_cast<uint32_t>(sc_simulation_time()),name,func); \
131    } while(0)
132
133
134#define msg_printf(type,str...)                                         \
135  do                                                                    \
136    {                                                                   \
137      msg("%s ",MSG_ ## type);                                          \
138      msg(str);                                                         \
139      msg("\n");                                                        \
140    } while(0)
141
142
143#define breakpoint(str...)                                              \
144  do                                                                    \
145    {                                                                   \
146      fprintf(stdout,_("%s "),MSG_BREAKPOINT);                                     \
147      fprintf(stdout,_("Breakpoint in file %s, line %d.\n"),__FILE__,__LINE__);    \
148      fprintf(stdout,_("%s "),MSG_NONE);                                           \
149      fprintf(stdout,str);                                                              \
150      fprintf(stdout,_("\n"));                                                     \
151      fprintf(stdout,_("%s "),MSG_NONE);                                           \
152      fprintf(stdout,_("Enter any key to continue\n"));                            \
153      getchar();                                                        \
154    } while(0)
155
156#ifdef DEBUG_TEST
157#define TEST_PTR(x)                                                     \
158  do                                                                    \
159    {                                                                   \
160      if (x == NULL)                                                    \
161        err(_("File %s, Line %d, this pointeur is null\n"),__FILE__,__LINE__); \
162    }                                                                   \
163  while (0)
164#else
165#define TEST_PTR(x)      \
166  do                     \
167    {                    \
168    }                    \
169  while (0)
170#endif
171
172
173  template<> inline debug_verbosity_t fromString<debug_verbosity_t> (const std::string& x)
174  {
175    std::string y=x;
176    LowerCase(y);
177
178    if ( (y.compare("0")     == 0) or
179         (y.compare("none")  == 0))
180      return DEBUG_NONE ;
181    if ( (y.compare("1")     == 0) or
182         (y.compare("info")  == 0))
183      return DEBUG_INFO ;
184    if ( (y.compare("2")     == 0) or
185         (y.compare("trace") == 0))
186      return DEBUG_TRACE;
187    if ( (y.compare("3")     == 0) or
188         (y.compare("func")  == 0))
189      return DEBUG_FUNC ;
190    if ( (y.compare("4")     == 0) or
191         (y.compare("all")   == 0))
192      return DEBUG_ALL  ;
193
194#ifdef DEBUG
195    return DEBUG;
196#else
197    return DEBUG_NONE ;
198#endif
199  }
200
201}; // end namespace morpheo
202#endif // !DEBUG_H
Note: See TracBrowser for help on using the repository browser.