Hi all,
I'm getting problem in TLM read command .Please check the code once is am doing right ?Then why it's not reading correct value's?
In read function.....i'm going through b_transport....
tlm::tlm_generic_payload* trans=new tlm::tlm_generic_payload;
sc_time delay=sc_time(0,SC_NS);
trans->set_command(tlm::TLM_READ_COMMAND);
trans->set_address(addr);
if((dmi_valid)&&(addr >=dmi_data.get_start_address()) && (addr<=dmi_data.get_end_address())){
SC_REPORT_INFO_VERB("Traffic_injector","dmi access",2);
}else {
SC_REPORT_INFO_VERB("traffic injector","READ:normal access....",2);
trans->set_data_ptr(reinterpret_cast<unsigned char*>(data));
trans->set_data_length(length);
trans->set_byte_enable_ptr(0);
trans->set_response_status(tlm::TLM_INCOMPLETE_RESPONSE);
initiator_socket->b_transport(*trans,delay);
if(trans->is_response_error()){
SC_REPORT_ERROR("TLM-2","response error from b_transport");
}
unsigned char* data_ptr=trans->get_data_ptr();
In b_transport ....
tlm::tlm_command cmd=trans.get_command();
uint8_t addr=trans.get_address();
unsigned char* data_ptr=trans.get_data_ptr();
unsigned int len=trans.get_data_length();
if(cmd==tlm::TLM_READ_COMMAND){
bool flag=(bool)((device_rx_data[addr]>>len)& 0x1);
data_ptr=reinterpret_cast<unsigned char*>(&flag);
}
In b_transport it setting correct values to data_ptr (as am checked in debugger).But in read
unsigned char* data_ptr=trans->get_data_ptr();
am getting always zero...Is am doing right casting ?If not tell correct path?
Thanks,
Pruthvi