17#include "tlm/scc/scv/tlm_extension_recording_registry.h"
19#include <tilelink/tl_tlm.h>
23const std::array<std::string, 3> cmd_str{
"R",
"W",
"I"};
30 case opcode_e::AccessAckData:
31 return "AccessAckData";
32 case opcode_e::PutFullData:
34 case opcode_e::PutPartialData:
35 return "PutPartialData";
36 case opcode_e::AccessAck:
38 case opcode_e::ArithmeticData:
39 return "ArithmeticData";
40 case opcode_e::LogicalData:
42 case opcode_e::Intent:
44 case opcode_e::HintAck:
46 case opcode_e::AcquireBlock:
47 return "AcquireBlock";
48 case opcode_e::AcquirePerm:
52 case opcode_e::GrantData:
54 case opcode_e::GrantAck:
56 case opcode_e::ProbeBlock:
58 case opcode_e::ProbePerm:
60 case opcode_e::ProbeAck:
62 case opcode_e::ProbeAckData:
63 return "ProbeAckData";
64 case opcode_e::Release:
66 case opcode_e::ReleaseData:
68 case opcode_e::ReleaseAck:
83 case param_e::GROW_N2B:
84 return "Grow:N2B (0)";
85 case param_e::GROW_N2T:
86 return "Grow:N2T (1)";
87 case param_e::GROW_B2T:
88 return "Grow:B2T (2)";
89 case param_e::PRUNE_T2B:
90 return "Prune:T2B (0)";
91 case param_e::PRUNE_T2N:
92 return "Prune:T2N (1)";
93 case param_e::PRUNE_B2N:
94 return "Prune:B2N (2)";
95 case param_e::REP_T2T:
96 return "Report:T2T (0)";
97 case param_e::REP_B2B:
98 return "Report:B2B (1)";
99 case param_e::REP_N2N:
100 return "Report:N2N (2)";
106std::ostream& operator<<(std::ostream& os,
const tlm::tlm_generic_payload& t) {
107 os <<
"CMD:" << cmd_str[t.get_command()] <<
", "
108 <<
"ADDR:0x" << std::hex << t.get_address() <<
", TXLEN:0x" << t.get_data_length();
109 if(
auto e = t.get_extension<tilelink::tilelink_extension>()) {
111 <<
"OPC:0x" << std::hex << static_cast<unsigned>(e->get_opcode()) <<
"PARAM:" << e->get_param();
113 os <<
" [ptr:" << &t <<
"]";
117using namespace tlm::scc::scv;
121 void recordBeginTx(SCVNS scv_tr_handle& handle, tl_protocol_types::tlm_payload_type& trans)
override {
124 handle.record_attribute(
"trans.tl.opcode", std::string(
to_char(ext->get_opcode())));
125 handle.record_attribute(
"trans.tl.param", std::string(
to_char(ext->get_param())));
126 handle.record_attribute(
"trans.tl.source", ext->get_source());
127 handle.record_attribute(
"trans.tl.sink", ext->get_sink());
128 handle.record_attribute(
"trans.tl.corrupt", ext->is_corrupt());
129 handle.record_attribute(
"trans.tl.denied", ext->is_denied());
133 void recordEndTx(SCVNS scv_tr_handle& handle, tl_protocol_types::tlm_payload_type& trans)
override {}
139__attribute__((constructor))
141bool register_extensions() {
143 tlm::scc::scv::tlm_extension_recording_registry<tilelink::tl_protocol_types>::inst().register_ext_rec(
147bool registered = register_extensions();
The TLM transaction extensions recorder interface.
SCV components for AXI/ACE.
const char * to_char(E t)
opcode_e
opcodes of Tilelink.. The encode the opcode (opcode_e[2:0]) and the applicable channels (opcode_e[8] ...
SCC SCV4TLM classes and functions.