Changeset 116 for trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Multiplier_transition.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/src/Multiplier_transition.cpp
r112 r116 20 20 { 21 21 log_begin(Multiplier,FUNCTION); 22 22 23 // Test if stall 24 if (PORT_READ(in_MULTIPLIER_NSTALL)) 25 { 26 // Pop a slot of array 27 for (uint32_t i=1;i<_pipeline->size();i++) 28 _pipeline->at(i-1)=_pipeline->at(i); 29 30 result_t data; 31 32 switch (_param->_size_data) 33 { 34 case 8 : 35 { 36 if (_param->_sign) // 0 = signed, 1 = unsigned 37 { 38 sc_uint<8> data_0 = static_cast<sc_uint<8> >(PORT_READ(in_MULTIPLIER_DATA_IN_0)); 39 sc_uint<8> data_1 = static_cast<sc_uint<8> >(PORT_READ(in_MULTIPLIER_DATA_IN_1)); 40 sc_uint<16> tmp = (static_cast<sc_uint<16> >(data_0) * 41 static_cast<sc_uint<16> >(data_1)); 42 43 data.LSB = static_cast<Tdata_t>(_param->_mask & tmp); 44 data.MSB = static_cast<Tdata_t>(_param->_mask & (tmp>>8)); 45 46 // std::cout << "uint8 : data_0 : " << std::hex << data_0 << std::dec << std::endl; 47 // std::cout << "uint8 : data_1 : " << std::hex << data_1 << std::dec << std::endl; 48 // std::cout << "uint8 : tmp : " << std::hex << tmp << std::dec << std::endl; 49 // std::cout << "uint8 : lsb : " << std::hex << data.LSB << std::dec << std::endl; 50 // std::cout << "uint8 : msb : " << std::hex << data.MSB << std::dec << std::endl; 51 52 // log_printf(TRACE,Multiplier,FUNCTION," * signed"); 53 // log_printf(TRACE,Multiplier,FUNCTION," * data0 = %llx(%lld)",data_0, data_0); 54 // log_printf(TRACE,Multiplier,FUNCTION," * data1 = %llx(%lld)",data_1, data_1); 55 // log_printf(TRACE,Multiplier,FUNCTION," * res = %llx(%lld)",tmp, tmp); 56 // log_printf(TRACE,Multiplier,FUNCTION," * LSB = %x (%d)",data.LSB, data.LSB); 57 // log_printf(TRACE,Multiplier,FUNCTION," * MSB = %x (%d)",data.MSB, data.MSB); 58 } 59 else 60 { 61 sc_int<8> data_0 = static_cast<sc_int<8> >(PORT_READ(in_MULTIPLIER_DATA_IN_0)); 62 sc_int<8> data_1 = static_cast<sc_int<8> >(PORT_READ(in_MULTIPLIER_DATA_IN_1)); 63 sc_int<16> tmp = (static_cast<sc_int<16> >(data_0) * 64 static_cast<sc_int<16> >(data_1)); 65 66 data.LSB = static_cast<Tdata_t>(_param->_mask & tmp); 67 data.MSB = static_cast<Tdata_t>(_param->_mask & (tmp>>8)); 68 69 // std::cout << "int8 : data_0 : " << std::hex << data_0 << std::dec << std::endl; 70 // std::cout << "int8 : data_1 : " << std::hex << data_1 << std::dec << std::endl; 71 // std::cout << "int8 : tmp : " << std::hex << tmp << std::dec << std::endl; 72 // std::cout << "int8 : lsb : " << std::hex << data.LSB << std::dec << std::endl; 73 // std::cout << "int8 : msb : " << std::hex << data.MSB << std::dec << std::endl; 74 75 // log_printf(TRACE,Multiplier,FUNCTION," * signed"); 76 // log_printf(TRACE,Multiplier,FUNCTION," * data0 = %llx(%lld)",data_0, data_0); 77 // log_printf(TRACE,Multiplier,FUNCTION," * data1 = %llx(%lld)",data_1, data_1); 78 // log_printf(TRACE,Multiplier,FUNCTION," * res = %llx(%lld)",tmp, tmp); 79 // log_printf(TRACE,Multiplier,FUNCTION," * LSB = %x (%d)",data.LSB, data.LSB); 80 // log_printf(TRACE,Multiplier,FUNCTION," * MSB = %x (%d)",data.MSB, data.MSB); 81 } 82 break; 83 } 84 case 16 : 85 { 86 if (_param->_sign) // 0 = signed, 1 = unsigned 87 { 88 sc_uint<16> data_0 = static_cast<sc_uint<16> >(PORT_READ(in_MULTIPLIER_DATA_IN_0)); 89 sc_uint<16> data_1 = static_cast<sc_uint<16> >(PORT_READ(in_MULTIPLIER_DATA_IN_1)); 90 sc_uint<32> tmp = (static_cast<sc_uint<32> >(data_0) * 91 static_cast<sc_uint<32> >(data_1)); 92 93 data.LSB = static_cast<Tdata_t>(_param->_mask & tmp); 94 data.MSB = static_cast<Tdata_t>(_param->_mask & (tmp>>16)); 95 96 // std::cout << "uint16 : data_0 : " << std::hex << data_0 << std::dec << std::endl; 97 // std::cout << "uint16 : data_1 : " << std::hex << data_1 << std::dec << std::endl; 98 // std::cout << "uint16 : tmp : " << std::hex << tmp << std::dec << std::endl; 99 // std::cout << "uint16 : lsb : " << std::hex << data.LSB << std::dec << std::endl; 100 // std::cout << "uint16 : msb : " << std::hex << data.MSB << std::dec << std::endl; 101 102 // log_printf(TRACE,Multiplier,FUNCTION," * signed"); 103 // log_printf(TRACE,Multiplier,FUNCTION," * data0 = %llx(%lld)",data_0, data_0); 104 // log_printf(TRACE,Multiplier,FUNCTION," * data1 = %llx(%lld)",data_1, data_1); 105 // log_printf(TRACE,Multiplier,FUNCTION," * res = %llx(%lld)",tmp, tmp); 106 // log_printf(TRACE,Multiplier,FUNCTION," * LSB = %x (%d)",data.LSB, data.LSB); 107 // log_printf(TRACE,Multiplier,FUNCTION," * MSB = %x (%d)",data.MSB, data.MSB); 108 } 109 else 110 { 111 sc_int<16> data_0 = static_cast<sc_int<16> >(PORT_READ(in_MULTIPLIER_DATA_IN_0)); 112 sc_int<16> data_1 = static_cast<sc_int<16> >(PORT_READ(in_MULTIPLIER_DATA_IN_1)); 113 sc_int<32> tmp = (static_cast<sc_int<32> >(data_0) * 114 static_cast<sc_int<32> >(data_1)); 115 116 data.LSB = static_cast<Tdata_t>(_param->_mask & tmp); 117 data.MSB = static_cast<Tdata_t>(_param->_mask & (tmp>>16)); 118 119 std::cout << "int16 : data_0 : " << std::hex << data_0 << std::dec << " - dec : " << data_0 << std::endl; 120 std::cout << "int16 : data_1 : " << std::hex << data_1 << std::dec << " - dec : " << data_1 << std::endl; 121 std::cout << "int16 : tmp : " << std::hex << tmp << std::dec << " - dec : " << tmp << std::endl; 122 std::cout << "int16 : lsb : " << std::hex << data.LSB << std::dec << std::endl; 123 std::cout << "int16 : msb : " << std::hex << data.MSB << std::dec << std::endl; 124 125 // log_printf(TRACE,Multiplier,FUNCTION," * signed"); 126 // log_printf(TRACE,Multiplier,FUNCTION," * data0 = %llx(%lld)",data_0, data_0); 127 // log_printf(TRACE,Multiplier,FUNCTION," * data1 = %llx(%lld)",data_1, data_1); 128 // log_printf(TRACE,Multiplier,FUNCTION," * res = %llx(%lld)",tmp, tmp); 129 // log_printf(TRACE,Multiplier,FUNCTION," * LSB = %x (%d)",data.LSB, data.LSB); 130 // log_printf(TRACE,Multiplier,FUNCTION," * MSB = %x (%d)",data.MSB, data.MSB); 131 } 132 break; 133 } 134 case 32 : 135 { 136 if (_param->_sign) // 0 = signed, 1 = unsigned 137 { 138 sc_uint<32> data_0 = static_cast<sc_uint<32> >(PORT_READ(in_MULTIPLIER_DATA_IN_0)); 139 sc_uint<32> data_1 = static_cast<sc_uint<32> >(PORT_READ(in_MULTIPLIER_DATA_IN_1)); 140 sc_uint<64> tmp = (static_cast<sc_uint<64> >(data_0) * 141 static_cast<sc_uint<64> >(data_1)); 142 143 data.LSB = static_cast<Tdata_t>(_param->_mask & tmp); 144 data.MSB = static_cast<Tdata_t>(_param->_mask & (tmp>>32)); 145 146 // std::cout << "uint32 : data_0 : " << std::hex << data_0 << std::dec << std::endl; 147 // std::cout << "uint32 : data_1 : " << std::hex << data_1 << std::dec << std::endl; 148 // std::cout << "uint32 : tmp : " << std::hex << tmp << std::dec << std::endl; 149 // std::cout << "uint32 : lsb : " << std::hex << data.LSB << std::dec << std::endl; 150 // std::cout << "uint32 : msb : " << std::hex << data.MSB << std::dec << std::endl; 151 152 // log_printf(TRACE,Multiplier,FUNCTION," * signed"); 153 // log_printf(TRACE,Multiplier,FUNCTION," * data0 = %llx(%lld)",data_0, data_0); 154 // log_printf(TRACE,Multiplier,FUNCTION," * data1 = %llx(%lld)",data_1, data_1); 155 // log_printf(TRACE,Multiplier,FUNCTION," * res = %llx(%lld)",tmp, tmp); 156 // log_printf(TRACE,Multiplier,FUNCTION," * LSB = %x (%d)",data.LSB, data.LSB); 157 // log_printf(TRACE,Multiplier,FUNCTION," * MSB = %x (%d)",data.MSB, data.MSB); 158 } 159 else 160 { 161 sc_int<32> data_0 = static_cast<sc_int<32> >(PORT_READ(in_MULTIPLIER_DATA_IN_0)); 162 sc_int<32> data_1 = static_cast<sc_int<32> >(PORT_READ(in_MULTIPLIER_DATA_IN_1)); 163 sc_int<64> tmp = (static_cast<sc_int<64> >(data_0) * 164 static_cast<sc_int<64> >(data_1)); 165 166 data.LSB = static_cast<Tdata_t>(_param->_mask & tmp); 167 data.MSB = static_cast<Tdata_t>(_param->_mask & (tmp>>32)); 168 169 // std::cout << "int32 : data_0 : " << std::hex << data_0 << std::dec << std::endl; 170 // std::cout << "int32 : data_1 : " << std::hex << data_1 << std::dec << std::endl; 171 // std::cout << "int32 : tmp : " << std::hex << tmp << std::dec << std::endl; 172 // std::cout << "int32 : lsb : " << std::hex << data.LSB << std::dec << std::endl; 173 // std::cout << "int32 : msb : " << std::hex << data.MSB << std::dec << std::endl; 174 175 // log_printf(TRACE,Multiplier,FUNCTION," * signed"); 176 // log_printf(TRACE,Multiplier,FUNCTION," * data0 = %llx(%lld)",data_0, data_0); 177 // log_printf(TRACE,Multiplier,FUNCTION," * data1 = %llx(%lld)",data_1, data_1); 178 // log_printf(TRACE,Multiplier,FUNCTION," * res = %llx(%lld)",tmp, tmp); 179 // log_printf(TRACE,Multiplier,FUNCTION," * LSB = %x (%d)",data.LSB, data.LSB); 180 // log_printf(TRACE,Multiplier,FUNCTION," * MSB = %x (%d)",data.MSB, data.MSB); 181 } 182 break; 183 } 184 default : 185 { 186 break; 187 } 188 } 189 190 _pipeline->at(_param->_latency-1) = data; 191 192 } 193 23 194 #if defined(STATISTICS) or defined(VHDL_TESTBENCH) 24 195 end_cycle (); 25 196 #endif 26 197 27 198 log_end(Multiplier,FUNCTION); 28 199 };
Note: See TracChangeset
for help on using the changeset viewer.