#include "systemc/core/port.hh"
+#include "base/logging.hh"
#include "systemc/core/process.hh"
#include "systemc/core/sensitivity.hh"
#include "systemc/ext/channel/sc_signal_in_if.hh"
finalizeReset(r);
resets.clear();
+
+ switch (portBase->_portPolicy()) {
+ case sc_core::SC_ONE_OR_MORE_BOUND:
+ if (size() == 0)
+ portBase->report_error(
+ "(E109) complete binding failed", "port not bound");
+ break;
+ case sc_core::SC_ALL_BOUND:
+ if (size() < maxSize() || size() < 1) {
+ std::stringstream ss;
+ ss << size() << " actual binds is less than required " <<
+ maxSize();
+ portBase->report_error(
+ "(E109) complete binding failed", ss.str().c_str());
+ }
+ break;
+ case sc_core::SC_ZERO_OR_MORE_BOUND:
+ break;
+ default:
+ panic("Unrecognized port policy %d.", portBase->_portPolicy());
+ }
}
void
::sc_gem5::Port *_gem5Port;
virtual const char *_ifTypeName() const = 0;
+ virtual sc_port_policy _portPolicy() const = 0;
};
template <class IF>
// Disabled
sc_port(const sc_port<IF, N, P> &) {}
sc_port<IF, N, P> &operator = (const sc_port<IF, N, P> &) { return *this; }
+
+ virtual sc_port_policy _portPolicy() const { return P; }
};
} // namespace sc_core