1/* 2 * Copyright 2018 Google, Inc. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are 6 * met: redistributions of source code must retain the above copyright 7 * notice, this list of conditions and the following disclaimer; 8 * redistributions in binary form must reproduce the above copyright --- 28 unchanged lines hidden (view full) --- 37#include "systemc/ext/core/sc_interface.hh" 38#include "systemc/ext/core/sc_port.hh" 39 40namespace sc_gem5 41{ 42 43class StaticSensitivityPort; 44class StaticSensitivityFinder; |
45class ResetSensitivityPort; |
46 47class Port; 48 49extern std::list<Port *> allPorts; 50 51class Port 52{ 53 private: 54 ::sc_core::sc_port_base *portBase; 55 56 bool finalized; 57 int _maxSize; 58 int _size; 59 60 void finalizePort(StaticSensitivityPort *port); 61 void finalizeFinder(StaticSensitivityFinder *finder); |
62 void finalizeReset(ResetSensitivityPort *reset); |
63 64 void 65 addInterface(::sc_core::sc_interface *iface) 66 { 67 for (int i = 0; i < _size; i++) { 68 if (getInterface(i) == iface) { 69 std::string msg = 70 csprintf("interface already bound to port: port '%s' (%s)", --- 31 unchanged lines hidden (view full) --- 102 103 ::sc_core::sc_interface *interface; 104 ::sc_core::sc_port_base *port; 105 }; 106 107 struct Sensitivity 108 { 109 Sensitivity(StaticSensitivityPort *port) : |
110 port(port), finder(nullptr), reset(nullptr) |
111 {} 112 113 Sensitivity(StaticSensitivityFinder *finder) : |
114 port(nullptr), finder(finder), reset(nullptr) |
115 {} 116 |
117 Sensitivity(ResetSensitivityPort *reset) : 118 port(nullptr), finder(nullptr), reset(reset) 119 {} 120 |
121 StaticSensitivityPort *port; 122 StaticSensitivityFinder *finder; |
123 ResetSensitivityPort *reset; |
124 }; 125 126 std::vector<Binding *> bindings; 127 std::vector<Sensitivity *> sensitivities; 128 129 public: 130 static Port * 131 fromPort(const ::sc_core::sc_port_base *pb) --- 18 unchanged lines hidden (view full) --- 150 void 151 bind(::sc_core::sc_port_base *port) 152 { 153 bindings.push_back(new Binding(port)); 154 } 155 156 void sensitive(StaticSensitivityPort *port); 157 void sensitive(StaticSensitivityFinder *finder); |
158 void sensitive(ResetSensitivityPort *reset); |
159 160 void finalize(); 161 162 int size() { return _size; } 163 int maxSize() { return _maxSize; } 164}; 165 166} // namespace sc_gem5 167 168#endif // __SYSTEMC_CORE_PORT_HH__ |