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_fifo_fsm.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_fifo_fsm
10
  (
11
    input   i2s_ws_edge,
12
    input   i2s_ws_i,
13
 
14
    input   fifo_enable,
15
    input   fifo_empty,
16
    input   fifo_ack,
17
 
18
    output  fifo_pop_right,
19
    output  fifo_pop_left,
20
    output  fifo_fsm_error,
21
    output  fifo_ready,
22
 
23
    input   i2s_clk_i,
24
    input   i2s_rst_i
25
  );
26
 
27
 
28
  // -----------------------------
29
  //  state machine binary definitions
30
  parameter IDLE_STATE  = 4'b0001;
31
  parameter ACK_WAIT    = 4'b0010;
32
  parameter POP_STATE   = 4'b0100;
33
  parameter ERROR_STATE = 4'b1000;
34
 
35
 
36
  // -----------------------------
37
  //  state machine flop
38
  reg [3:0] state;
39
  reg [3:0] next_state;
40
 
41
  always @(posedge i2s_clk_i or posedge i2s_rst_i)
42
    if(i2s_rst_i)
43
      state <= IDLE_STATE;
44
    else
45
      state <= next_state;
46
 
47
 
48
  // -----------------------------
49
  //  state machine
50
  always @(*)
51
    case(state)
52
      IDLE_STATE:   if( fifo_enable & ~fifo_ack )
53
                      next_state <= ACK_WAIT;
54
                    else
55
                      next_state <= IDLE_STATE;
56
 
57
      ACK_WAIT:     if( ~fifo_enable )
58
                      next_state <= IDLE_STATE;
59
                    else if( fifo_ack )
60
                      next_state <= POP_STATE;
61
                    else
62
                      next_state <= ACK_WAIT;
63
 
64
      POP_STATE:    if( fifo_empty )
65
                      next_state <= ERROR_STATE;
66
                    else
67
                      next_state <= IDLE_STATE;
68
 
69
      ERROR_STATE:  next_state <= ACK_WAIT;
70
 
71
      default:      next_state <= ERROR_STATE;
72
 
73
    endcase
74
 
75
 
76
  // -----------------------------
77
  //  outputs
78
  assign fifo_pop_right = (state == POP_STATE) & i2s_ws_i;
79
  assign fifo_pop_left  = (state == POP_STATE) & ~i2s_ws_i;
80
  assign fifo_fsm_error = (state == ERROR_STATE);
81
  assign fifo_ready     = (state == ACK_WAIT);
82
 
83
endmodule
84
 

powered by: WebSVN 2.1.0

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