OpenCores
URL https://opencores.org/ocsvn/fully-pipelined-edge-detection-algorithms/fully-pipelined-edge-detection-algorithms/trunk

Subversion Repositories fully-pipelined-edge-detection-algorithms

[/] [fully-pipelined-edge-detection-algorithms/] [trunk/] [src/] [OperatorOverloading_pkg.vhd] - Blame information for rev 18

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 16 muhammedko
----------------------------------------------------------------------------------
2
-- Company: 
3
-- Engineer: MUHAMMED KOCAOGLU
4
-- 
5
-- Create Date: 01/02/2022 12:21:40 AM
6
-- Design Name: 
7
-- Module Name: OperatorOverloading_pkg - Behavioral
8
-- Project Name: 
9
-- Target Devices: 
10
-- Tool Versions: 
11
-- Description: 
12
-- 
13
-- Dependencies: 
14
-- 
15
-- Revision:
16
-- Revision 0.01 - File Created
17
-- Additional Comments:
18
-- 
19
----------------------------------------------------------------------------------
20
LIBRARY IEEE;
21
USE IEEE.STD_LOGIC_1164.ALL;
22
USE IEEE.NUMERIC_STD.ALL;
23
--USE IEEE.STD_LOGIC_ARITH.ALL;
24
--USE IEEE.STD_LOGIC_UNSIGNED.ALL;
25
 
26
PACKAGE OperatorOverloading_pkg IS
27
    TYPE array2D IS ARRAY (NATURAL RANGE <>) OF STD_LOGIC_VECTOR;
28
    TYPE array3D IS ARRAY (NATURAL RANGE <>) OF array2D;
29
 
30
    FUNCTION "*" (L : array3D; R : array3D) RETURN array3D;
31
    FUNCTION "&" (L : STD_LOGIC_VECTOR; R : array3D) RETURN array3D;
32
    FUNCTION "&" (L : array3D; R : array3D) RETURN array3D;
33
END PACKAGE OperatorOverloading_pkg;
34
 
35
PACKAGE BODY OperatorOverloading_pkg IS
36
    ---- D E P T H 2
37
    -- D
38
    -- E
39
    -- P
40
    -- T
41
    -- H
42
    -- 1
43
    -- multiplication overloading for 2d and 3d array
44
    FUNCTION "*" (L : array3D; R : array3D) RETURN array3D IS
45
        CONSTANT DEPTH1 : NATURAL := L'length - 1;
46
        CONSTANT DEPTH2 : NATURAL := L(0)'length - 1;
47
        CONSTANT DEPTH3 : NATURAL := L(0)(0)'length - 1;
48
        CONSTANT DEPTH4 : NATURAL := R(0)(0)'length;
49
        VARIABLE result : array3D (0 TO DEPTH1)(0 TO DEPTH2)(DEPTH3 + DEPTH4 DOWNTO 0);
50
    BEGIN
51
        FOR i IN 0 TO DEPTH1 LOOP
52
            FOR j IN 0 TO DEPTH2 LOOP
53
                result(i)(j) := STD_LOGIC_VECTOR(signed(L(i)(j)) * signed(R(i)(j)));
54
            END LOOP;
55
        END LOOP;
56
        RETURN result;
57
    END;
58
 
59
    FUNCTION "&" (L : STD_LOGIC_VECTOR; R : array3D) RETURN array3D IS
60
        CONSTANT DEPTH1 : NATURAL := R'length - 1;
61
        CONSTANT DEPTH2 : NATURAL := R(0)'length - 1;
62
        CONSTANT DEPTH3 : NATURAL := R(0)(0)'length - 1;
63
        CONSTANT DEPTH4 : NATURAL := L'length;
64
        VARIABLE result : array3D (0 TO DEPTH1)(0 TO DEPTH2)(DEPTH4 + DEPTH3 DOWNTO 0);
65
    BEGIN
66
        FOR i IN 0 TO DEPTH1 LOOP
67
            FOR j IN 0 TO DEPTH2 LOOP
68
                result(i)(j) := L & R(i)(j);
69
            END LOOP;
70
        END LOOP;
71
        RETURN result;
72
    END;
73
 
74
    FUNCTION "&" (L : array3D; R : array3D) RETURN array3D IS
75
        CONSTANT DEPTH1 : NATURAL := R'length - 1;
76
        CONSTANT DEPTH2 : NATURAL := R(0)'length - 1;
77
        CONSTANT DEPTH3 : NATURAL := R(0)(0)'length - 1;
78
        CONSTANT DEPTH4 : NATURAL := L(0)(0)'length;
79
        VARIABLE result : array3D (0 TO DEPTH1)(0 TO DEPTH2)(DEPTH4 + DEPTH3 DOWNTO 0);
80
    BEGIN
81
        FOR i IN 0 TO DEPTH1 LOOP
82
            FOR j IN 0 TO DEPTH2 LOOP
83
                result(i)(j) := L(i)(j) & R(i)(j);
84
            END LOOP;
85
        END LOOP;
86
        RETURN result;
87
    END;
88
 
89
END PACKAGE BODY OperatorOverloading_pkg;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.