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

Subversion Repositories dma_axi

[/] [dma_axi/] [trunk/] [src/] [dma_axi32/] [dma_axi32_core0_ch_fifo_ptr.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
//-- File generated by RobustVerilog parser
3
//-- Version: 1.0
4
//-- Invoked Fri Mar 25 23:34:54 2011
5
//--
6
//-- Source file: dma_ch_fifo_ptr.v
7
//---------------------------------------------------------
8
 
9
 
10
 
11
module dma_axi32_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);
12
 
13
   input               clk;
14
   input               reset;
15
 
16
   input               joint_in_prog;
17
   input               wr_outstanding;
18
   input               ch_update;
19
   input               fifo_rd;
20
   input [3-1:0]      fifo_rsize;
21
   input               slice_wr;
22
   input               slice_wr_fifo;
23
   input [3-1:0]      slice_wsize;
24
   input               slice_rd;
25
   input [3-1:0]      slice_rsize;
26
   input               rd_clr_line;
27
   input               wr_clr_line;
28
   input [3-1:0]      wr_next_size;
29
   input [7-1:0]     wr_burst_size;
30
 
31
   output [5-1:0]     rd_ptr;
32
   output [5-1:0]     wr_ptr;
33
   output [3-1:0]     rd_line_remain;
34
   output               joint_delay;
35
   output               fifo_wr_ready;
36
   output               fifo_overflow;
37
   output               fifo_underflow;
38
 
39
 
40
   wire [5-1:0]       rd_ptr_pre;
41
   wire [5-1:0]       wr_ptr_pre;
42
   reg [5-1:0]           rd_ptr;
43
   reg [5-1:0]           wr_ptr;
44
   wire [5+1:0]       fullness_pre; //signed
45
   reg [5+1:0]           fullness; //signed
46
   reg [3-1:0]           rd_line_remain;
47
   wire               joint_in_prog_d;
48
   reg                   joint_delay_reg;
49
   reg                   fifo_wr_ready;
50
   wire               fifo_overflow_pre;
51
   wire               fifo_underflow_pre;
52
   reg                   fifo_overflow;
53
   reg                   fifo_underflow;
54
 
55
 
56
 
57
   assign               wr_ptr_pre    = wr_ptr + ({3{slice_wr}} & slice_wsize);
58
   assign               rd_ptr_pre    = rd_ptr + ({3{slice_rd}} & slice_rsize);
59
 
60
   always @(posedge clk or posedge reset)
61
     if (reset)
62
       wr_ptr <= #1 {5{1'b0}};
63
     else if (ch_update)
64
       wr_ptr <= #1 {5{1'b0}};
65
     else if (slice_wr)
66
       wr_ptr <= #1 wr_ptr_pre;
67
 
68
   always @(posedge clk or posedge reset)
69
     if (reset)
70
       rd_ptr <= #1 {5{1'b0}};
71
     else if (ch_update)
72
       rd_ptr <= #1 {5{1'b0}};
73
     else if (slice_rd)
74
       rd_ptr <= #1 rd_ptr_pre;
75
 
76
   always @(posedge clk or posedge reset)
77
     if (reset)
78
       rd_line_remain <= #1 3'd4;
79
     else if (ch_update | wr_clr_line)
80
       rd_line_remain <= #1 3'd4;
81
     else if (slice_rd & (rd_line_remain == slice_rsize))
82
       rd_line_remain <= #1 3'd4;
83
     else if (slice_rd)
84
       rd_line_remain <= #1 rd_line_remain - slice_rsize;
85
 
86
 
87
   assign               fullness_pre = fullness +
88
                  ({3{slice_wr}} & slice_wsize) -
89
                ({3{fifo_rd}} & fifo_rsize);
90
 
91
 
92
   always @(posedge clk or posedge reset)
93
     if (reset)
94
       fullness <= #1 {5+2{1'b0}};
95
     else if (ch_update)
96
       fullness <= #1 {5+2{1'b0}};
97
     else if (fifo_rd | slice_wr)
98
       fullness <= #1 fullness_pre;
99
 
100
 
101
 
102
   prgen_delay #(1) delay_joint_in_prog (.clk(clk), .reset(reset), .din(joint_in_prog), .dout(joint_in_prog_d));
103
 
104
   always @(posedge clk or posedge reset)
105
     if (reset)
106
       joint_delay_reg <= #1 1'b0;
107
     else if (joint_in_prog & (~joint_in_prog_d))
108
       joint_delay_reg <= #1 fullness > 32 - 3'd4;
109
     else if (~joint_in_prog)
110
       joint_delay_reg <= #1 1'b0;
111
 
112
   assign               joint_delay = joint_delay_reg;
113
 
114
   always @(posedge clk or posedge reset)
115
     if (reset)
116
       fifo_wr_ready <= #1 1'b0;
117
     else if (joint_in_prog)
118
       fifo_wr_ready <= #1 1'b0;
119
     else if (|wr_next_size)
120
       fifo_wr_ready <= #1 fullness_pre >= wr_next_size;
121
 
122
   assign               fifo_underflow_pre =
123
                              fullness[5+1];
124
 
125
   assign               fifo_overflow_pre  = (~fullness[5+1]) & (fullness[5:0] > 32);
126
 
127
   always @(posedge clk or posedge reset)
128
     if (reset)
129
       begin
130
      fifo_overflow  <= #1 1'b0;
131
      fifo_underflow <= #1 1'b0;
132
       end
133
     else if (ch_update)
134
       begin
135
      fifo_overflow  <= #1 1'b0;
136
      fifo_underflow <= #1 1'b0;
137
       end
138
     else if ((!fifo_overflow) & (!fifo_underflow))
139
       begin
140
      fifo_overflow  <= #1 fifo_overflow_pre;
141
      fifo_underflow <= #1 fifo_underflow_pre;
142
       end
143
 
144
 
145
endmodule
146
 
147
 
148
 
149
 
150
 
151
 
152
 

powered by: WebSVN 2.1.0

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