source: sources/src/sc_numrep.h @ 28

Last change on this file since 28 was 1, checked in by buchmann, 17 years ago

Initial import from CVS repository

File size: 2.3 KB
Line 
1/*------------------------------------------------------------\
2|                                                             |
3| Tool    :                  systemcass                       |
4|                                                             |
5| File    :                 sc_numrep.h                       |
6|                                                             |
7| Author  :                 Buchmann Richard                  |
8|                                                             |
9| Date    :                   04_05_2005                      |
10|                                                             |
11\------------------------------------------------------------*/
12#ifndef __SC_NUMREP_H__
13#define __SC_NUMREP_H__
14
15#include <iostream>
16#include "sc_string.h"
17
18namespace sc_dt {
19
20typedef enum {
21  SC_NOBASE = 0,
22  SC_BIN    = 2,     // binary
23  SC_OCT    = 8,     // octal, two's complement
24  SC_DEC    = 10,    // decimal
25  SC_HEX    = 16,    // hexadecimal, two's complement
26  SC_BIN_US     ,    // binary, unsigned
27  SC_BIN_SM     ,    // binary, sign magnitude
28  SC_OCT_US     , 
29  SC_OCT_SM     ,
30  SC_HEX_US     ,
31  SC_HEX_SM     ,
32  SC_CSD             // canonical signed digit
33} sc_numrep;
34
35inline
36const unsigned int bitstring_to_uint (const char * val)
37{ 
38  unsigned int i, res = 0;
39  for (i = 0; val[i] != '\0'; ++i)
40  {
41    res <<= 1;
42    res |= (val[i] == '1')?1:0;
43  } 
44  return res;   
45}
46
47template <typename T>
48const sc_string to_string (T val, size_t nbits, sc_numrep n)
49{ 
50  sc_string s(nbits + 3,'0');
51  switch (n) {
52  case SC_HEX : {
53    char t[64];
54    char format[64];
55    sprintf (format, "0x0%%0%dx", nbits/4);
56    sprintf (t, format, val);
57    s = t;
58    break;
59  }
60  case SC_BIN : {
61    int i;
62    s[1] = 'b';
63    for (i = nbits - 1; i >= 0; --i)
64    {
65      s[i + 3] = (val & 1)?'1':'0';
66      val >>= 1;
67    } 
68    break;
69  }
70  default:
71    { std::cerr << "error\n"; return s; }
72  }
73#if 0
74  std::cerr << "\"" << s << "\"";
75#endif
76  return s;
77}
78
79const std::string to_string (sc_numrep);
80
81} // end of sc_dt namespace
82
83using sc_dt::sc_numrep;
84using sc_dt::SC_BIN;
85using sc_dt::SC_HEX;
86using sc_dt::SC_OCT; 
87using sc_dt::SC_DEC;
88using sc_dt::SC_HEX;
89using sc_dt::SC_BIN_US;
90using sc_dt::SC_BIN_SM;
91using sc_dt::SC_OCT_US;
92using sc_dt::SC_OCT_SM;
93using sc_dt::SC_HEX_US;
94using sc_dt::SC_HEX_SM;
95using sc_dt::SC_CSD;
96
97#endif
98
Note: See TracBrowser for help on using the repository browser.