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/] [test bench/] [tb_EdgeDetection.vhd] - Blame information for rev 5

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 5 muhammedko
----------------------------------------------------------------------------------
2
-- Company: 
3
-- Engineer: MUHAMMED KOCAOGLU
4
-- 
5
-- Create Date: 01/13/2022 11:37:53 PM
6
-- Design Name: 
7
-- Module Name: tb_EdgeDetection - 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 std.textio.ALL;
23
USE IEEE.STD_LOGIC_TEXTIO.ALL;
24
USE work.OperatorOverloading_pkg.ALL;
25
USE work.EdgeDetection_pkg.ALL;
26
 
27
ENTITY tb_EdgeDetection IS
28
    GENERIC (
29
        EdgeDetection_Type   : STRING  := "0"; -- "0"->Sobel filter -- "1"->Prewitt filter -- "2"->Scharr filter -- "3"->Roberts filter
30
        EdgeDetection_Kernel : INTEGER := DetermineKernel(EdgeDetection_Type)
31
    );
32
END tb_EdgeDetection;
33
 
34
ARCHITECTURE Behavioral OF tb_EdgeDetection IS
35
 
36
    PROCEDURE FILTERDATA (
37
        FILE RawImageHex_file        : text;
38
        FILE FilteredImageHex_file   : text;
39
        SIGNAL CLK                   : IN STD_LOGIC;
40
        SIGNAL EdgeDetection_Ready   : IN STD_LOGIC;
41
        SIGNAL EdgeDetection_Disable : OUT STD_LOGIC;
42
        SIGNAL EdgeDetection_Enable  : OUT STD_LOGIC;
43
        SIGNAL EdgeDetection_Din     : OUT array2D(0 TO EdgeDetection_Kernel)(7 DOWNTO 0);
44
        SIGNAL EdgeDetection_Dout    : IN STD_LOGIC_VECTOR(31 DOWNTO 0)
45
    ) IS
46
        VARIABLE RawImageHex_current_line       : line;
47
        VARIABLE RawImageHex_current_field      : STD_LOGIC_VECTOR(3 * 8 - 1 DOWNTO 0) := (OTHERS => '0');
48
        VARIABLE FilteredImageHex_current_line  : line;
49
        VARIABLE FilteredImageHex_current_field : STD_LOGIC_VECTOR(7 DOWNTO 0) := (OTHERS => '0');
50
    BEGIN
51
        WAIT UNTIL falling_edge(CLK);
52
        WHILE NOT endfile(RawImageHex_file) LOOP
53
            readline(RawImageHex_file, RawImageHex_current_line);
54
            hread(RawImageHex_current_line, RawImageHex_current_field);
55
            EdgeDetection_Enable <= '1';
56
            FOR i IN 0 TO EdgeDetection_Kernel LOOP
57
                EdgeDetection_Din(i) <= RawImageHex_current_field((EdgeDetection_Kernel + 1 - i) * 8 - 1 DOWNTO (EdgeDetection_Kernel - i) * 8);
58
            END LOOP;
59
 
60
            IF EdgeDetection_Ready = '1' THEN
61
                hwrite(FilteredImageHex_current_line, EdgeDetection_Dout);
62
                writeline(FilteredImageHex_file, FilteredImageHex_current_line);
63
            END IF;
64
            WAIT UNTIL falling_edge(CLK);
65
        END LOOP;
66
        EdgeDetection_Disable <= '1';
67
        EdgeDetection_Enable  <= '0';
68
        WHILE EdgeDetection_Ready = '1' LOOP
69
            hwrite(FilteredImageHex_current_line, EdgeDetection_Dout);
70
            writeline(FilteredImageHex_file, FilteredImageHex_current_line);
71
            WAIT UNTIL falling_edge(CLK);
72
        END LOOP;
73
    END PROCEDURE;
74
 
75
    COMPONENT EdgeDetection IS
76
        GENERIC (
77
            EdgeDetection_Type   : STRING  := "0";
78
            EdgeDetection_Kernel : INTEGER := DetermineKernel(EdgeDetection_Type)
79
        );
80
        PORT (
81
            CLK                   : IN STD_LOGIC;
82
            EdgeDetection_Enable  : IN STD_LOGIC;
83
            EdgeDetection_Disable : IN STD_LOGIC;
84
            EdgeDetection_Din     : IN array2D(0 TO EdgeDetection_Kernel)(7 DOWNTO 0);
85
            EdgeDetection_Dout    : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);
86
            EdgeDetection_Ready   : OUT STD_LOGIC
87
        );
88
    END COMPONENT;
89
    SIGNAL CLK                   : STD_LOGIC := '1';
90
    SIGNAL EdgeDetection_Enable  : STD_LOGIC := '0';
91
    SIGNAL EdgeDetection_Disable : STD_LOGIC := '0';
92
    SIGNAL EdgeDetection_Din     : array2D(0 TO EdgeDetection_Kernel)(7 DOWNTO 0);
93
    SIGNAL EdgeDetection_Dout    : STD_LOGIC_VECTOR(31 DOWNTO 0);
94
    SIGNAL EdgeDetection_Ready   : STD_LOGIC;
95
BEGIN
96
 
97
    CLK <= NOT CLK AFTER 5 ns;
98
 
99
    dut : PROCESS
100
        FILE RawImageHex_file      : text OPEN read_mode IS "C:\Users\Muhammed\OneDrive\FPGA_Projects\VivadoProjects\EdgeDetection_v2\EdgeDetection_v2.srcs\sim_1\new\venice_raw_vect_hex.txt";
101
        FILE FilteredImageHex_file : text OPEN write_mode IS "C:\Users\Muhammed\OneDrive\FPGA_Projects\VivadoProjects\EdgeDetection_v2\EdgeDetection_v2.srcs\sim_1\new\venice_filtered_vect_hex.txt";
102
    BEGIN
103
        WAIT FOR 50 ns;
104
        WAIT UNTIL falling_edge(CLK);
105
 
106
        FILTERDATA(
107
        RawImageHex_file,
108
        FilteredImageHex_file,
109
        CLK,
110
        EdgeDetection_Ready,
111
        EdgeDetection_Disable,
112
        EdgeDetection_Enable,
113
        EdgeDetection_Din,
114
        EdgeDetection_Dout
115
        );
116
 
117
        file_close(RawImageHex_file);
118
        file_close(FilteredImageHex_file);
119
        WAIT FOR 100 ns;
120
        std.env.stop;
121
    END PROCESS;
122
 
123
    EdgeDetection_Inst : EdgeDetection
124
    GENERIC MAP(
125
        EdgeDetection_Type   => EdgeDetection_Type,
126
        EdgeDetection_Kernel => EdgeDetection_Kernel
127
    )
128
    PORT MAP(
129
        CLK                   => CLK,
130
        EdgeDetection_Enable  => EdgeDetection_Enable,
131
        EdgeDetection_Disable => EdgeDetection_Disable,
132
        EdgeDetection_Din     => EdgeDetection_Din,
133
        EdgeDetection_Dout    => EdgeDetection_Dout,
134
        EdgeDetection_Ready   => EdgeDetection_Ready
135
    );
136
END Behavioral;

powered by: WebSVN 2.1.0

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