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

Subversion Repositories qaz_libs

[/] [qaz_libs/] [trunk/] [axi4_lib/] [src/] [axi4_register_slice.sv] - Blame information for rev 29

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

Line No. Rev Author Line
1 29 qaztronic
//////////////////////////////////////////////////////////////////////
2
////                                                              ////
3
//// Copyright (C) 2015 Authors and OPENCORES.ORG                 ////
4
////                                                              ////
5
//// This source file may be used and distributed without         ////
6
//// restriction provided that this copyright statement is not    ////
7
//// removed from the file and that any derivative work contains  ////
8
//// the original copyright notice and the associated disclaimer. ////
9
////                                                              ////
10
//// This source file is free software; you can redistribute it   ////
11
//// and/or modify it under the terms of the GNU Lesser General   ////
12
//// Public License as published by the Free Software Foundation; ////
13
//// either version 2.1 of the License, or (at your option) any   ////
14
//// later version.                                               ////
15
////                                                              ////
16
//// This source is distributed in the hope that it will be       ////
17
//// useful, but WITHOUT ANY WARRANTY; without even the implied   ////
18
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      ////
19
//// PURPOSE.  See the GNU Lesser General Public License for more ////
20
//// details.                                                     ////
21
////                                                              ////
22
//// You should have received a copy of the GNU Lesser General    ////
23
//// Public License along with this source; if not, download it   ////
24
//// from http://www.opencores.org/lgpl.shtml                     ////
25
////                                                              ////
26
//////////////////////////////////////////////////////////////////////
27
 
28
module
29
  axi4_register_slice
30
  #(
31
    A = 32, // address bus width
32
    N = 8,  // data bus width in bytes
33
    I = 1,  // ID width
34
    USE_ADVANCED_PROTOCOL = 0
35
  )
36
  (
37
    axi4_if axi4_s,
38
    axi4_if axi4_m,
39
    input   aclk,
40
    input   aresetn
41
  );
42
 
43
  // --------------------------------------------------------------------
44
  //
45
  wire ar_rd_empty;
46
  wire ar_rd_en = axi4_m.arvalid & axi4_m.arready;
47
  wire r_wr_full;
48
  wire r_wr_en = axi4_m.rvalid & axi4_m.rready;
49
 
50
  axi4_if #(.A(A), .N(N), .I(I))
51
    axi4_read_fifo(.*);
52
 
53
 
54
  // --------------------------------------------------------------------
55
  //
56
  axi4_to_read_fifos
57
    #(
58
      .A(A),
59
      .N(N),
60
      .I(I),
61
      .USE_ADVANCED_PROTOCOL(USE_ADVANCED_PROTOCOL)
62
    )
63
    axi4_to_read_fifos_i(.*);
64
 
65
 
66
  // --------------------------------------------------------------------
67
  //
68
  assign axi4_m.arid    = axi4_read_fifo.arid;
69
  assign axi4_m.araddr  = axi4_read_fifo.araddr;
70
  assign axi4_m.arburst = axi4_read_fifo.arburst;
71
  assign axi4_m.arlen   = axi4_read_fifo.arlen;
72
  assign axi4_m.arsize  = axi4_read_fifo.arsize;
73
  assign axi4_m.arvalid = ~ar_rd_empty;
74
 
75
  generate
76
    begin: ar_assign_gen
77
      if(USE_ADVANCED_PROTOCOL)
78
      begin
79
        assign axi4_m.arcache   = axi4_read_fifo.arcache;
80
        assign axi4_m.arlock    = axi4_read_fifo.arlock;
81
        assign axi4_m.arprot    = axi4_read_fifo.arprot;
82
        assign axi4_m.arqos     = axi4_read_fifo.arqos;
83
        assign axi4_m.arregion  = axi4_read_fifo.arregion;
84
      end
85
      else
86
      begin
87
        assign axi4_m.arcache   = 0;
88
        assign axi4_m.arlock    = 0;
89
        assign axi4_m.arprot    = 0;
90
        assign axi4_m.arqos     = 0;
91
        assign axi4_m.arregion  = 0;
92
      end
93
    end
94
  endgenerate
95
 
96
 
97
  // --------------------------------------------------------------------
98
  //
99
  assign axi4_m.rready        = ~r_wr_full;
100
  assign axi4_read_fifo.rdata = axi4_m.rdata;
101
  assign axi4_read_fifo.rid   = axi4_m.rid;
102
  assign axi4_read_fifo.rlast = axi4_m.rlast;
103
  assign axi4_read_fifo.rresp = axi4_m.rresp;
104
 
105
 
106
  // --------------------------------------------------------------------
107
  //
108
  wire aw_rd_empty;
109
  wire aw_rd_en = axi4_m.awvalid & axi4_m.awready;
110
  wire w_rd_empty;
111
  wire w_rd_en = axi4_m.wvalid & axi4_m.wready;
112
  wire b_wr_full;
113
  wire b_wr_en = axi4_m.bvalid & axi4_m.bready;
114
 
115
  axi4_if #(.A(A), .N(N), .I(I))
116
    axi4_write_fifo(.*);
117
 
118
 
119
  // --------------------------------------------------------------------
120
  //
121
  axi4_to_write_fifos
122
    #(
123
      .A(A),
124
      .N(N),
125
      .I(I),
126
      .USE_ADVANCED_PROTOCOL(USE_ADVANCED_PROTOCOL)
127
    )
128
    axi4_to_write_fifos_i(.*);
129
 
130
 
131
  // --------------------------------------------------------------------
132
  //
133
  assign axi4_m.awid    = axi4_write_fifo.awid;
134
  assign axi4_m.awaddr  = axi4_write_fifo.awaddr;
135
  assign axi4_m.awburst = axi4_write_fifo.awburst;
136
  assign axi4_m.awlen   = axi4_write_fifo.awlen;
137
  assign axi4_m.awsize  = axi4_write_fifo.awsize;
138
  assign axi4_m.awvalid = ~aw_rd_empty;
139
 
140
  generate
141
    begin: aw_assign_gen
142
      if(USE_ADVANCED_PROTOCOL)
143
      begin
144
        assign axi4_m.awcache   = axi4_write_fifo.awcache;
145
        assign axi4_m.awlock    = axi4_write_fifo.awlock;
146
        assign axi4_m.awprot    = axi4_write_fifo.awprot;
147
        assign axi4_m.awqos     = axi4_write_fifo.awqos;
148
        assign axi4_m.awregion  = axi4_write_fifo.awregion;
149
      end
150
      else
151
      begin
152
        assign axi4_m.awcache   = 0;
153
        assign axi4_m.awlock    = 0;
154
        assign axi4_m.awprot    = 0;
155
        assign axi4_m.awqos     = 0;
156
        assign axi4_m.awregion  = 0;
157
      end
158
    end
159
  endgenerate
160
 
161
 
162
  // --------------------------------------------------------------------
163
  //
164
  assign axi4_m.wvalid  = ~w_rd_empty;
165
  assign axi4_m.wdata   = axi4_write_fifo.wdata;
166
  assign axi4_m.wid     = axi4_write_fifo.wid;
167
  assign axi4_m.wlast   = axi4_write_fifo.wlast;
168
  assign axi4_m.wstrb   = axi4_write_fifo.wstrb;
169
 
170
 
171
  // --------------------------------------------------------------------
172
  //
173
  assign axi4_m.bready        = ~b_wr_full;
174
  assign axi4_write_fifo.bid   = axi4_m.bid;
175
  assign axi4_write_fifo.bresp = axi4_m.bresp;
176
 
177
 
178
// --------------------------------------------------------------------
179
//
180
 
181
endmodule
182
 

powered by: WebSVN 2.1.0

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