HOME       UP       PREV       |ENDOFPACK|

SystemC Non-functional attribute logging:

Power annotation of the TLM2.0 bus multiplexor:

busmux64::busmux64(sc_module_name name, u64_t threshold):
  sc_module_pr(name), 
  targ_socket("targ_socket"), 
  init_socket("init_socket"), 
  threshold(threshold)
{

#ifdef PRAZOR
  op_energy =  PR_PICOJ(8 * 64);
  prazor_energy_t static_power = PR_NANOW(8 * 64);
  pr_static_power(static_power);
  pr_size(PR_MICRON(3),PR_MICRON(10));
#endif

  // Register callbacks for incoming interface method calls
  targ_socket.register_b_transport(this, &busmux64::b_transport);
}


// TLM-2 blocking transport method
void busmux64::b_transport(int id, tlm::tlm_generic_payload &trans, sc_time &delay)
{
  u64_t adr = (u64_t) trans.get_address() & ~(0xFFLLU << 56LLU);
  if (adr < threshold) init_socket[0]->b_transport(trans, delay);
  else 
    {
      u64_t adr = ((u64_t)trans.get_address());
      trans.set_address(adr - threshold);
      init_socket[1]->b_transport(trans, delay);
      trans.set_address(adr);
    }
#ifdef PRAZOR
  pr_dynamic_event(op_energy);
#endif
}

(MPhil: Checkout from /usr/groups/han/cvs/prazor)


52: (C) 2008-11, DJ Greaves, University of Cambridge, Computer Laboratory.