source: sources/src/sc_lv.h @ 52

Last change on this file since 52 was 52, checked in by meunier, 11 years ago

Code formatting in all source files.

File size: 5.5 KB
Line 
1/*------------------------------------------------------------\
2|                                                             |
3| Tool    :                  systemcass                       |
4|                                                             |
5| File    :                 sc_lv.h                           |
6|                                                             |
7| Author  :                 Buchmann Richard                  |
8|                                                             |
9| Date    :                   19_04_2005                      |
10|                                                             |
11\------------------------------------------------------------*/
12
13#ifndef __SC_LV_H__
14#define __SC_LV_H__
15
16// ----------------------------------------------------------------------------
17//  CLASS : sc_lv
18//
19// ----------------------------------------------------------------------------
20
21#include "sc_nbdefs.h"
22#include "sc_logic.h"
23#include "sc_unsigned.h"
24#include "sc_signed.h"
25#include "sc_uint.h"
26#include "sc_int.h"
27
28
29namespace sc_dt {
30
31template<int W> struct s_lv_type { typedef uint64 lv_type; };
32
33#define DECLAR_LV_TYPE(W) template<> struct s_lv_type<W> { typedef smallest_uint lv_type; }// not declared as uint16 because << operator threats like a character
34DECLAR_LV_TYPE(1);
35DECLAR_LV_TYPE(2);
36DECLAR_LV_TYPE(3);
37DECLAR_LV_TYPE(4);
38DECLAR_LV_TYPE(5);
39DECLAR_LV_TYPE(6);
40DECLAR_LV_TYPE(7);
41DECLAR_LV_TYPE(8);
42#undef DECLAR_LV_TYPE
43
44#define DECLAR_LV_TYPE(W) template<> struct s_lv_type<W> { typedef uint16 lv_type; }
45DECLAR_LV_TYPE(9);
46DECLAR_LV_TYPE(10);
47DECLAR_LV_TYPE(11);
48DECLAR_LV_TYPE(12);
49DECLAR_LV_TYPE(13);
50DECLAR_LV_TYPE(14);
51DECLAR_LV_TYPE(15);
52DECLAR_LV_TYPE(16);
53#undef DECLAR_LV_TYPE
54
55#define DECLAR_LV_TYPE(W) template<> struct s_lv_type<W> { typedef uint32 lv_type; }
56DECLAR_LV_TYPE(17);
57DECLAR_LV_TYPE(18);
58DECLAR_LV_TYPE(19);
59DECLAR_LV_TYPE(20);
60DECLAR_LV_TYPE(21);
61DECLAR_LV_TYPE(22);
62DECLAR_LV_TYPE(23);
63DECLAR_LV_TYPE(24);
64DECLAR_LV_TYPE(25);
65DECLAR_LV_TYPE(26);
66DECLAR_LV_TYPE(27);
67DECLAR_LV_TYPE(28);
68DECLAR_LV_TYPE(29);
69DECLAR_LV_TYPE(30);
70DECLAR_LV_TYPE(31);
71DECLAR_LV_TYPE(32);
72#undef DECLAR_LV_TYPE
73
74
75class sc_lv_base {
76
77    public:
78    // constructors
79    sc_lv_base() {} // SYSTEMCASS SPECIFIC
80    sc_lv_base(const char * a);
81    sc_lv_base(const char * a, int length_);
82    template < class X > sc_lv_base (const sc_lv_base & a);
83    virtual ~sc_lv_base() {}
84    // assignment operators
85    template < class X > sc_lv_base & operator = (const sc_lv_base & a);
86    sc_lv_base & operator = (const char * a);
87    sc_lv_base & operator = (const bool * a);
88    sc_lv_base & operator = (const sc_logic * a);
89    sc_lv_base & operator = (const sc_unsigned & a);
90    sc_lv_base & operator = (const sc_signed & a);
91    sc_lv_base & operator = (unsigned long a);
92    sc_lv_base & operator = (long a);
93    sc_lv_base & operator = (unsigned int a);
94    sc_lv_base & operator = (int a);
95    sc_lv_base & operator = (uint64 a);
96    sc_lv_base & operator = (int64 a);
97
98    // methods
99    int length() const;
100    bool is_01() const;
101};
102
103
104template < int W > class sc_lv : public sc_lv_base {
105
106    /***********************/
107    /* SYSTEMCASS SPECIFIC */
108    /***********************/
109   
110    typedef sc_lv<W> this_type;
111    typedef typename s_lv_type<W>::lv_type data_type;
112    data_type val;
113
114    public:
115    // constructors
116    sc_lv() { val = 0; }
117    explicit sc_lv(bool init_value) { val = 0; }
118    explicit sc_lv (char init_value) { val = 0; }
119    sc_lv(const char * a)        { val = 0; write(atoi(a)); }
120    sc_lv(const bool * a)        { val = 0; write(a); }
121    sc_lv(const sc_logic * a)    { val = 0; write(a); }
122    sc_lv(const sc_unsigned & a) { val = 0; write(a); }
123    sc_lv(const sc_signed & a)   { val = 0; write(a); }
124    sc_lv(unsigned long a)       { val = 0; write(a); } 
125    sc_lv(long a)                { val = 0; write(a); }
126    sc_lv(unsigned int a)        { val = 0; write(a); }
127    sc_lv(int a)                 { val = 0; write(a); }
128    sc_lv(uint64 a)              { val = 0; write(a); }
129    sc_lv(int64 a)               { val = 0; write(a); }
130    sc_lv(const sc_lv_base & a)  { val = 0; write(a); }
131    sc_lv(const sc_lv < W > & a) { val = 0; write(a); }
132   
133    // assignment operators
134#ifdef LRM
135    template < class X > sc_lv < W > & operator = (const sc_lv_base & a);
136    sc_lv < W > & operator = (const sc_lv < W > &a);
137    sc_lv < W > & operator = (const char *a);
138    sc_lv < W > & operator = (const bool * a);
139    sc_lv < W > & operator = (const sc_logic * a);
140    sc_lv < W > & operator = (const sc_unsigned & a);
141    sc_lv < W > & operator = (const sc_signed & a);
142#endif // LRM
143
144    template <typename T> inline sc_lv& operator = (const T& val_) {
145        write (val_);
146        return *this;
147    }
148    sc_lv < W > & operator = (unsigned long a);
149    sc_lv < W > & operator = (long a);
150    sc_lv < W > & operator = (unsigned int a);
151    sc_lv < W > & operator = (int a) { val = a; return *this; }
152    sc_lv < W > & operator = (uint64 a);
153    sc_lv < W > & operator = (int64 a);
154
155   
156    /***********************/
157    /* SYSTEMCASS SPECIFIC */
158    /***********************/
159    // read/write
160    inline void write(data_type val_) {
161        val = val_;
162    }
163    template <int W2> inline void write (const sc_lv<W2> val_) {
164        write (val_.read());
165    }
166
167};
168
169} /* end of sc_dt namespace */
170
171#endif /* __SC_LV_H__ */
172
173/*
174# Local Variables:
175# tab-width: 4;
176# c-basic-offset: 4;
177# c-file-offsets:((innamespace . 0)(inline-open . 0));
178# indent-tabs-mode: nil;
179# End:
180#
181# vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
182*/
183
Note: See TracBrowser for help on using the repository browser.