Changeset 116 for trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/SelfTest/src/test.cpp
- Timestamp:
- Apr 30, 2009, 3:51:41 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/SelfTest/src/test.cpp
r112 r116 9 9 #include "Behavioural/Generic/Multiplier/SelfTest/include/test.h" 10 10 #include "Behavioural/include/Allocation.h" 11 #include "Common/include/BitManipulation.h" 11 12 12 13 void test (string name, … … 50 51 sc_clock * in_CLOCK = new sc_clock ("clock", 1.0, 0.5); 51 52 sc_signal<Tcontrol_t> * in_NRESET = new sc_signal<Tcontrol_t> ("NRESET"); 52 53 54 sc_signal<Tdata_t > * in_MULTIPLIER_DATA_IN_0; 55 sc_signal<Tdata_t > * in_MULTIPLIER_DATA_IN_1; 56 sc_signal<Tcontrol_t> * in_MULTIPLIER_NSTALL ; 57 58 sc_signal<Tdata_t > * out_MULTIPLIER_DATA_LSB_OUT; 59 sc_signal<Tdata_t > * out_MULTIPLIER_DATA_MSB_OUT; 60 61 62 ALLOC0_SC_SIGNAL( in_MULTIPLIER_DATA_IN_0,"in_MULTIPLIER_DATA_IN_0",Tdata_t ); 63 ALLOC0_SC_SIGNAL( in_MULTIPLIER_DATA_IN_1,"in_MULTIPLIER_DATA_IN_1",Tdata_t ); 64 ALLOC0_SC_SIGNAL( in_MULTIPLIER_NSTALL ,"in_MULTIPLIER_NSTALL ",Tcontrol_t); 65 66 ALLOC0_SC_SIGNAL(out_MULTIPLIER_DATA_LSB_OUT,"out_MULTIPLIER_DATA_LSB_OUT",Tdata_t ); 67 ALLOC0_SC_SIGNAL(out_MULTIPLIER_DATA_MSB_OUT,"out_MULTIPLIER_DATA_MSB_OUT",Tdata_t ); 68 53 69 /******************************************************** 54 70 * Instanciation … … 60 76 (*(_Multiplier->in_NRESET)) (*(in_NRESET)); 61 77 78 INSTANCE0_SC_SIGNAL(_Multiplier, in_MULTIPLIER_DATA_IN_0); 79 INSTANCE0_SC_SIGNAL(_Multiplier, in_MULTIPLIER_DATA_IN_1); 80 INSTANCE0_SC_SIGNAL(_Multiplier, in_MULTIPLIER_NSTALL); 81 82 INSTANCE0_SC_SIGNAL(_Multiplier,out_MULTIPLIER_DATA_LSB_OUT); 83 INSTANCE0_SC_SIGNAL(_Multiplier,out_MULTIPLIER_DATA_MSB_OUT); 62 84 63 85 msg(_("<%s> : Start Simulation ............\n"),name.c_str()); … … 89 111 { 90 112 LABEL("Iteration %d",iteration); 113 114 uint64_t data0 = range<uint64_t>(rand(),_param->_size_data); 115 uint64_t data1 = range<uint64_t>(rand(),_param->_size_data); 116 117 in_MULTIPLIER_DATA_IN_0->write(static_cast<Tdata_t>(data0)); 118 in_MULTIPLIER_DATA_IN_1->write(static_cast<Tdata_t>(data1)); 119 in_MULTIPLIER_NSTALL->write(static_cast<Tcontrol_t>(1)); 120 121 sc_uint<32> res_lsb = 0; 122 sc_uint<32> res_msb = 0; 123 124 switch (_param->_size_data) 125 { 126 case 8 : 127 { 128 if (_param->_sign){ // 0 = signed, 1 = unsigned 129 sc_uint<16> mask = 0xff; 130 sc_uint<16> tmp = (static_cast<sc_uint<16> >(data0)) * (static_cast<sc_uint<16> >(data1)); 131 res_lsb = tmp.range(7,0); 132 res_msb = tmp.range(15,8); 133 } 134 else{ 135 sc_int<8> data_0 = static_cast<sc_int<8> >(data0); 136 sc_int<8> data_1 = static_cast<sc_int<8> >(data1); 137 sc_int<16> tmp = (static_cast<sc_int<16> >(data_0) * 138 static_cast<sc_int<16> >(data_1)); 139 res_lsb = static_cast<Tdata_t>(_param->_mask & tmp); 140 res_msb = static_cast<Tdata_t>(_param->_mask & (tmp>>8)); 141 } 142 break; 143 } 144 case 16 : 145 { 146 if (_param->_sign){ // 0 = signed, 1 = unsigned 147 sc_uint<32> mask = 0xffff; 148 sc_uint<32> tmp = (static_cast<sc_uint<32> >(data0)) * (static_cast<sc_uint<32> >(data1)); 149 res_lsb = tmp.range(15,0); 150 res_msb = tmp.range(31,16); 151 } 152 else{ 153 sc_int<16> data_0 = static_cast<sc_int<16> >(data0); 154 sc_int<16> data_1 = static_cast<sc_int<16> >(data1); 155 sc_int<32> tmp = (static_cast<sc_int<32> >(data_0) * 156 static_cast<sc_int<32> >(data_1)); 157 res_lsb = static_cast<Tdata_t>(_param->_mask & tmp); 158 res_msb = static_cast<Tdata_t>(_param->_mask & (tmp>>16)); 159 160 cout << "data_0 : " << std::hex << data_0 << std::dec << " - dec : " << data_0<< endl; 161 cout << "data_1 : " << std::hex << data_1 << std::dec << " - dec : " << data_1<< endl; 162 cout << "tmp : " << std::hex << tmp << std::dec << " - dec : " << tmp << endl; 163 cout << "res_lsb : " << std::hex << res_lsb << std::dec << endl; 164 cout << "res_msb : " << std::hex << res_msb << std::dec << endl; 165 } 166 break; 167 } 168 case 32 : 169 { 170 if (_param->_sign){ // 0 = signed, 1 = unsigned 171 sc_uint<32> data_0 = static_cast<sc_uint<32> >(data0); 172 sc_uint<32> data_1 = static_cast<sc_uint<32> >(data1); 173 sc_uint<64> tmp = (data0) * (data1); 174 res_lsb = static_cast<Tdata_t>(_param->_mask & tmp); 175 res_msb = static_cast<Tdata_t>(_param->_mask & (tmp>>32)); 176 177 cout << "tmp : " << std::hex << tmp << std::dec << endl; 178 } 179 else{ 180 sc_int<32> data_0 = static_cast<sc_int<32> >(data0); 181 sc_int<32> data_1 = static_cast<sc_int<32> >(data1); 182 sc_int<64> tmp = (data0) * (data1); 183 res_lsb = static_cast<Tdata_t>(_param->_mask & tmp); 184 res_msb = static_cast<Tdata_t>(_param->_mask & (tmp>>32)); 185 186 cout << "data_0 : " << std::hex << data_0 << std::dec << endl; 187 cout << "data_1 : " << std::hex << data_1 << std::dec << endl; 188 cout << "tmp : " << std::hex << tmp << std::dec << endl; 189 cout << "res_lsb : " << std::hex << res_lsb << std::dec << endl; 190 cout << "res_msb : " << std::hex << res_msb << std::dec << endl; 191 192 193 } 194 break; 195 } 196 // case 64 : 197 // { 198 // if (_param->_sign){ 0 = signed, 1 = unsigned 199 // uint64_t tmp = static_cast<uint64_t>(data0) * static_cast<uint64_t>(data1); 200 // res_lsb = tmp; 201 // } 202 // else{ 203 // int64_t tmp = static_cast< int64_t>(data0) * static_cast< int64_t>(data1); 204 // res_lsb = 0xffffffffffffffff&tmp; 205 // } 206 // break; 207 // } 208 default : 209 { 210 TEST_KO("Invalid size for the test."); 211 } 212 } 213 SC_START(_param->_latency); 214 TEST(Tdata_t,out_MULTIPLIER_DATA_LSB_OUT->read(),res_lsb); 215 TEST(Tdata_t,out_MULTIPLIER_DATA_MSB_OUT->read(),res_msb); 91 216 92 217 SC_START(1); … … 104 229 delete in_CLOCK; 105 230 delete in_NRESET; 231 232 DELETE0_SC_SIGNAL( in_MULTIPLIER_DATA_IN_0); 233 DELETE0_SC_SIGNAL( in_MULTIPLIER_DATA_IN_1); 234 DELETE0_SC_SIGNAL( in_MULTIPLIER_NSTALL); 235 DELETE0_SC_SIGNAL(out_MULTIPLIER_DATA_LSB_OUT); 236 DELETE0_SC_SIGNAL(out_MULTIPLIER_DATA_MSB_OUT); 237 106 238 } 107 239 #endif
Note: See TracChangeset
for help on using the changeset viewer.