summaryrefslogtreecommitdiff
path: root/python/openvino/demo/ip/intel_ai_ip/verilog/dla_pe_array_if.sv
blob: 7169ce28c48bb871e0b1628f544d99b97b3d0965 (plain)
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