scc 2025.09
SystemC components library
lwtr4tlm2.h
1#pragma once
2#include <lwtr/lwtr.h>
3#include <tlm>
4
5namespace lwtr {
6
7template <> 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};
22template <> 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};
36template <> 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};
50template <> 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};
72template <> 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};
86template <> 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
103template <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}
106template <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 dmi_mgr.h:19