| 45 | | vci_command_t cmd; // VCI transaction type |
| 46 | | vci_address_t *address; // pointer to an array of addresses on the target side |
| 47 | | uint32_t *be; // pointer to an array of byte_enable signals |
| 48 | | bool contig; // contiguous addresses (when true) |
| 49 | | vci_data_t *buf; // pointer to the local buffer on the initiator |
| 50 | | uint32_t length; // number of words in the packet |
| 51 | | bool eop; // end of packet marker |
| 52 | | uint32_t srcid; // SRCID VCI |
| 53 | | uint32_t trdid; // TRDID VCI |
| 54 | | uint32_t pktid; // PKTID VCI |
| | 45 | vci_command_t cmd; // VCI transaction type |
| | 46 | vci_address_t *address; // pointer to an array of addresses on the target side |
| | 47 | uint32_t *be; // pointer to an array of byte_enable signals |
| | 48 | bool contig; // contiguous addresses (when true) |
| | 49 | vci_param::vci_data_t *buf; // pointer to the local buffer on the initiator |
| | 50 | uint32_t length; // number of words in the packet |
| | 51 | bool eop; // end of packet marker |
| | 52 | uint32_t srcid; // SRCID VCI |
| | 53 | uint32_t trdid; // TRDID VCI |
| | 54 | uint32_t pktid; // PKTID VCI |
| 149 | | ////////////// constructor |
| 150 | | my_target ( sc_module_name name, |
| 151 | | uint32_t targetIndex, |
| 152 | | sc_time latency): |
| 153 | | p_vci(“vci”,this, &my_target::cmdReceived), |
| 154 | | BaseModule(name) |
| 155 | | { |
| 156 | | m_latency = latency; |
| 157 | | m_index = targetIndex; |
| 158 | | } // end constructor |
| | 147 | ////////////// constructor |
| | 148 | my_target (sc_module_name name, |
| | 149 | uint32_t targetIndex, |
| | 150 | sc_time latency): |
| | 151 | p_vci(“vci”,this, &my_target::cmdReceived), |
| | 152 | BaseModule(name) |
| | 153 | { |
| | 154 | m_latency = latency; |
| | 155 | m_index = targetIndex; |
| | 156 | } // end constructor |
| 166 | | /////////////// call-back function |
| 167 | | sc_time cmdReceived( vci_cmd_t *cmd, |
| 168 | | sc_time cmd_time) |
| 169 | | { |
| 170 | | |
| 171 | | if(cmd->cmd == VCI_CMD_WRITE) { |
| 172 | | for(int i = 0 ; i < length ; i++) m_data[i] = cmd->buf[i]; |
| 173 | | } |
| 174 | | if(cmd->cmd == VCI_CMD_READ) { |
| 175 | | for(int i = 0 ; i < length ; i++) cmd->buf[i] = m_data[i]; |
| 176 | | } |
| 177 | | m_rsp.srcid = cmd->srcid; |
| 178 | | m_rsp.trdid = cmd->trdid; |
| 179 | | m_rsp.pktid = cmd>pktid; |
| 180 | | m_rsp.length = cmd->length; |
| 181 | | m_rsp.error = 0; |
| 182 | | rsp_time = cmd_time + latency; |
| 183 | | p_vci.rspSend(&m_rsp, rsp_time) ; |
| 184 | | return (rsp_time + (sc_time)cmd->length); |
| 185 | | } // end cmdReceived() |
| 186 | | |
| | 164 | /////////////// call-back function |
| | 165 | sc_time cmdReceived(vci_cmd_t *cmd, |
| | 166 | sc_time cmd_time) |
| | 167 | { |
| | 168 | if(cmd->cmd == VCI_CMD_WRITE) { |
| | 169 | for(int i = 0 ; i < length ; i++) m_data[i] = cmd->buf[i]; |
| | 170 | } |
| | 171 | if(cmd->cmd == VCI_CMD_READ) { |
| | 172 | for(int i = 0 ; i < length ; i++) cmd->buf[i] = m_data[i]; |
| | 173 | } |
| | 174 | m_rsp.srcid = cmd->srcid; |
| | 175 | m_rsp.trdid = cmd->trdid; |
| | 176 | m_rsp.pktid = cmd>pktid; |
| | 177 | m_rsp.length = cmd->length; |
| | 178 | m_rsp.error = 0; |
| | 179 | rsp_time = cmd_time + latency; |
| | 180 | p_vci.rspSend(&m_rsp, rsp_time) ; |
| | 181 | return (rsp_time + (sc_time)cmd->length); |
| | 182 | } // end cmdReceived() |