44 template <
class Types>
51 template <
class Types>
55 periphClockRateControl->set_mul_div(sys_counter_frq, 1);
58 template <
class Types>
63 panic_if(!gem5CpuCluster,
"Cluster should be of type CortexA76Cluster");
66 template <
class Types>
70 this->rvbaraddr[core]->set_state(0,
addr);
73 template <
class Types>
78 for (
auto &poweron_reset : this->poweron_reset) {
79 poweron_reset->signal_out.set_state(0,
true);
80 poweron_reset->signal_out.set_state(0,
false);
83 this->top_reset.signal_out.set_state(0,
true);
84 this->top_reset.signal_out.set_state(0,
false);
86 this->dbg_reset.signal_out.set_state(0,
true);
87 this->dbg_reset.signal_out.set_state(0,
false);
90 template <
class Types>
95 top_reset(
p.
name +
".top_reset", 0),
96 dbg_reset(
p.
name +
".dbg_reset", 0),
97 model_reset(
p.
name +
".model_reset", -1, this),
122 Base::cnthpirq[
i].bind(
cnthpirq[
i]->signal_in);
123 Base::cnthvirq[
i].bind(
cnthvirq[
i]->signal_in);
124 Base::cntpsirq[
i].bind(
cntpsirq[
i]->signal_in);
125 Base::cntvirq[
i].bind(
cntvirq[
i]->signal_in);
126 Base::commirq[
i].bind(
commirq[
i]->signal_in);
128 Base::pmuirq[
i].bind(
pmuirq[
i]->signal_in);
143 template <
class Types>
148 panic_if(Base::amba->transport_dbg(*trans) != trans->get_data_length(),
149 "Didn't send entire functional packet!");
153 template <
class Types>
157 Base::before_end_of_elaboration();
159 auto set_on_change = [
this](
162 auto *pin = gen->get(gem5CpuCluster->getCore(num)->getContext(0));
163 auto handler = [pin](
bool status)
165 status ? pin->raise() : pin->clear();
170 for (
int i = 0;
i < CoreCount;
i++) {
171 set_on_change(*cnthpirq[
i], gem5CpuCluster->params().cnthpirq,
i);
172 set_on_change(*cnthvirq[
i], gem5CpuCluster->params().cnthvirq,
i);
173 set_on_change(*cntpsirq[
i], gem5CpuCluster->params().cntpsirq,
i);
174 set_on_change(*cntvirq[
i], gem5CpuCluster->params().cntvirq,
i);
175 set_on_change(*commirq[
i], gem5CpuCluster->params().commirq,
i);
176 set_on_change(*ctidbgirq[
i], gem5CpuCluster->params().ctidbgirq,
i);
177 set_on_change(*pmuirq[
i], gem5CpuCluster->params().pmuirq,
i);
178 set_on_change(*vcpumntirq[
i], gem5CpuCluster->params().vcpumntirq,
i);
179 set_on_change(*cntpnsirq[
i], gem5CpuCluster->params().cntpnsirq,
i);
183 template <
class Types>
187 if (if_name ==
"redistributor")
188 return *redist.at(idx);
189 else if (if_name ==
"core_reset")
190 return *core_reset.at(idx);
191 else if (if_name ==
"poweron_reset")
192 return *poweron_reset.at(idx);
193 else if (if_name ==
"amba")
195 else if (if_name ==
"top_reset")
197 else if (if_name ==
"dbg_reset")
199 else if (if_name ==
"model_reset")
202 return Base::gem5_getPort(if_name, idx);