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

Subversion Repositories ahb_master

[/] [ahb_master/] [trunk/] [src/] [base/] [axi2ahb_rd_fifo.v] - Blame information for rev 2

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

Line No. Rev Author Line
1 2 eyalhoc
 
2
INCLUDE def_axi2ahb.txt
3
OUTFILE PREFIX_axi2ahb_rd_fifo.v
4
 
5
module  PREFIX_axi2ahb_rd_fifo (PORTS);
6
 
7
   parameter              FIFO_LINES = EXPR(2 * 16); //double buffer of max burst
8
   parameter              RESP_SLVERR = 2'b10;
9
 
10
   input                  clk;
11
   input                  reset;
12
 
13
   port                   RGROUP_AXI_R;
14
   input [DATA_BITS-1:0]  HRDATA;
15
   input                  HREADY;
16
   input [1:0]            HTRANS;
17
   input                  HRESP;
18
 
19
   input [ID_BITS-1:0]    cmd_id;
20
   input                  cmd_err;
21
   input                  rdata_phase;
22
   output                 rdata_ready;
23
   input                  data_last;
24
 
25
 
26
   wire                   data_push;
27
   wire                   data_pop;
28
   wire                   data_empty;
29
   wire                   data_full;
30
 
31
   reg                    RVALID;
32
 
33
   reg [LOG2(CMD_DEPTH):0] burst_cnt;
34
 
35
   wire                   axi_last;
36
   wire                   ahb_last;
37
   wire [1:0]             cmd_resp;
38
 
39
 
40
   assign                 cmd_resp = cmd_err | HRESP ? RESP_SLVERR : 2'b00;
41
 
42
   assign                 rdata_ready = burst_cnt < 'd2;
43
 
44
   assign                 data_push = rdata_phase & HREADY;
45
   assign                 data_pop = RVALID & RREADY;
46
 
47
   assign                 axi_last = RVALID & RREADY & RLAST;
48
   assign                 ahb_last = rdata_phase & data_last;
49
 
50
   always @(posedge clk or posedge reset)
51
     if (reset)
52
       burst_cnt <= #FFD 'd0;
53
     else if (axi_last | ahb_last)
54
       burst_cnt <= #FFD burst_cnt - axi_last + ahb_last;
55
 
56
   prgen_fifo #(DATA_BITS+ID_BITS+2+1, FIFO_LINES)
57
   data_fifo(
58
            .clk(clk),
59
            .reset(reset),
60
            .push(data_push),
61
            .pop(data_pop),
62
            .din({HRDATA,
63
                  cmd_id,
64
                  cmd_resp,
65
                  ahb_last
66
                  }
67
                 ),
68
            .dout({RDATA,
69
                   RID,
70
                   RRESP,
71
                   RLAST
72
                   }
73
                  ),
74
            .empty(data_empty),
75
            .full(data_full)
76
            );
77
 
78
 
79
   always @(posedge clk or posedge reset)
80
     if (reset)
81
       RVALID <= #FFD 1'b0;
82
     else if (axi_last)
83
       RVALID <= #FFD 1'b0;
84
     else if (burst_cnt > 'd0)
85
       RVALID <= #FFD 1'b1;
86
     else
87
       RVALID <= #FFD 1'b0;
88
 
89
 
90
endmodule
91
 
92
 

powered by: WebSVN 2.1.0

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