24 sc_core::sc_time last_reset;
25 sc_core::sc_event reset_ev;
29 tlm_utils::simple_initiator_socket<sifive_test, DEFAULT_TLM_BUSWIDTH> initiator_socket;
30 tlm_utils::simple_target_socket<sifive_test, DEFAULT_TLM_BUSWIDTH> target_socket;
31 sc_core::sc_port<sc_core::sc_signal_inout_if<bool>, 0, sc_core::SC_ZERO_OR_MORE_BOUND> reset;
33 sifive_test(
const sc_core::sc_module_name& name, sc_core::sc_object*
o)
39 , last_reset(sc_core::SC_ZERO_TIME)
40 , q_socket(
"mem", inst)
41 , initiator_socket(
"initiator_socket")
42 , target_socket(
"target_socket")
45 initiator_socket.bind(q_socket);
46 target_socket.register_b_transport(
this, &sifive_test::b_transport);
52 void before_end_of_elaboration()
override { QemuDevice::before_end_of_elaboration(); }
54 void end_of_elaboration()
override
56 QemuDevice::set_sysbus_as_parent_bus();
57 QemuDevice::end_of_elaboration();
59 q_socket.init(
sbd, 0);
64 if (last_reset == sc_core::sc_time_stamp())
return;
65 SCP_INFO(())(
"Initiate Reset sequence");
66 for (
int i = 0;
i < reset.size();
i++) {
69 for (
int i = 0;
i < reset.size();
i++) {
72 last_reset = sc_core::sc_time_stamp();
75 void b_transport(tlm::tlm_generic_payload&
trans, sc_core::sc_time& delay)
77 initiator_socket->b_transport(
trans, delay);
78 sc_core::wait(sc_core::SC_ZERO_TIME);
79 if (
trans.get_address() == 0x0) {
80 reset_ev.notify(sc_core::SC_ZERO_TIME);