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

Subversion Repositories dma_axi

[/] [dma_axi/] [trunk/] [src/] [dma_axi64/] [dma_axi64_core0_ch_fifo_ptr.v] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 eyalhoc
/////////////////////////////////////////////////////////////////////
2
////                                                             ////
3
////  Author: Eyal Hochberg                                      ////
4
////          eyal@provartec.com                                 ////
5
////                                                             ////
6
////  Downloaded from: http://www.opencores.org                  ////
7
/////////////////////////////////////////////////////////////////////
8
////                                                             ////
9
//// Copyright (C) 2010 Provartec LTD                            ////
10
//// www.provartec.com                                           ////
11
//// info@provartec.com                                          ////
12
////                                                             ////
13
//// This source file may be used and distributed without        ////
14
//// restriction provided that this copyright statement is not   ////
15
//// removed from the file and that any derivative work contains ////
16
//// the original copyright notice and the associated disclaimer.////
17
////                                                             ////
18
//// This source file is free software; you can redistribute it  ////
19
//// and/or modify it under the terms of the GNU Lesser General  ////
20
//// Public License as published by the Free Software Foundation.////
21
////                                                             ////
22
//// This source is distributed in the hope that it will be      ////
23
//// useful, but WITHOUT ANY WARRANTY; without even the implied  ////
24
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR     ////
25
//// PURPOSE.  See the GNU Lesser General Public License for more////
26
//// details. http://www.gnu.org/licenses/lgpl.html              ////
27
////                                                             ////
28
/////////////////////////////////////////////////////////////////////
29 2 eyalhoc
//---------------------------------------------------------
30
//-- File generated by RobustVerilog parser
31
//-- Version: 1.0
32
//-- Invoked Fri Mar 25 23:36:57 2011
33
//--
34
//-- Source file: dma_ch_fifo_ptr.v
35
//---------------------------------------------------------
36
 
37
 
38
 
39
module dma_axi64_core0_ch_fifo_ptr(clk,reset,joint_in_prog,wr_outstanding,ch_update,fifo_rd,fifo_rsize,slice_wr,slice_wr_fifo,slice_wsize,slice_rd,slice_rsize,rd_clr_line,wr_clr_line,wr_next_size,wr_burst_size,rd_ptr,wr_ptr,rd_line_remain,joint_delay,fifo_wr_ready,fifo_overflow,fifo_underflow);
40
 
41
   input               clk;
42
   input               reset;
43
 
44
   input               joint_in_prog;
45
   input               wr_outstanding;
46
   input               ch_update;
47
   input               fifo_rd;
48
   input [4-1:0]      fifo_rsize;
49
   input               slice_wr;
50
   input               slice_wr_fifo;
51
   input [4-1:0]      slice_wsize;
52
   input               slice_rd;
53
   input [4-1:0]      slice_rsize;
54
   input               rd_clr_line;
55
   input               wr_clr_line;
56
   input [4-1:0]      wr_next_size;
57
   input [8-1:0]     wr_burst_size;
58
 
59
   output [5-1:0]     rd_ptr;
60
   output [5-1:0]     wr_ptr;
61
   output [4-1:0]     rd_line_remain;
62
   output               joint_delay;
63
   output               fifo_wr_ready;
64
   output               fifo_overflow;
65
   output               fifo_underflow;
66
 
67
 
68
   wire [5-1:0]       rd_ptr_pre;
69
   wire [5-1:0]       wr_ptr_pre;
70
   reg [5-1:0]           rd_ptr;
71
   reg [5-1:0]           wr_ptr;
72
   wire [5+1:0]       fullness_pre; //signed
73
   reg [5+1:0]           fullness; //signed
74
   reg [4-1:0]           rd_line_remain;
75
   wire               joint_in_prog_d;
76
   reg                   joint_delay_reg;
77
   reg                   fifo_wr_ready;
78
   wire               fifo_overflow_pre;
79
   wire               fifo_underflow_pre;
80
   reg                   fifo_overflow;
81
   reg                   fifo_underflow;
82
 
83
 
84
 
85
   assign               wr_ptr_pre    = wr_ptr + ({4{slice_wr}} & slice_wsize);
86
   assign               rd_ptr_pre    = rd_ptr + ({4{slice_rd}} & slice_rsize);
87
 
88
   always @(posedge clk or posedge reset)
89
     if (reset)
90
       wr_ptr <= #1 {5{1'b0}};
91
     else if (ch_update)
92
       wr_ptr <= #1 {5{1'b0}};
93
     else if (slice_wr)
94
       wr_ptr <= #1 wr_ptr_pre;
95
 
96
   always @(posedge clk or posedge reset)
97
     if (reset)
98
       rd_ptr <= #1 {5{1'b0}};
99
     else if (ch_update)
100
       rd_ptr <= #1 {5{1'b0}};
101
     else if (slice_rd)
102
       rd_ptr <= #1 rd_ptr_pre;
103
 
104
   always @(posedge clk or posedge reset)
105
     if (reset)
106
       rd_line_remain <= #1 4'd8;
107
     else if (ch_update | wr_clr_line)
108
       rd_line_remain <= #1 4'd8;
109
     else if (slice_rd & (rd_line_remain == slice_rsize))
110
       rd_line_remain <= #1 4'd8;
111
     else if (slice_rd)
112
       rd_line_remain <= #1 rd_line_remain - slice_rsize;
113
 
114
 
115
   assign               fullness_pre = fullness +
116
                  ({4{slice_wr}} & slice_wsize) -
117
                ({4{fifo_rd}} & fifo_rsize);
118
 
119
 
120
   always @(posedge clk or posedge reset)
121
     if (reset)
122
       fullness <= #1 {5+2{1'b0}};
123
     else if (ch_update)
124
       fullness <= #1 {5+2{1'b0}};
125
     else if (fifo_rd | slice_wr)
126
       fullness <= #1 fullness_pre;
127
 
128
 
129
 
130
   prgen_delay #(1) delay_joint_in_prog (.clk(clk), .reset(reset), .din(joint_in_prog), .dout(joint_in_prog_d));
131
 
132
   always @(posedge clk or posedge reset)
133
     if (reset)
134
       joint_delay_reg <= #1 1'b0;
135
     else if (joint_in_prog & (~joint_in_prog_d))
136
       joint_delay_reg <= #1 fullness > 32 - 4'd8;
137
     else if (~joint_in_prog)
138
       joint_delay_reg <= #1 1'b0;
139
 
140
   assign               joint_delay = joint_delay_reg;
141
 
142
   always @(posedge clk or posedge reset)
143
     if (reset)
144
       fifo_wr_ready <= #1 1'b0;
145
     else if (joint_in_prog)
146
       fifo_wr_ready <= #1 1'b0;
147
     else if (|wr_next_size)
148
       fifo_wr_ready <= #1 fullness_pre >= wr_next_size;
149
 
150
   assign               fifo_underflow_pre =
151
                              fullness[5+1];
152
 
153
   assign               fifo_overflow_pre  = (~fullness[5+1]) & (fullness[5:0] > 32);
154
 
155
   always @(posedge clk or posedge reset)
156
     if (reset)
157
       begin
158
      fifo_overflow  <= #1 1'b0;
159
      fifo_underflow <= #1 1'b0;
160
       end
161
     else if (ch_update)
162
       begin
163
      fifo_overflow  <= #1 1'b0;
164
      fifo_underflow <= #1 1'b0;
165
       end
166
     else if ((!fifo_overflow) & (!fifo_underflow))
167
       begin
168
      fifo_overflow  <= #1 fifo_overflow_pre;
169
      fifo_underflow <= #1 fifo_underflow_pre;
170
       end
171
 
172
 
173
endmodule
174
 
175
 
176
 
177
 
178
 
179
 
180
 

powered by: WebSVN 2.1.0

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