1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
// Copyright 2020-2021 Intel Corporation.
//
// This software and the related documents are Intel copyrighted materials,
// and your use of them is governed by the express license under which they
// were provided to you ("License"). Unless the License provides otherwise,
// you may not use, modify, copy, publish, distribute, disclose or transmit
// this software or the related documents without Intel's prior written
// permission.
//
// This software and the related documents are provided as is, with no express
// or implied warranties, other than those that are expressly stated in the
// License.
`resetall
`undefineall
`include "dla_common_types.svh"
`include "dla_pe_array_constants.svh"
interface pe_array_feature_if #(
dla_pe_array_pkg::pe_array_arch_t arch
);
`BLOCK_TYPE(arch.DOT_SIZE, arch.FEATURE_WIDTH, arch.FEATURE_EXPONENT_WIDTH);
block_t [arch.NUM_LANES-1:0][arch.NUM_FEATURES-1:0] data;
modport sender (output data);
modport receiver (input data);
endinterface
interface pe_array_filter_if #(
dla_pe_array_pkg::pe_array_arch_t arch
);
`BLOCK_TYPE_VALID(arch.DOT_SIZE, arch.FILTER_WIDTH, arch.FILTER_EXPONENT_WIDTH);
block_t [arch.NUM_PES-1:0][arch.NUM_FILTERS-1:0] data;
modport sender (output data);
modport receiver (input data);
endinterface
interface pe_array_bias_if #(
dla_pe_array_pkg::pe_array_arch_t arch
);
logic [arch.NUM_PES-1:0][arch.NUM_FILTERS-1:0][BIAS_WIDTH-1:0] data;
modport sender (output data);
modport receiver (input data);
endinterface
interface pe_array_scale_if #(
dla_pe_array_pkg::pe_array_arch_t arch
);
logic [arch.NUM_PES-1:0][arch.NUM_FILTERS-1:0][SCALE_WIDTH-1:0] data;
modport sender (output data);
modport receiver (input data);
endinterface
interface pe_feature_if #(
dla_pe_array_pkg::pe_array_arch_t arch,
int DIM1 = 1,
int DIM2 = 1
);
`BLOCK_TYPE(arch.DOT_SIZE, arch.FEATURE_WIDTH, arch.FEATURE_EXPONENT_WIDTH);
block_t [arch.NUM_FEATURES-1:0] data [DIM1][DIM2];
modport sender(output data);
modport receiver(input data);
endinterface
interface pe_filter_if #(
dla_pe_array_pkg::pe_array_arch_t arch,
int DIM1 = 1,
int DIM2 = 1
);
`BLOCK_TYPE_VALID(arch.DOT_SIZE, arch.FILTER_WIDTH, arch.FILTER_EXPONENT_WIDTH);
block_t [arch.NUM_FILTERS-1:0] data [DIM1][DIM2];
modport sender(output data);
modport receiver(input data);
endinterface
interface pe_bias_if #(
dla_pe_array_pkg::pe_array_arch_t arch,
int DIM1 = 1,
int DIM2 = 1
);
logic [arch.NUM_FILTERS-1:0][BIAS_WIDTH-1:0] data [DIM1][DIM2];
modport sender(output data);
modport receiver(input data);
endinterface
interface pe_scale_if #(
dla_pe_array_pkg::pe_array_arch_t arch,
int DIM1 = 1,
int DIM2 = 1
);
logic [arch.NUM_FILTERS-1:0][SCALE_WIDTH-1:0] data [DIM1][DIM2];
modport sender(output data);
modport receiver(input data);
endinterface
interface pe_request_if #(
dla_pe_array_pkg::pe_array_arch_t arch,
int DIM1 = 1,
int DIM2 = 1
);
typedef struct packed {
logic valid;
logic init_accumulator;
logic flush_accumulator;
logic [arch.ELTWISE_MULT_CMD_WIDTH-1:0] eltwise_mult_cmd;
logic [arch.RESULT_ID_WIDTH-1:0] result_id;
} Type;
Type data [DIM1][DIM2];
modport sender(output data);
modport receiver(input data);
endinterface
interface pe_result_if #(
dla_pe_array_pkg::pe_array_arch_t arch,
int DIM1 = 1,
int DIM2 = 1
);
typedef struct packed {
logic valid;
logic [arch.NUM_RESULTS_PER_CYCLE-1:0][arch.NUM_FEATURES-1:0][RESULT_WIDTH-1:0] result;
} Type;
Type data [DIM1][DIM2];
modport sender(output data);
modport receiver(input data);
endinterface
|