slang-netlist  0.10.0
Loading...
Searching...
No Matches
ReportPorts.hpp
Go to the documentation of this file.
1#pragma once
2
4
5#include "slang/ast/symbols/PortSymbols.h"
6#include "slang/ast/symbols/VariableSymbols.h"
7#include "slang/ast/types/NetType.h"
8
9namespace slang::report {
10
11struct PortInfo {
12 std::string name;
13 ast::ArgumentDirection direction;
14 uint64_t width;
15 std::string netType;
16 SourceLocation location;
17};
18
20class ReportPorts : public ReportVisitorBase<ReportPorts, PortInfo> {
23 static auto portNetTypeName(ast::PortSymbol const &symbol) -> std::string {
24 if (auto const *net = symbol.internalSymbol
25 ? symbol.internalSymbol->as_if<ast::NetSymbol>()
26 : nullptr) {
27 return std::string(net->netType.name);
28 }
29 return "var";
30 }
31
32public:
34
35 auto tableHeader() const -> netlist::Utilities::Row {
36 return {"Direction", "Name", "Width", "Net Type", "Location"};
37 }
38
40 PortInfo const &port) const {
41 table.push_back(netlist::Utilities::Row{
42 std::string(toString(port.direction)), port.name,
43 std::to_string(port.width), port.netType, locationStr(port.location)});
44 }
45
46 void emitJsonItem(JsonWriter &writer, PortInfo const &port) const {
47 writer.startObject();
48 writer.writeProperty("name");
49 writer.writeValue(port.name);
50 writer.writeProperty("direction");
51 writer.writeValue(std::string_view(toString(port.direction)));
52 writer.writeProperty("width");
53 writer.writeValue(port.width);
54 writer.writeProperty("netType");
55 writer.writeValue(port.netType);
56 writer.writeProperty("location");
57 writer.writeValue(locationStr(port.location));
58 writer.endObject();
59 }
60
61 void handle(const ast::PortSymbol &symbol) {
62 auto path = symbol.getHierarchicalPath();
63 if (!nameMatches(path)) {
64 return;
65 }
66 items.push_back(PortInfo{
67 .name = std::move(path),
68 .direction = symbol.direction,
69 .width = symbol.getType().getBitWidth(),
70 .netType = portNetTypeName(symbol),
71 .location = symbol.location,
72 });
73 }
74};
75
76} // namespace slang::report
Visitor for printing port information.
Definition ReportPorts.hpp:20
ReportVisitorBase(ast::Compilation &compilation)
Definition ReportVisitorBase.hpp:60
void handle(const ast::PortSymbol &symbol)
Definition ReportPorts.hpp:61
void emitJsonItem(JsonWriter &writer, PortInfo const &port) const
Definition ReportPorts.hpp:46
void appendItemRows(netlist::Utilities::Table &table, PortInfo const &port) const
Definition ReportPorts.hpp:39
auto tableHeader() const -> netlist::Utilities::Row
Definition ReportPorts.hpp:35
ReportVisitorBase(ast::Compilation &compilation)
Definition ReportVisitorBase.hpp:60
auto locationStr(SourceLocation loc) const -> std::string
Definition ReportVisitorBase.hpp:40
auto nameMatches(std::string_view name) const -> bool
Definition ReportVisitorBase.hpp:46
std::vector< PortInfo > items
Definition ReportVisitorBase.hpp:36
Definition Utilities.hpp:16
Definition ReportDrivers.hpp:12
std::vector< Row > Table
Definition Utilities.hpp:33
std::vector< std::string > Row
Definition Utilities.hpp:32
Definition ReportPorts.hpp:11
std::string name
Definition ReportPorts.hpp:12
SourceLocation location
Definition ReportPorts.hpp:16
uint64_t width
Definition ReportPorts.hpp:14
std::string netType
Definition ReportPorts.hpp:15
ast::ArgumentDirection direction
Definition ReportPorts.hpp:13