scc  2024.06
SystemC components library
lwtr4tlm2.h
1 #pragma once
2 #include <lwtr/lwtr.h>
3 #include <tlm>
4 
5 namespace lwtr {
6 
7 template <> struct value_converter<tlm::tlm_phase> {
8  static value to_value(tlm::tlm_phase const& v) {
9  if(v == tlm::UNINITIALIZED_PHASE)
10  return "tlm::UNINITIALIZED_PHASE";
11  if(v == tlm::BEGIN_REQ)
12  return "tlm::BEGIN_REQ";
13  if(v == tlm::END_REQ)
14  return "tlm::END_REQ";
15  if(v == tlm::BEGIN_RESP)
16  return "tlm::BEGIN_RESP";
17  if(v == tlm::END_RESP)
18  return "tlm::END_RESP";
19  return value("ILLEGAL");
20  }
21 };
22 template <> struct value_converter<tlm::tlm_sync_enum> {
23  static value to_value(tlm::tlm_sync_enum v) {
24  switch(v) {
25  case tlm::TLM_ACCEPTED:
26  return value("tlm::TLM_ACCEPTED");
27  case tlm::TLM_UPDATED:
28  return value("tlm::TLM_UPDATED");
29  case tlm::TLM_COMPLETED:
30  return value("tlm::TLM_COMPLETED");
31  default:
32  return value("ILLEGAL");
33  }
34  }
35 };
36 template <> struct value_converter<tlm::tlm_command> {
37  static value to_value(tlm::tlm_command v) {
38  switch(v) {
39  case tlm::TLM_READ_COMMAND:
40  return value("tlm::TLM_READ_COMMAND");
41  case tlm::TLM_WRITE_COMMAND:
42  return value("tlm::TLM_WRITE_COMMAND");
43  case tlm::TLM_IGNORE_COMMAND:
44  return value("tlm::TLM_IGNORE_COMMAND");
45  default:
46  return value("ILLEGAL");
47  }
48  }
49 };
50 template <> struct value_converter<tlm::tlm_response_status> {
51  static value to_value(tlm::tlm_response_status v) {
52  switch(v) {
53  case tlm::TLM_OK_RESPONSE:
54  return value("tlm::TLM_OK_RESPONSE");
55  case tlm::TLM_INCOMPLETE_RESPONSE:
56  return value("tlm::TLM_INCOMPLETE_RESPONSE");
57  case tlm::TLM_GENERIC_ERROR_RESPONSE:
58  return value("tlm::TLM_GENERIC_ERROR_RESPONSE");
59  case tlm::TLM_ADDRESS_ERROR_RESPONSE:
60  return value("tlm::TLM_ADDRESS_ERROR_RESPONSE");
61  case tlm::TLM_COMMAND_ERROR_RESPONSE:
62  return value("tlm::TLM_COMMAND_ERROR_RESPONSE");
63  case tlm::TLM_BURST_ERROR_RESPONSE:
64  return value("tlm::TLM_BURST_ERROR_RESPONSE");
65  case tlm::TLM_BYTE_ENABLE_ERROR_RESPONSE:
66  return value("tlm::TLM_BYTE_ENABLE_ERROR_RESPONSE");
67  default:
68  return value("ILLEGAL");
69  }
70  }
71 };
72 template <> struct value_converter<tlm::tlm_gp_option> {
73  static value to_value(tlm::tlm_gp_option v) {
74  switch(v) {
75  case tlm::TLM_MIN_PAYLOAD:
76  return value("tlm::TLM_MIN_PAYLOAD");
77  case tlm::TLM_FULL_PAYLOAD:
78  return value("tlm::TLM_FULL_PAYLOAD");
79  case tlm::TLM_FULL_PAYLOAD_ACCEPTED:
80  return value("tlm::TLM_FULL_PAYLOAD_ACCEPTED");
81  default:
82  return value("ILLEGAL");
83  }
84  }
85 };
86 template <> struct value_converter<tlm::tlm_dmi::dmi_access_e> {
87  static value to_value(tlm::tlm_dmi::dmi_access_e v) {
88  switch(v) {
89  case tlm::tlm_dmi::DMI_ACCESS_NONE:
90  return value("tlm::DMI_ACCESS_NONE");
91  case tlm::tlm_dmi::DMI_ACCESS_READ:
92  return value("tlm::DMI_ACCESS_READ");
93  case tlm::tlm_dmi::DMI_ACCESS_WRITE:
94  return value("tlm::DMI_ACCESS_WRITE");
95  case tlm::tlm_dmi::DMI_ACCESS_READ_WRITE:
96  return value("tlm::DMI_ACCESS_READ_WRITE");
97  default:
98  return value("ILLEGAL");
99  }
100  }
101 };
102 
103 template <class Archive> void record(Archive& ar, tlm::tlm_dmi const& u) {
104  ar& field("start_address", u.get_start_address()) & field("end_address", u.get_end_address()) & field("access", u.get_granted_access());
105 }
106 template <class Archive> void record(Archive& ar, tlm::tlm_generic_payload const& u) {
107  ar& field("command", u.get_command());
108  ar& field("address", u.get_address());
109  // ar & field("data_ptr", u.get_data_ptr());
110  ar& field("data_length", u.get_data_length());
111  if(u.get_data_length() && u.get_data_ptr()) {
112  uint64_t data{0};
113  std::copy(u.get_data_ptr(), u.get_data_ptr() + std::min(u.get_data_length(), 8U), reinterpret_cast<uint8_t*>(&data));
114  ar& field("data", data);
115  }
116  ar& field("response_status", u.get_response_status());
117  ar& field("streaming_width", u.get_streaming_width());
118  // ar & field("byte_enable_ptr", u.get_byte_enable_ptr());
119  ar& field("byte_enable_length", u.get_byte_enable_length());
120  ar& field("dmi_allowed", u.is_dmi_allowed());
121  ar& field("gp_option", u.get_gp_option());
122 }
123 } // namespace lwtr
SystemC TLM.
Definition: cxs_tlm.h:69