OpenCores
URL https://opencores.org/ocsvn/i2s_to_wb/i2s_to_wb/trunk

Subversion Repositories i2s_to_wb

[/] [i2s_to_wb/] [trunk/] [sim/] [models/] [i2s_rx_bfm.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 qaztronic
// --------------------------------------------------------------------
2
//
3
// --------------------------------------------------------------------
4
 
5
`timescale 1ns/10ps
6
 
7
 
8
module
9
  i2s_rx_bfm
10
  #(
11
    parameter DELAY = 3
12
  )
13
  (
14
    input   [31:0]  bfm_data_i,
15
    output  [31:0]  bfm_data_o,
16
    input   [31:0]  bfm_addr_i,
17
    input   [3:0]   bfm_sel_i,
18
    input           bfm_we_i,
19
    input           bfm_cyc_i,
20
    input           bfm_stb_i,
21
    output          bfm_ack_o,
22
    output          bfm_err_o,
23
    output          bfm_rty_o,
24
 
25
    output          bfm_sck_o,
26
    output          bfm_ws_o,
27
    input           bfm_sck_i,
28
    input           bfm_ws_i,
29
    input           bfm_sd_i,
30
 
31
    input           bfm_clk_i,
32
    input           bfm_rst_i
33
  );
34
 
35
  //---------------------------------------------------
36
  //  init regs
37
  reg enable_r;
38
 
39
  initial
40
    begin
41
      enable_r <= 1'b0;
42
    end
43
 
44
 
45
  //---------------------------------------------------
46
  //  enable
47
  task enable_bfm;
48
    begin
49
 
50
    enable_r <= 1'b1;
51
 
52
    $display( "-#- %15.t | %m: BFM enabled.", $time );
53
 
54
    end
55
  endtask
56
 
57
 
58
  //---------------------------------------------------
59
  //  disable
60
  task disable_bfm;
61
    begin
62
 
63
    enable_r <= 1'b0;
64
 
65
    $display( "-#- %15.t | %m: BFM disabled.", $time );
66
 
67
    end
68
  endtask
69
 
70
 
71
  //---------------------------------------------------
72
  //  generate ws
73
  reg [5:0] count;
74
 
75
  always @(negedge bfm_clk_i)
76
    if( bfm_rst_i )
77
      count <= 0;
78
    else
79
      count <= count + 1;
80
 
81
  //---------------------------------------------------
82
  //  
83
  reg [31:0] i2s_data;
84
 
85
  always @(posedge bfm_sck_i)
86
    i2s_data <= { i2s_data[30:0], bfm_sd_i };
87
 
88
  reg [1:0] bfm_ws_i_r;
89
 
90
  always @(posedge bfm_sck_i)
91
    bfm_ws_i_r <= {bfm_ws_i_r[0], bfm_ws_i};
92
 
93
  wire bfm_ws_rise_edge;
94
  wire bfm_ws_fall_edge;
95
 
96
  assign bfm_ws_rise_edge = (bfm_ws_i_r[0] ^ bfm_ws_i_r[1]) & bfm_ws_i_r[0];  // right
97
  assign bfm_ws_fall_edge = (bfm_ws_i_r[0] ^ bfm_ws_i_r[1]) & ~bfm_ws_i_r[0]; // left
98
 
99
 
100
  //---------------------------------------------------
101
  //  
102
  always @(posedge bfm_sck_i)
103
    begin
104
 
105
      if(bfm_ws_fall_edge)
106
        $display( "-#- %15.t | %m: right channel is 0x%8.x.", $time, i2s_data );
107
 
108
      if(bfm_ws_rise_edge)
109
        $display( "-#- %15.t | %m: left  channel is 0x%8.x.", $time, i2s_data );
110
 
111
    end
112
 
113
 
114
  //---------------------------------------------------
115
  //  assign outputs
116
  assign #DELAY bfm_ws_o   = enable_r ? count[5]  : 1'bz;
117
  assign #DELAY bfm_sck_o  = enable_r ? bfm_clk_i : 1'bz;
118
 
119
 
120
endmodule
121
 

powered by: WebSVN 2.1.0

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