|
gem5 [DEVELOP-FOR-25.0]
|
Ports are used to interface objects to each other. More...
#include <port.hh>
Classes | |
| class | UnboundPortException |
Public Member Functions | |
| virtual | ~Port () |
| Virtual destructor due to inheritance. | |
| Port & | getPeer () |
| Return a reference to this port's peer. | |
| const std::string | name () const |
| Return port name (for DPRINTF). | |
| PortID | getId () const |
| Get the port id. | |
| virtual void | bind (Port &peer) |
| Attach to a peer port. | |
| virtual void | unbind () |
| Dettach from a peer port. | |
| bool | isConnected () const |
| Is this port currently connected to a peer? | |
| void | takeOverFrom (Port *old) |
| A utility function to make it easier to swap out ports. | |
Protected Member Functions | |
| void | reportUnbound () const |
| Port (const std::string &_name, PortID _id) | |
| Abstract base class for ports. | |
Protected Attributes | |
| const PortID | id |
| A numeric identifier to distinguish ports in a vector, and set to InvalidPortID in case this port is not part of a vector. | |
| Port * | _peer |
| A pointer to this port's peer. | |
| bool | _connected |
| Whether this port is currently connected to a peer port. | |
Private Attributes | |
| const std::string | portName |
| Descriptive name (for DPRINTF output) | |
|
protected |
Abstract base class for ports.
| _name | Port name including the owners name |
| _id | A port identifier for vector ports |
Definition at line 53 of file port.cc.
References _connected, _peer, id, and portName.
Referenced by gem5::EtherInt::bind(), bind(), gem5::RequestPort::bind(), gem5::ResponsePort::bind(), gem5::ruby::RubyDummyPort::bind(), gem5::SignalSinkPort< State >::bind(), gem5::SignalSourcePort< bool >::bind(), gem5::EtherInt::EtherInt(), getPeer(), gem5::RequestPort::RequestPort(), gem5::RequestPort::RequestPort(), gem5::ResponsePort::ResponsePort(), gem5::ResponsePort::ResponsePort(), gem5::ruby::RubyDummyPort::RubyDummyPort(), sc_gem5::ScExportWrapper< IF >::ScExportWrapper(), sc_gem5::ScInterfaceWrapper< IF >::ScInterfaceWrapper(), sc_gem5::ScPortWrapper< IF >::ScPortWrapper(), gem5::SignalSinkPort< State >::SignalSinkPort(), gem5::SignalSourcePort< bool >::SignalSourcePort(), takeOverFrom(), TestPort::TestPort(), sc_gem5::TlmInitiatorBaseWrapper< 64, svp_gicv3_comms::gicv3_comms_fw_if, svp_gicv3_comms::gicv3_comms_bw_if, 1, sc_core::SC_ONE_OR_MORE_BOUND >::TlmInitiatorBaseWrapper(), and sc_gem5::TlmTargetBaseWrapper< 64, svp_gicv3_comms::gicv3_comms_fw_if, svp_gicv3_comms::gicv3_comms_bw_if, 1, sc_core::SC_ONE_OR_MORE_BOUND >::TlmTargetBaseWrapper().
|
virtual |
|
inlinevirtual |
Attach to a peer port.
Reimplemented in gem5::EtherInt, gem5::RequestPort, gem5::ResponsePort, gem5::ruby::RubyDummyPort, gem5::SignalSinkPort< State >, gem5::SignalSinkPort< bool >, gem5::SignalSourcePort< State >, gem5::SignalSourcePort< bool >, gem5::SignalSourcePort< bool >, gem5::TokenRequestPort, gem5::TokenResponsePort, sc_gem5::ScExportWrapper< IF >, sc_gem5::ScInterfaceWrapper< IF >, sc_gem5::ScPortWrapper< IF >, sc_gem5::TlmInitiatorBaseWrapper< BUSWIDTH, FW_IF, BW_IF, N, POL >, sc_gem5::TlmInitiatorBaseWrapper< 64, svp_gicv3_comms::gicv3_comms_fw_if, svp_gicv3_comms::gicv3_comms_bw_if, 1, sc_core::SC_ONE_OR_MORE_BOUND >, sc_gem5::TlmInitiatorBaseWrapper< 64, svp_gicv3_comms::gicv3_comms_fw_if, svp_gicv3_comms::gicv3_comms_bw_if, 1, sc_core::SC_ONE_OR_MORE_BOUND >, sc_gem5::TlmInitiatorBaseWrapper< BUSWIDTH, tlm::tlm_fw_transport_if< TYPES >, tlm::tlm_bw_transport_if< TYPES >, N, POL >, sc_gem5::TlmInitiatorBaseWrapper< BUSWIDTH, tlm::tlm_fw_transport_if< TYPES >, tlm::tlm_bw_transport_if< TYPES >, N, POL >, sc_gem5::TlmTargetBaseWrapper< BUSWIDTH, FW_IF, BW_IF, N, POL >, sc_gem5::TlmTargetBaseWrapper< 64, svp_gicv3_comms::gicv3_comms_fw_if, svp_gicv3_comms::gicv3_comms_bw_if, 1, sc_core::SC_ONE_OR_MORE_BOUND >, sc_gem5::TlmTargetBaseWrapper< 64, svp_gicv3_comms::gicv3_comms_fw_if, svp_gicv3_comms::gicv3_comms_bw_if, 1, sc_core::SC_ONE_OR_MORE_BOUND >, sc_gem5::TlmTargetBaseWrapper< BUSWIDTH, tlm::tlm_fw_transport_if< TYPES >, tlm::tlm_bw_transport_if< TYPES >, N, POL >, and sc_gem5::TlmTargetBaseWrapper< BUSWIDTH, tlm::tlm_fw_transport_if< TYPES >, tlm::tlm_bw_transport_if< TYPES >, N, POL >.
Definition at line 118 of file port.hh.
References _connected, _peer, and Port().
Referenced by gem5::SignalSinkPort< State >::bind(), gem5::SignalSourcePort< bool >::bind(), sc_gem5::ScExportWrapper< IF >::bind(), sc_gem5::ScInterfaceWrapper< IF >::bind(), sc_gem5::ScPortWrapper< IF >::bind(), sc_gem5::TlmInitiatorBaseWrapper< 64, svp_gicv3_comms::gicv3_comms_fw_if, svp_gicv3_comms::gicv3_comms_bw_if, 1, sc_core::SC_ONE_OR_MORE_BOUND >::bind(), sc_gem5::TlmTargetBaseWrapper< 64, svp_gicv3_comms::gicv3_comms_fw_if, svp_gicv3_comms::gicv3_comms_bw_if, 1, sc_core::SC_ONE_OR_MORE_BOUND >::bind(), gem5::CxxConfigManager::bindPort(), gem5::ResponsePort::responderBind(), takeOverFrom(), TEST(), and TEST().
|
inline |
Get the port id.
Definition at line 114 of file port.hh.
References id.
Referenced by gem5::SnoopFilter::portToMask(), and TEST().
|
inline |
Return a reference to this port's peer.
Definition at line 108 of file port.hh.
Referenced by gem5::X86ISA::IntResponsePort< Device >::recvAtomic(), takeOverFrom(), TEST(), and TEST().
|
inline |
Is this port currently connected to a peer?
Definition at line 133 of file port.hh.
References _connected.
Referenced by gem5::CxxConfigManager::bindPort(), gem5::BaseCPU::takeOverFrom(), takeOverFrom(), TEST(), TEST(), TEST(), TEST(), TEST(), and gem5::RequestPort::unbind().
|
inline |
Return port name (for DPRINTF).
Definition at line 111 of file port.hh.
References portName.
Referenced by gem5::TokenRequestPort::acquireTokens(), gem5::RequestPort::addTrace(), gem5::SignalSinkPort< State >::bind(), gem5::SignalSourcePort< bool >::bind(), gem5::TokenResponsePort::bind(), sc_gem5::ScExportWrapper< IF >::bind(), sc_gem5::ScInterfaceWrapper< IF >::bind(), sc_gem5::ScPortWrapper< IF >::bind(), sc_gem5::TlmInitiatorBaseWrapper< 64, svp_gicv3_comms::gicv3_comms_fw_if, svp_gicv3_comms::gicv3_comms_bw_if, 1, sc_core::SC_ONE_OR_MORE_BOUND >::bind(), gem5::SimpleCache::CPUSidePort::CPUSidePort(), gem5::SimpleMemobj::CPUSidePort::CPUSidePort(), gem5::TimingSimpleCPU::DcachePort::DcachePort(), gem5::TraceCPU::DcachePort::DcachePort(), gem5::DmaPort::DmaPort(), gem5::GUPSGen::GenPort::GenPort(), gem5::ResponsePortWrapper::getAddrRanges(), gem5::ComputeUnit::GMTokenPort::GMTokenPort(), gem5::ProtocolTester::GMTokenPort::GMTokenPort(), gem5::ruby::GPUCoalescer::GMTokenPort::GMTokenPort(), gem5::TokenRequestPort::haveTokens(), gem5::TimingSimpleCPU::IcachePort::IcachePort(), gem5::TraceCPU::IcachePort::IcachePort(), gem5::ThreadBridge::IncomingPort::IncomingPort(), gem5::SnoopFilter::lookupRequest(), gem5::memory::MemCtrl::MemoryPort::MemoryPort(), gem5::SimpleCache::MemSidePort::MemSidePort(), gem5::SimpleMemobj::MemSidePort::MemSidePort(), gem5::operator<<(), gem5::ThreadBridge::OutgoingPort::OutgoingPort(), gem5::ArmISA::TableWalker::Port::Port(), gem5::QueuedRequestPort::QueuedRequestPort(), gem5::QueuedResponsePort::QueuedResponsePort(), gem5::ResponsePortWrapper::recvAtomic(), gem5::X86ISA::IntResponsePort< Device >::recvAtomic(), gem5::ResponsePort::recvAtomicBackdoor(), gem5::RequestPort::recvAtomicSnoop(), gem5::ResponsePortWrapper::recvFunctional(), gem5::RequestPort::recvFunctionalSnoop(), gem5::ResponsePort::recvMemBackdoorReq(), gem5::ProtocolTester::SeqPort::recvReqRetry(), gem5::RequestPortWrapper::recvReqRetry(), gem5::RubyDirectedTester::CpuPort::recvReqRetry(), gem5::RubyTester::CpuPort::recvReqRetry(), gem5::ResponsePortWrapper::recvRespRetry(), gem5::RequestPort::recvRetrySnoopResp(), gem5::CoherentXBar::recvTimingReq(), gem5::HMCController::recvTimingReq(), gem5::NoncoherentXBar::recvTimingReq(), gem5::ResponsePortWrapper::recvTimingReq(), gem5::CoherentXBar::recvTimingResp(), gem5::NoncoherentXBar::recvTimingResp(), gem5::RequestPortWrapper::recvTimingResp(), gem5::ruby::RubyPort::MemRequestPort::recvTimingResp(), gem5::RequestPort::recvTimingSnoopReq(), gem5::CoherentXBar::recvTimingSnoopResp(), gem5::ResponsePort::recvTimingSnoopResp(), gem5::TokenRequestPort::recvTokens(), reportUnbound(), gem5::PortTerminator::ReqPort::ReqPort(), gem5::RequestPort::RequestPort(), gem5::RequestPort::RequestPort(), gem5::RequestPortWrapper::RequestPortWrapper(), gem5::ResponsePort::ResponsePort(), gem5::ResponsePort::ResponsePort(), gem5::ResponsePortWrapper::ResponsePortWrapper(), gem5::PortTerminator::RespPort::RespPort(), sc_gem5::ScExportWrapper< IF >::ScExportWrapper(), sc_gem5::ScInterfaceWrapper< IF >::ScInterfaceWrapper(), sc_gem5::ScPortWrapper< IF >::ScPortWrapper(), gem5::CoherentXBar::SnoopRespPort::SnoopRespPort(), gem5::SpatterGen::SpatterGenPort::SpatterGenPort(), gem5::TokenRequestPort::TokenRequestPort(), gem5::TokenResponsePort::TokenResponsePort(), gem5::BaseTrafficGen::TrafficGenPort::TrafficGenPort(), gem5::ResponsePort::tryTiming(), gem5::RequestPort::unbind(), gem5::SnoopFilter::updateResponse(), gem5::SnoopFilter::updateSnoopForward(), and gem5::SnoopFilter::updateSnoopResponse().
|
protected |
Definition at line 60 of file port.cc.
Referenced by gem5::RequestPort::sendAtomic(), gem5::RequestPort::sendAtomicBackdoor(), gem5::ResponsePort::sendAtomicSnoop(), gem5::RequestPort::sendFunctional(), gem5::ResponsePort::sendFunctionalSnoop(), gem5::RequestPort::sendMemBackdoorReq(), gem5::ResponsePort::sendRetryReq(), gem5::RequestPort::sendRetryResp(), gem5::ResponsePort::sendRetrySnoopResp(), gem5::RequestPort::sendTimingReq(), gem5::ResponsePort::sendTimingResp(), gem5::ResponsePort::sendTimingSnoopReq(), gem5::RequestPort::sendTimingSnoopResp(), and gem5::RequestPort::tryTiming().
|
inline |
A utility function to make it easier to swap out ports.
Definition at line 137 of file port.hh.
References bind(), getPeer(), isConnected(), Port(), and unbind().
Referenced by gem5::BaseCPU::takeOverFrom(), gem5::BaseMMU::takeOverFrom(), and TEST().
|
inlinevirtual |
Dettach from a peer port.
Reimplemented in gem5::EtherInt, gem5::RequestPort, gem5::ResponsePort, gem5::ruby::RubyDummyPort, gem5::SignalSinkPort< State >, gem5::SignalSinkPort< bool >, gem5::SignalSourcePort< State >, gem5::SignalSourcePort< bool >, gem5::SignalSourcePort< bool >, gem5::TokenRequestPort, gem5::TokenResponsePort, sc_gem5::ScExportWrapper< IF >, sc_gem5::ScInterfaceWrapper< IF >, sc_gem5::ScPortWrapper< IF >, sc_gem5::TlmInitiatorBaseWrapper< BUSWIDTH, FW_IF, BW_IF, N, POL >, sc_gem5::TlmInitiatorBaseWrapper< 64, svp_gicv3_comms::gicv3_comms_fw_if, svp_gicv3_comms::gicv3_comms_bw_if, 1, sc_core::SC_ONE_OR_MORE_BOUND >, sc_gem5::TlmInitiatorBaseWrapper< 64, svp_gicv3_comms::gicv3_comms_fw_if, svp_gicv3_comms::gicv3_comms_bw_if, 1, sc_core::SC_ONE_OR_MORE_BOUND >, sc_gem5::TlmInitiatorBaseWrapper< BUSWIDTH, tlm::tlm_fw_transport_if< TYPES >, tlm::tlm_bw_transport_if< TYPES >, N, POL >, sc_gem5::TlmInitiatorBaseWrapper< BUSWIDTH, tlm::tlm_fw_transport_if< TYPES >, tlm::tlm_bw_transport_if< TYPES >, N, POL >, sc_gem5::TlmTargetBaseWrapper< BUSWIDTH, FW_IF, BW_IF, N, POL >, sc_gem5::TlmTargetBaseWrapper< 64, svp_gicv3_comms::gicv3_comms_fw_if, svp_gicv3_comms::gicv3_comms_bw_if, 1, sc_core::SC_ONE_OR_MORE_BOUND >, sc_gem5::TlmTargetBaseWrapper< 64, svp_gicv3_comms::gicv3_comms_fw_if, svp_gicv3_comms::gicv3_comms_bw_if, 1, sc_core::SC_ONE_OR_MORE_BOUND >, sc_gem5::TlmTargetBaseWrapper< BUSWIDTH, tlm::tlm_fw_transport_if< TYPES >, tlm::tlm_bw_transport_if< TYPES >, N, POL >, and sc_gem5::TlmTargetBaseWrapper< BUSWIDTH, tlm::tlm_fw_transport_if< TYPES >, tlm::tlm_bw_transport_if< TYPES >, N, POL >.
Definition at line 126 of file port.hh.
References _connected, and _peer.
Referenced by gem5::ResponsePort::responderUnbind(), takeOverFrom(), TEST(), gem5::RequestPort::unbind(), gem5::SignalSinkPort< State >::unbind(), and gem5::SignalSourcePort< bool >::unbind().
|
protected |
Whether this port is currently connected to a peer port.
Definition at line 90 of file port.hh.
Referenced by gem5::EtherInt::bind(), bind(), isConnected(), Port(), gem5::EtherInt::unbind(), and unbind().
|
protected |
|
protected |
A numeric identifier to distinguish ports in a vector, and set to InvalidPortID in case this port is not part of a vector.
Definition at line 79 of file port.hh.
Referenced by gem5::ComputeUnit::DataPort::DataPort(), gem5::ComputeUnit::DTLBPort::DTLBPort(), getId(), gem5::ComputeUnit::GMTokenPort::GMTokenPort(), gem5::ProtocolTester::GMTokenPort::GMTokenPort(), gem5::ruby::GPUCoalescer::GMTokenPort::GMTokenPort(), gem5::EtherSwitch::Interface::Interface(), gem5::ruby::AbstractController::MemoryPort::MemoryPort(), gem5::ruby::RubyPort::MemResponsePort::MemResponsePort(), Port(), gem5::EtherSwitch::Interface::PortFifoEntry::PortFifoEntry(), gem5::ResponsePort::ResponsePort(), sc_gem5::ScExportWrapper< IF >::ScExportWrapper(), sc_gem5::ScInterfaceWrapper< IF >::ScInterfaceWrapper(), and sc_gem5::ScPortWrapper< IF >::ScPortWrapper().
|
private |