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

Subversion Repositories i2s_to_wb

[/] [i2s_to_wb/] [trunk/] [src/] [i2s_to_wb_tx_if.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 qaztronic
// --------------------------------------------------------------------
2
//
3
// --------------------------------------------------------------------
4
 
5
`include "timescale.v"
6
 
7
 
8
module
9
  i2s_to_wb_tx_if
10
  #(
11
    parameter DMA_BUFFER_MAX_WIDTH = 12
12
  )
13
  (
14
    input           i2s_enable,
15
    input           i2s_ws_edge,
16
    input           i2s_ws_i,
17
 
18
    input           fifo_ack,
19
 
20
    output          fifo_ready,
21
    output  [31:0]  fifo_right_data,
22
    output  [31:0]  fifo_left_data,
23
 
24
    output  [31:0]  dma_rd_pointer_o,
25
    input   [31:0]  dma_rd_pointer_i,
26
 
27
    input           dma_rd_pointer_we,
28
 
29
    input   [(DMA_BUFFER_MAX_WIDTH - 1):0]  dma_word_size,
30
    input   [(DMA_BUFFER_MAX_WIDTH - 1):0]  dma_buffer_size,
31
 
32
    output          dma_overflow_error,
33
 
34
    input           i2s_clk_i,
35
    input           i2s_rst_i
36
  );
37
 
38
  //---------------------------------------------------
39
  // 
40
  wire  [31:0]  wbm_right_data_i;
41
  wire  [31:0]  wbm_right_data_o;
42
  wire  [31:0]  wbm_right_addr_o;
43
  wire  [3:0]   wbm_right_sel_o;
44
  wire          wbm_right_we_o;
45
  wire          wbm_right_cyc_o;
46
  wire          wbm_right_stb_o;
47
  wire          wbm_right_ack_i;
48
  wire          wbm_right_err_i;
49
  wire          wbm_right_rty_i;
50
 
51
 
52
  //---------------------------------------------------
53
  //  sync fifo_ack
54
  reg  [1:0]  fifo_ack_r;
55
  wire        fifo_ack_s = fifo_ack_r[1];
56
 
57
  always @(posedge i2s_clk_i)
58
    fifo_ack_r <= {fifo_ack_r[0], fifo_ack};
59
 
60
 
61
  //---------------------------------------------------
62
  //  sync i2s_ws_edge
63
  reg  [1:0]  i2s_ws_edge_r;
64
  wire        i2s_ws_edge_s = i2s_ws_edge_r[1];
65
 
66
  always @(posedge i2s_clk_i)
67
    i2s_ws_edge_r <= {i2s_ws_edge_r[0], i2s_ws_edge};
68
 
69
 
70
  //---------------------------------------------------
71
  //  sync i2s_ws_i
72
  reg  [1:0]  i2s_ws_i_r;
73
  wire        i2s_ws_i_s = i2s_ws_i_r[1];
74
 
75
  always @(posedge i2s_clk_i)
76
    i2s_ws_i_r <= {i2s_ws_i_r[0], i2s_ws_i};
77
 
78
 
79
  //---------------------------------------------------
80
  //
81
  wire [31:0] tone_out;
82
 
83
  tone_440_rom
84
    i_tone_440_rom
85
    (
86
      .addr(dma_rd_pointer_o[8:2]),
87
      .q(tone_out)
88
    );
89
 
90
    assign wbm_right_ack_i  = wbm_right_cyc_o & wbm_right_stb_o;
91
    assign wbm_right_data_i = tone_out;
92
 
93
 
94
  //---------------------------------------------------
95
  // fifo fsm
96
  wire fifo_empty;
97
  wire fifo_pop_right;
98
  wire fifo_pop_left;
99
  wire fifo_fsm_error;
100
 
101
  i2s_to_wb_fifo_fsm
102
    i_i2s_to_wb_fifo_fsm
103
    (
104
      .i2s_ws_edge(i2s_ws_edge_s),
105
      .i2s_ws_i(i2s_ws_i_s),
106
 
107
      .fifo_enable(i2s_enable),
108
      .fifo_empty(fifo_empty),
109
      .fifo_ack(fifo_ack_s),
110
 
111
      .fifo_pop_right(fifo_pop_right),
112
      .fifo_pop_left(fifo_pop_left),
113
      .fifo_fsm_error(fifo_fsm_error),
114
      .fifo_ready(fifo_ready),
115
 
116
      .i2s_clk_i(i2s_clk_i),
117
      .i2s_rst_i(i2s_rst_i)
118
    );
119
 
120
 
121
  //---------------------------------------------------
122
  //  
123
  i2s_to_wb_tx_dma #( .DMA_BUFFER_MAX_WIDTH(DMA_BUFFER_MAX_WIDTH) )
124
    i_tx_dma_right
125
    (
126
      .wbm_data_i(wbm_right_data_i),
127
      .wbm_data_o(wbm_right_data_o),
128
      .wbm_addr_o(wbm_right_addr_o),
129
      .wbm_sel_o(wbm_right_sel_o),
130
      .wbm_we_o(wbm_right_we_o),
131
      .wbm_cyc_o(wbm_right_cyc_o),
132
      .wbm_stb_o(wbm_right_stb_o),
133
      .wbm_ack_i(wbm_right_ack_i),
134
      .wbm_err_i(wbm_right_err_i),
135
      .wbm_rty_i(wbm_right_rty_i),
136
 
137
      .i2s_enable(i2s_enable),
138
 
139
      .fifo_pop(fifo_pop_right),
140
 
141
      .fifo_empty(fifo_empty),
142
 
143
      .dma_rd_pointer_o(dma_rd_pointer_o),
144
      .dma_rd_pointer_i(dma_rd_pointer_i),
145
 
146
      .dma_rd_pointer_we(dma_rd_pointer_we),
147
 
148
      .dma_word_size(dma_word_size),
149
      .dma_buffer_size(dma_buffer_size),
150
 
151
      .dma_overflow_error(dma_overflow_error),
152
 
153
      .i2s_clk_i(i2s_clk_i),
154
      .i2s_rst_i(i2s_rst_i)
155
    );
156
 
157
 
158
  //---------------------------------------------------
159
  // assign outputs
160
 
161
  assign fifo_left_data   = 32'h0;
162
  assign fifo_right_data  = wbm_right_data_o;
163
 
164
 
165
endmodule
166
 
167
 
168
 

powered by: WebSVN 2.1.0

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