OpenCores
URL https://opencores.org/ocsvn/fpga-median/fpga-median/trunk

Subversion Repositories fpga-median

[/] [fpga-median/] [tags/] [fpga-filter-b1/] [sim/] [tb/] [median_tb.v] - Blame information for rev 8

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 8 joaocarlos
/* --------------------------------------------------------------------------------
2
 This file is part of FPGA Median Filter.
3
 
4
    FPGA Median Filter is free software: you can redistribute it and/or modify
5
    it under the terms of the GNU General Public License as published by
6
    the Free Software Foundation, either version 3 of the License, or
7
    (at your option) any later version.
8
 
9
    FPGA Median Filter is distributed in the hope that it will be useful,
10
    but WITHOUT ANY WARRANTY; without even the implied warranty of
11
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
    GNU General Public License for more details.
13
 
14
    You should have received a copy of the GNU General Public License
15
    along with FPGA Median Filter.  If not, see <http://www.gnu.org/licenses/>.
16
-------------------------------------------------------------------------------- */
17 2 joaocarlos
// +----------------------------------------------------------------------------
18
// Universidade Federal da Bahia
19
//------------------------------------------------------------------------------
20
// PROJECT: FPGA Median Filter
21
//------------------------------------------------------------------------------
22
// FILE NAME            : median_tb.v
23
// AUTHOR               : João Carlos Bittencourt
24
// AUTHOR'S E-MAIL      : joaocarlos@ieee.org
25
// -----------------------------------------------------------------------------
26
// RELEASE HISTORY
27
// VERSION  DATE        AUTHOR        DESCRIPTION
28
// 1.0      2013-08-27  joao.nunes    initial version
29
// -----------------------------------------------------------------------------
30
// KEYWORDS: median, filter, image processing
31
// -----------------------------------------------------------------------------
32
// PURPOSE: Testbench for Median filter.
33
// -----------------------------------------------------------------------------
34
module median_tb;
35
 
36
    localparam PERIOD = 10;
37
    localparam PIXEL_DATA_WIDTH = 8;
38
    localparam LUT_ADDR_WIDTH = 10; // Input LUTs
39
    localparam MEM_ADDR_WIDTH = 10; // Output Memory
40
 
41
    reg clk;
42
    reg rst_n;
43
    always #(PERIOD/2) clk = ~clk;
44
 
45
    reg [(PIXEL_DATA_WIDTH*4)-1:0] word0;
46
    reg [(PIXEL_DATA_WIDTH*4)-1:0] word1;
47
    reg [(PIXEL_DATA_WIDTH*4)-1:0] word2;
48
 
49
    wire [PIXEL_DATA_WIDTH-1:0] pixel1;
50
    wire [PIXEL_DATA_WIDTH-1:0] pixel2;
51
    wire [PIXEL_DATA_WIDTH-1:0] pixel3;
52
    wire [PIXEL_DATA_WIDTH-1:0] pixel4;
53
 
54
    wire [9:0] raddr_a;
55
    wire [9:0] raddr_b;
56
    wire [9:0] raddr_c;
57
 
58
    wire [9:0] waddr;
59
 
60
    median
61
    #(
62
        .MEM_DATA_WIDTH(PIXEL_DATA_WIDTH*4),
63
        .PIXEL_DATA_WIDTH(PIXEL_DATA_WIDTH),
64
        .LUT_ADDR_WIDTH(LUT_ADDR_WIDTH),
65
        .MEM_ADDR_WIDTH(MEM_ADDR_WIDTH)
66
    ) dut_u0 (
67
        .clk(clk), // Clock
68
        .rst_n(rst_n), // Asynchronous reset active low
69
 
70
        .word0(word0),
71
        .word1(word1),
72
        .word2(word2),
73
 
74
        .pixel1(pixel1),
75
        .pixel2(pixel2),
76
        .pixel3(pixel3),
77
        .pixel4(pixel4),
78
        .raddr_a(raddr_a),
79
        .raddr_b(raddr_b),
80
        .raddr_c(raddr_c),
81
 
82
        .waddr(waddr)
83
    );
84
 
85
    initial begin
86
        clk = 1;
87
        rst_n = 0;
88
        word0 = 0;
89
        word1 = 0;
90
        word2 = 0;
91
        #(PERIOD*3)
92
        rst_n = 1;
93
        word0 = {8'd160,8'd171,8'd164,8'd142};
94
        word1 = {8'd123,8'd141,8'd149,8'd154};
95
        word2 = {8'd163,8'd177,8'd171,8'd136};
96
        #PERIOD
97
        word0 = {8'd167,8'd193,8'd171,8'd160};
98
        word1 = {8'd174,8'd150,8'd123,8'd166};
99
        word2 = {8'd142,8'd165,8'd162,8'd171};
100
        #PERIOD
101
        word0 = {8'd168,8'd179,8'd146,8'd173};
102
        word1 = {8'd171,8'd160,8'd152,8'd154};
103
        word2 = {8'd156,8'd142,8'd147,8'd167};
104
        #PERIOD
105
        word0 = {8'd123,8'd141,8'd149,8'd154};
106
        word1 = {8'd163,8'd177,8'd171,8'd136};
107
        word2 = {8'd204,8'd151,8'd140,8'd140};
108
        #PERIOD
109
        word0 = {8'd174,8'd150,8'd123,8'd166};
110
        word1 = {8'd142,8'd165,8'd162,8'd171};
111
        word2 = {8'd142,8'd158,8'd149,8'd128};
112
        #PERIOD
113
        word0 = {8'd171,8'd160,8'd152,8'd154};
114
        word1 = {8'd156,8'd142,8'd147,8'd167};
115
        word2 = {8'd159,8'd128,8'd131,8'd160};
116
        repeat (100) @(negedge clk);
117
        $stop;
118
    end
119
 
120
endmodule

powered by: WebSVN 2.1.0

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