P4C
The P4 Compiler
Loading...
Searching...
No Matches
mau_spec.h
1
18
19
#ifndef BACKENDS_TOFINO_BF_P4C_MAU_MAU_SPEC_H_
20
#define BACKENDS_TOFINO_BF_P4C_MAU_MAU_SPEC_H_
21
22
#include "ir/ir.h"
23
24
// device-specific parameters for MAU/PPU.
25
using namespace
P4
;
26
27
class
IMemSpec
{
28
public
:
29
virtual
int
rows()
const
= 0;
// pure virtual
30
virtual
int
colors()
const
= 0;
// pure virtual
31
virtual
int
color_bits()
const
= 0;
// pure virtual
32
virtual
int
address_bits()
const
= 0;
33
virtual
int
map_table_entries()
const
= 0;
34
};
35
36
class
TofinoIMemSpec
:
public
IMemSpec
{
37
int
rows()
const override
;
38
int
colors()
const override
;
39
int
color_bits()
const override
;
40
int
address_bits()
const override
;
41
int
map_table_entries()
const override
;
42
};
43
44
class
IXBarSpec
{
45
public
:
46
/* --- common --- */
47
virtual
int
ternaryBytesPerGroup()
const
= 0;
// pure virtual
48
virtual
int
ternaryGroups()
const
= 0;
// pure virtual
49
50
// the next two: support for "legacy code" [as of Nov. 10 2022] that gets these via IXBarSpec
51
virtual
int
tcam_rows()
const
= 0;
// pure virtual
52
virtual
int
tcam_columns()
const
= 0;
// pure virtual
53
54
/* --- Tofino[1, 2] --- */
55
virtual
int
byteGroups()
const
;
56
virtual
int
exactBytesPerGroup()
const
;
57
virtual
int
exactGroups()
const
;
58
virtual
int
fairModeHashBits()
const
;
59
virtual
int
gatewaySearchBytes()
const
;
60
virtual
int
hashDistBits()
const
;
61
virtual
int
hashDistExpandBits()
const
;
62
virtual
int
hashDistMaxMaskBits()
const
;
63
virtual
int
hashDistSlices()
const
;
64
virtual
int
hashDistUnits()
const
;
65
virtual
int
hashGroups()
const
;
66
virtual
int
hashIndexGroups()
const
;
67
virtual
int
hashMatrixSize()
const
;
68
virtual
int
hashParityBit()
const
;
69
virtual
int
hashSingleBits()
const
;
70
virtual
int
hashTables()
const
;
71
virtual
int
lpfInputBytes()
const
;
72
virtual
int
maxHashBits()
const
;
73
virtual
int
meterAluHashBits()
const
;
74
virtual
int
meterAluHashParityByteStart()
const
;
75
virtual
int
meterPrecolorSize()
const
;
76
virtual
int
ramLineSelectBits()
const
;
77
virtual
int
ramSelectBitStart()
const
;
78
virtual
int
repeatingConstraintSect()
const
;
79
virtual
int
resilientModeHashBits()
const
;
80
virtual
int
ternaryBytesPerBigGroup()
const
;
81
virtual
int
tofinoMeterAluByteOffset()
const
;
82
83
virtual
int
getExactOrdBase(
int
group)
const
= 0;
84
virtual
int
getTernaryOrdBase(
int
group)
const
= 0;
85
virtual
int
exactMatchTotalBytes()
const
= 0;
86
virtual
int
ternaryMatchTotalBytes()
const
= 0;
87
virtual
int
xcmpMatchTotalBytes()
const
= 0;
88
};
89
90
// TU-local constants to avoid circular dependencies between IXBarSpec subclasses
91
// and their respective MauSpec subclasses, while still preserving DRY compliance.
92
static
constexpr
int
Tofino_tcam_rows = 12;
93
static
constexpr
int
Tofino_tcam_columns = 2;
94
95
class
MauSpec
{
96
public
:
97
virtual
const
IXBarSpec
&getIXBarSpec()
const
= 0;
// pure virtual
98
virtual
const
IMemSpec
&getIMemSpec()
const
= 0;
// pure virtual
99
100
// Called at the end of table rewriting in TablePlacement::TransformTables to do
101
// any target-specific fixups needed
102
virtual
IR::Node
*postTransformTables(IR::MAU::Table *
const
table)
const
;
103
104
// The next 4 lines: correct data for Tof.1 + Tof.2 + Tof.3; must override elsewhere for Tof.5
105
virtual
int
tcam_rows()
const
;
106
virtual
int
tcam_columns()
const
;
107
virtual
int
tcam_width()
const
;
108
virtual
int
tcam_depth()
const
;
109
};
110
111
class
TofinoIXBarSpec :
public
IXBarSpec
{
112
public
:
113
TofinoIXBarSpec();
114
115
int
byteGroups()
const override
;
116
117
int
hashDistMaxMaskBits()
const override
;
118
119
int
hashMatrixSize()
const override
;
120
121
int
ternaryGroups()
const override
;
122
123
int
exactBytesPerGroup()
const override
;
124
int
exactGroups()
const override
;
125
int
fairModeHashBits()
const override
;
126
int
gatewaySearchBytes()
const override
;
127
int
hashDistBits()
const override
;
128
int
hashDistExpandBits()
const override
;
129
int
hashDistSlices()
const override
;
130
int
hashDistUnits()
const override
;
131
int
hashGroups()
const override
;
132
133
int
hashIndexGroups()
const override
;
134
/* groups of 10 bits for indexing */
135
136
int
hashParityBit()
const override
;
137
/* If enabled reserved parity bit position */
138
139
int
hashSingleBits()
const override
;
140
/* top 12 bits of hash table individually */
141
142
int
hashTables()
const override
;
143
int
lpfInputBytes()
const override
;
144
int
maxHashBits()
const override
;
145
int
meterAluHashBits()
const override
;
146
int
meterAluHashParityByteStart()
const override
;
147
int
meterPrecolorSize()
const override
;
148
int
ramLineSelectBits()
const override
;
149
int
ramSelectBitStart()
const override
;
150
int
repeatingConstraintSect()
const override
;
151
int
resilientModeHashBits()
const override
;
152
int
ternaryBytesPerBigGroup()
const override
;
153
int
ternaryBytesPerGroup()
const override
;
154
int
tofinoMeterAluByteOffset()
const override
;
155
156
// the next two: support for "legacy code" [as of Nov. 10 2022] that gets these via IXBarSpec
157
int
tcam_rows()
const override
;
158
int
tcam_columns()
const override
;
159
160
int
getExactOrdBase
(
int
group)
const override
;
161
int
getTernaryOrdBase(
int
group)
const override
;
162
163
int
exactMatchTotalBytes()
const override
;
164
int
ternaryMatchTotalBytes()
const override
;
165
int
xcmpMatchTotalBytes()
const override
;
166
};
167
168
class
TofinoMauSpec :
public
MauSpec
{
169
const
TofinoIXBarSpec
ixbar_;
170
const
TofinoIMemSpec
imem_;
171
172
public
:
173
TofinoMauSpec() =
default
;
174
const
IXBarSpec
&getIXBarSpec()
const override
;
175
const
IMemSpec
&getIMemSpec()
const override
;
176
};
177
178
class
JBayMauSpec :
public
MauSpec
{
179
const
TofinoIXBarSpec
ixbar_;
180
const
TofinoIMemSpec
imem_;
181
182
public
:
183
JBayMauSpec() =
default
;
184
const
IXBarSpec
&getIXBarSpec()
const override
;
185
const
IMemSpec
&getIMemSpec()
const override
;
186
};
187
188
#endif
/* BACKENDS_TOFINO_BF_P4C_MAU_MAU_SPEC_H_ */
IMemSpec
Definition
mau_spec.h:27
IXBarSpec
Definition
mau_spec.h:44
MauSpec
Definition
mau_spec.h:95
P4::IR::Node
Definition
node.h:94
TofinoIMemSpec
Definition
mau_spec.h:36
TofinoIXBarSpec
Definition
mau_spec.h:111
TofinoIXBarSpec::getExactOrdBase
int getExactOrdBase(int group) const override
Definition
tofino/mau_spec.cpp:23
P4
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition
applyOptionsPragmas.cpp:24
backends
tofino
bf-p4c
mau
mau_spec.h
Generated by
1.13.2