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

Subversion Repositories fpga-median

[/] [fpga-median/] [trunk/] [sim/] [tb/] [median_tb_directed.sv] - Diff between revs 2 and 9

Only display areas with differences | Details | Blame | View Log

Rev 2 Rev 9
 
/* --------------------------------------------------------------------------------
 
 This file is part of FPGA Median Filter.
 
 
 
    FPGA Median Filter is free software: you can redistribute it and/or modify
 
    it under the terms of the GNU General Public License as published by
 
    the Free Software Foundation, either version 3 of the License, or
 
    (at your option) any later version.
 
 
 
    FPGA Median Filter is distributed in the hope that it will be useful,
 
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
    GNU General Public License for more details.
 
 
 
    You should have received a copy of the GNU General Public License
 
    along with FPGA Median Filter.  If not, see .
 
-------------------------------------------------------------------------------- */
// +----------------------------------------------------------------------------
// +----------------------------------------------------------------------------
// Universidade Federal da Bahia
// Universidade Federal da Bahia
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// PROJECT: FPGA Median Filter
// PROJECT: FPGA Median Filter
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// FILE NAME            : median_tb.v
// FILE NAME            : median_tb.v
// AUTHOR               : João Carlos Bittencourt
// AUTHOR               : João Carlos Bittencourt
// AUTHOR'S E-MAIL      : joaocarlos@ieee.org
// AUTHOR'S E-MAIL      : joaocarlos@ieee.org
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// RELEASE HISTORY
// RELEASE HISTORY
// VERSION  DATE        AUTHOR        DESCRIPTION
// VERSION  DATE        AUTHOR        DESCRIPTION
// 1.0      2013-08-27  joao.nunes    initial version
// 1.0      2013-08-27  joao.nunes    initial version
// 1.1      2013-09-04  laue.rami     modified version
// 1.1      2013-09-04  laue.rami     modified version
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// KEYWORDS: median, filter, image processing
// KEYWORDS: median, filter, image processing
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// PURPOSE: Testbench for Median filter.
// PURPOSE: Testbench for Median filter.
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
`define IMG_HEIGHT 'd320
`define IMG_HEIGHT 'd320
`define IMG_WIDTH  'd320
`define IMG_WIDTH  'd320
module median_tb;
module median_tb;
    `include "../tb/driver.sv"
    `include "../tb/driver.sv"
    driver driver_u0;
    driver driver_u0;
    localparam PERIOD = 10;
    localparam PERIOD = 10;
    localparam PIXEL_DATA_WIDTH = 8;
    localparam PIXEL_DATA_WIDTH = 8;
    localparam LUT_ADDR_WIDTH = 14; // Input LUTs
    localparam LUT_ADDR_WIDTH = 14; // Input LUTs
    localparam MEM_ADDR_WIDTH = 14; // Output Memory
    localparam MEM_ADDR_WIDTH = 14; // Output Memory
    bit clk;
    bit clk;
    wire [MEM_ADDR_WIDTH-1:0] raddr_a;
    wire [MEM_ADDR_WIDTH-1:0] raddr_a;
    wire [MEM_ADDR_WIDTH-1:0] raddr_b;
    wire [MEM_ADDR_WIDTH-1:0] raddr_b;
    wire [MEM_ADDR_WIDTH-1:0] raddr_c;
    wire [MEM_ADDR_WIDTH-1:0] raddr_c;
    wire [MEM_ADDR_WIDTH-1:0] waddr_a;
    wire [MEM_ADDR_WIDTH-1:0] waddr_a;
    wire [MEM_ADDR_WIDTH-1:0] waddr_b;
    wire [MEM_ADDR_WIDTH-1:0] waddr_b;
    wire [MEM_ADDR_WIDTH-1:0] waddr_c;
    wire [MEM_ADDR_WIDTH-1:0] waddr_c;
    wire [MEM_ADDR_WIDTH-1:0] waddr;
    wire [MEM_ADDR_WIDTH-1:0] waddr;
    reg [(PIXEL_DATA_WIDTH*4)-1:0] word0;
    reg [(PIXEL_DATA_WIDTH*4)-1:0] word0;
    reg [(PIXEL_DATA_WIDTH*4)-1:0] word1;
    reg [(PIXEL_DATA_WIDTH*4)-1:0] word1;
    reg [(PIXEL_DATA_WIDTH*4)-1:0] word2;
    reg [(PIXEL_DATA_WIDTH*4)-1:0] word2;
    wire [31:0] w_data_bram0;
    wire [31:0] w_data_bram0;
    wire [31:0] w_data_bram1;
    wire [31:0] w_data_bram1;
    wire [31:0] w_data_bram2;
    wire [31:0] w_data_bram2;
    //dut_if interface
    //dut_if interface
    dut_if dut_if (clk);
    dut_if dut_if (clk);
    //driver
    //driver
    always #(PERIOD/2) clk = ~clk;
    always #(PERIOD/2) clk = ~clk;
    dual_port_ram
    dual_port_ram
    #(
    #(
      .MEMFILE("./memA.hex"),
      .MEMFILE("./memA.hex"),
      .DATA_WIDTH('d32),
      .DATA_WIDTH('d32),
      .ADDR_WIDTH('d14)
      .ADDR_WIDTH('d14)
    )
    )
    BRAM0
    BRAM0
    (
    (
      .clk(clk),
      .clk(clk),
      .r_ena(1'b1),
      .r_ena(1'b1),
      .w_ena(1'b0),
      .w_ena(1'b0),
      .w_data(w_data_bram0),
      .w_data(w_data_bram0),
      .w_addr(waddr_a),
      .w_addr(waddr_a),
      .r_addr(raddr_a),
      .r_addr(raddr_a),
      .r_data(dut_if.word0)
      .r_data(dut_if.word0)
    );
    );
    dual_port_ram
    dual_port_ram
    #(
    #(
      .MEMFILE("./memB.hex"),
      .MEMFILE("./memB.hex"),
      .DATA_WIDTH('d32),
      .DATA_WIDTH('d32),
      .ADDR_WIDTH('d14)
      .ADDR_WIDTH('d14)
    )
    )
    BRAM1
    BRAM1
    (
    (
      .clk(clk),
      .clk(clk),
      .r_ena(1'b1),
      .r_ena(1'b1),
      .w_ena(1'b0),
      .w_ena(1'b0),
      .w_data(w_data_bram1),
      .w_data(w_data_bram1),
      .w_addr(waddr_b),
      .w_addr(waddr_b),
      .r_addr(raddr_b),
      .r_addr(raddr_b),
      .r_data(dut_if.word1)
      .r_data(dut_if.word1)
    );
    );
    dual_port_ram
    dual_port_ram
    #(
    #(
      .MEMFILE("./memC.hex"),
      .MEMFILE("./memC.hex"),
      .DATA_WIDTH('d32),
      .DATA_WIDTH('d32),
      .ADDR_WIDTH('d14)
      .ADDR_WIDTH('d14)
    )
    )
    BRAM2
    BRAM2
    (
    (
      .clk(clk),
      .clk(clk),
      .r_ena(1'b1),
      .r_ena(1'b1),
      .w_ena(1'b0),
      .w_ena(1'b0),
      .w_data(w_data_bram2),
      .w_data(w_data_bram2),
      .w_addr(waddr_c),
      .w_addr(waddr_c),
      .r_addr(raddr_c),
      .r_addr(raddr_c),
      .r_data(dut_if.word2)
      .r_data(dut_if.word2)
    );
    );
    median
    median
    #(
    #(
        .MEM_DATA_WIDTH(PIXEL_DATA_WIDTH*4),
        .MEM_DATA_WIDTH(PIXEL_DATA_WIDTH*4),
        .PIXEL_DATA_WIDTH(PIXEL_DATA_WIDTH),
        .PIXEL_DATA_WIDTH(PIXEL_DATA_WIDTH),
        .LUT_ADDR_WIDTH(LUT_ADDR_WIDTH),
        .LUT_ADDR_WIDTH(LUT_ADDR_WIDTH),
        .MEM_ADDR_WIDTH(MEM_ADDR_WIDTH),
        .MEM_ADDR_WIDTH(MEM_ADDR_WIDTH),
        .IMG_WIDTH(`IMG_WIDTH),
        .IMG_WIDTH(`IMG_WIDTH),
        .IMG_HEIGHT(`IMG_HEIGHT)
        .IMG_HEIGHT(`IMG_HEIGHT)
    ) dut_u0 (
    ) dut_u0 (
        .clk(clk), // Clock
        .clk(clk), // Clock
        .rst_n(dut_if.rst_n), // Asynchronous reset active low
        .rst_n(dut_if.rst_n), // Asynchronous reset active low
        .word0(dut_if.ch_word0),
        .word0(dut_if.ch_word0),
        .word1(dut_if.ch_word1),
        .word1(dut_if.ch_word1),
        .word2(dut_if.ch_word2),
        .word2(dut_if.ch_word2),
        .pixel1(dut_if.pixel1),
        .pixel1(dut_if.pixel1),
        .pixel2(dut_if.pixel2),
        .pixel2(dut_if.pixel2),
        .pixel3(dut_if.pixel3),
        .pixel3(dut_if.pixel3),
        .pixel4(dut_if.pixel4),
        .pixel4(dut_if.pixel4),
        .raddr_a(raddr_a),
        .raddr_a(raddr_a),
        .raddr_b(raddr_b),
        .raddr_b(raddr_b),
        .raddr_c(raddr_c),
        .raddr_c(raddr_c),
        .waddr(dut_if.waddr)
        .waddr(dut_if.waddr)
    );
    );
    always@(*)begin
    always@(*)begin
       dut_if.window_line_counter  = dut_u0.window_contol.window_line_counter;
       dut_if.window_line_counter  = dut_u0.window_contol.window_line_counter;
    end
    end
    initial begin
    initial begin
        $display("INICIO -------");
        $display("INICIO -------");
        driver_u0 = new(dut_if);
        driver_u0 = new(dut_if);
        driver_u0.init();
        driver_u0.init();
        driver_u0.receive_data();
        driver_u0.receive_data();
        driver_u0.reorganize_lines();
        driver_u0.reorganize_lines();
        wait(dut_if.end_of_operation);
        wait(dut_if.end_of_operation);
        driver_u0.write_file();
        driver_u0.write_file();
        #(PERIOD*3)
        #(PERIOD*3)
        repeat(100)@(negedge clk);
        repeat(100)@(negedge clk);
        $stop;
        $stop;
    end
    end
endmodule
endmodule
 
 

powered by: WebSVN 2.1.0

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