Changeset 22 for sources/src/sc_signal.h
- Timestamp:
- Apr 16, 2009, 2:46:01 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sources/src/sc_signal.h
r17 r22 91 91 const T value_) 92 92 { 93 93 if (sizeof (T) > sizeof (base_type)) { 94 94 #if 0 95 cout << "sizeof (T) = " << sizeof (T) << " (base_type = " << sizeof96 (base_type) << "\n";97 #endif 98 99 95 std::cout << "sizeof (T) = " << sizeof (T) 96 << " (base_type = " << sizeof (base_type) << "\n"; 97 #endif 98 post_multiwrite (pointer_,value_); 99 } else { 100 100 #if defined(DEBUG) 101 102 103 104 105 106 107 101 if (pending_write_vector_nb >= pending_write_vector_capacity) { 102 //if (pending_write_vector_nb >= pending_write_vector_capacity * sizeof(pending_write)) { 103 std::cerr << "Error : The array for posted writing on register is too small.\n"; 104 std::cerr << "Up to 1 writing per register is allowed during a cycle.\n"; 105 std::cerr << "Please check the hardware description.\n"; 106 exit (-1); 107 } 108 108 #endif // DEBUG 109 pending_write_vector[pending_write_vector_nb].pointer = pointer_;109 pending_write_vector[pending_write_vector_nb].pointer = pointer_; 110 110 // pending_write_vector[pending_write_vector_nb++].value = *(reinterpret_cast<const base_type*const>(&value_)); => bug ! 111 pending_write_vector[pending_write_vector_nb++].value = value_; // => bug avec blues !111 pending_write_vector[pending_write_vector_nb++].value = value_; // => bug avec blues ! 112 112 113 113 // -> fix to use user-defined struct in sc_signal/sc_in/sc_out/sc_inout … … 121 121 return; 122 122 #endif 123 123 }; 124 124 } 125 125 126 126 inline bool is_posted_write () 127 127 { 128 128 return pending_write_vector_nb > 0; 129 129 } 130 130 … … 139 139 class sc_signal_base : public sc_object, public sc_interface 140 140 { 141 142 141 ////// 142 // Internal 143 143 friend class sc_clock; 144 144 friend class sc_port_base; 145 145 void init (); 146 146 ////// 147 147 148 148 … … 158 158 sc_signal_base(const char* name_); 159 159 sc_signal_base(const char* name_, void*); 160 160 ~sc_signal_base(); 161 161 }; 162 162 … … 165 165 { 166 166 private: 167 168 typedef T data_type;167 T val; 168 typedef T data_type; 169 169 typedef sc_signal < T > this_type; 170 /////////// 171 // Internal 172 public: void init (); 173 /////////// 174 // virtual void update (); 170 171 /////////// 172 // Internal 173 public: void init (); 174 /////////// 175 176 // virtual void update (); 175 177 void check_writer (); 176 178 public: 177 179 // constructors, destructor 178 180 sc_signal () 179 181 { init (); } 180 182 explicit sc_signal (const char *name_): sc_signal_base(name_) 181 183 { init (); } 182 184 /*virtual */~ sc_signal () 183 185 {} … … 229 231 set_pointer ((tab_t*)&val); 230 232 set_kind (kind_string); 231 233 sc_interface::init (sizeof (data_type)); 232 234 val = 0; /* The simulator initializes the signal/register to 0. */ 233 235 /* However, hardware initialization still has to be done. */
Note: See TracChangeset
for help on using the changeset viewer.