summaryrefslogtreecommitdiff
path: root/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_pkg.sv
diff options
context:
space:
mode:
Diffstat (limited to 'python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_pkg.sv')
-rw-r--r--python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_pkg.sv134
1 files changed, 134 insertions, 0 deletions
diff --git a/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_pkg.sv b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_pkg.sv
new file mode 100644
index 0000000..a7e2e46
--- /dev/null
+++ b/python/openvino/demo/ip/intel_ai_ip/verilog/dla_lt_pkg.sv
@@ -0,0 +1,134 @@
+// Copyright 2020-2024 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
+`default_nettype none
+
+package dla_lt_pkg;
+
+ import dla_common_pkg::*;
+
+ function int calc_max_partitions;
+ input int height, width, channels, stride_height, stride_width, elem_per_ddr;
+ static int max_s[1:0] = '{default :'0};
+ static int init_s[1:0] = '{default :'0};
+ static int distance = 0;
+ static int partitions = 0;
+ static int s_w = 0;
+ static int s_h = 0;
+ static int in_w = 0;
+ static int in_h = 0;
+ static int c = 0;
+ static int h = 0;
+ static int w = 0;
+ begin
+
+ if (elem_per_ddr > height * width * channels)
+ elem_per_ddr = height * width * channels - 1;
+ for (integer i = 0; i < (height * width * channels); i++)
+ begin
+ if (i % elem_per_ddr == 0)
+ begin
+ distance = max_s[0] - init_s[0] + ((max_s[1] - init_s[1]) * (width / stride_width));
+ partitions = (distance > partitions) ? distance : partitions;
+ init_s[0] = s_w;
+ init_s[1] = s_h;
+ max_s = init_s;
+ end
+
+ if (s_w > max_s[0])
+ begin
+ max_s[0] = s_w;
+ end
+
+ if (s_h > max_s[1])
+ begin
+ max_s[1] = s_h;
+ end
+
+ c += 1;
+
+ if (c >= channels)
+ begin
+ c = 0;
+ w += 1;
+ in_w += 1;
+ end
+
+ if (w >= width)
+ begin
+ w = 0;
+ in_w = 0;
+ s_w = 0;
+ h += 1;
+ in_h += 1;
+ end
+
+ if (h >= height)
+ begin
+ h = 0;
+ s_h = 0;
+ in_h = 0;
+ end
+
+ if (in_w >= stride_width)
+ begin
+ in_w = 0;
+ s_w += 1;
+ end
+
+ if (in_h >= stride_height)
+ begin
+ in_h = 0;
+ s_h += 1;
+ end
+ end
+
+ calc_max_partitions = (partitions + 1) < 2? 2 : (partitions + 1);
+ end
+ endfunction
+
+ typedef struct {
+ int ENABLE_LT;
+ int DATA_ELEMENT_WIDTH;
+ int CNT_BITS;
+ int DO_U8_CONV;
+ int DDR_BYTES;
+ int CONFIG_BYTES;
+ int MAX_CHANNELS;
+ int MAX_FEATURE_HEIGHT;
+ int MAX_FEATURE_WIDTH;
+ int MAX_FEATURE_DEPTH;
+ int MAX_STRIDE_HEIGHT;
+ int MAX_STRIDE_WIDTH;
+ int MAX_STRIDE_DEPTH;
+ int CVEC;
+ int MAX_PAD_FRONT;
+ int MAX_PAD_LEFT;
+ int MAX_PAD_TOP;
+ int MAX_FILTER_HEIGHT;
+ int MAX_FILTER_WIDTH;
+ int MAX_FILTER_DEPTH;
+ int MAX_DILATION_WIDTH;
+ int MAX_DILATION_HEIGHT;
+ int MAX_DILATION_DEPTH;
+ device_family_t DEVICE; // device
+ } lt_arch_t;
+
+ enum {VALID, INNER_LINE, CVEC_IDX, STRIDE_IDX, C_STRIDE, NEW_LINE} address_info_e;
+
+ `include "dla_layout_transform_config.svh"
+
+endpackage