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

Subversion Repositories fpga-median

[/] [fpga-median/] [trunk/] [sim/] [tb/] [driver.sv] - Blame information for rev 2

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

Line No. Rev Author Line
1 2 joaocarlos
// +----------------------------------------------------------------------------
2
// Universidade Federal da Bahia
3
//------------------------------------------------------------------------------
4
// PROJECT: FPGA Median Filter
5
//------------------------------------------------------------------------------
6
// FILE NAME            : driver.sv
7
// AUTHOR               : Laue Rami Souza Costa de Jesus
8
// -----------------------------------------------------------------------------
9
class driver;
10
 
11
//  localparam MEMORY_WIDTH = 4331;
12
  localparam NUM_PIXELS = (`IMG_WIDTH * `IMG_HEIGHT) - 1;//102400-1;
13
 
14
  int cnt;
15
  int addr;
16
  int i;
17
  logic [31:0] r_data_bram0;
18
  logic [31:0] r_data_bram1;
19
  logic [31:0] r_data_bram2;
20
 
21
  logic [7:0] image [0:NUM_PIXELS];
22
 
23
  virtual interface dut_if dut_if;
24
 
25
  function new (virtual interface dut_if m_dut_if);
26
  begin
27
     dut_if = m_dut_if;
28
  end
29
  endfunction
30
 
31
  task init();
32
    begin
33
        $display("RESET --------");
34
        dut_if.rst_n    = 1;
35
        dut_if.start    = 0;
36
        dut_if.ch_word0 = 0;
37
        dut_if.ch_word1 = 0;
38
        dut_if.ch_word2 = 0;
39
        addr = 0;
40
        i = 0;
41
        dut_if.end_of_operation = 0;
42
        repeat(5)@(negedge dut_if.clk);
43
        dut_if.rst_n = 0;
44
        repeat(5)@(negedge dut_if.clk);
45
        dut_if.rst_n = 1;
46
        dut_if.start = 1;
47
        repeat(3)@(negedge dut_if.clk);
48
    end
49
  endtask
50
 
51
  task reorganize_lines();
52
    begin
53
      wait(dut_if.start);
54
      @(negedge dut_if.clk);
55
      while(!(dut_if.end_of_operation))begin
56
         if(dut_if.window_line_counter == 2'b00)begin
57
            dut_if.ch_word0 = dut_if.word0;
58
            dut_if.ch_word1 = dut_if.word1;
59
            dut_if.ch_word2 = dut_if.word2;
60
         end
61
         else if(dut_if.window_line_counter == 2'b01)begin
62
            dut_if.ch_word0 = dut_if.word1;
63
            dut_if.ch_word1 = dut_if.word2;
64
            dut_if.ch_word2 = dut_if.word0;
65
         end
66
         else if(dut_if.window_line_counter == 2'b10)begin
67
            dut_if.ch_word0 = dut_if.word2;
68
            dut_if.ch_word1 = dut_if.word0;
69
            dut_if.ch_word2 = dut_if.word1;
70
         end
71
         //addr = addr+1;
72
         //read 4 pixels from all memories
73
         @(negedge dut_if.clk);
74
      end
75
      dut_if.start = 0;
76
    end
77
  endtask
78
 
79
  task receive_data();
80
     fork begin
81
        while(i
82
           //seria bom ter um sinal para saber quando terminou a mediana
83
           dut_if.result[i] = dut_if.pixel1;
84
           image[i] = dut_if.pixel1;
85
           dut_if.result[i+1] = dut_if.pixel2;
86
           image[i+1] = dut_if.pixel2;
87
           dut_if.result[i+2] = dut_if.pixel3;
88
           image[i+2] = dut_if.pixel3;
89
           dut_if.result[i+3] = dut_if.pixel4;
90
           image[i+3] = dut_if.pixel4;
91
           @(negedge dut_if.clk);
92
           i = i + 4;
93
        end
94
        dut_if.end_of_operation = 1;
95
     end
96
     join_none
97
  endtask
98
 
99
  function int write_file();
100
 
101
     integer file_ID = $fopen("./image.hex", "w");
102
 
103
     for(int i=0 ; i<=NUM_PIXELS ; i++ ) begin
104
        if(image[i] === 8'bx)
105
           $fdisplay(file_ID,"%x", 8'b0);
106
        else
107
           $fdisplay(file_ID,"%x", image[i]);
108
     end
109
 
110
     $fclose(file_ID);
111
 
112
  endfunction
113
 
114
endclass

powered by: WebSVN 2.1.0

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