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

Subversion Repositories instruction_list_pipelined_processor_with_peripherals

[/] [instruction_list_pipelined_processor_with_peripherals/] [trunk/] [hdl/] [uartFifo.v] - Blame information for rev 8

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

Line No. Rev Author Line
1 3 maheshpalv
 
2
`include "timescale.v"
3
`include "defines.v"
4
 
5
 
6
module uartFifo(clk, reset, wData, rData, wr, rd, full, empty);
7
 
8
                parameter dataBits = `dataBits;
9
                parameter fifoWidth = `fifoWidth;
10
                parameter fiforegs = `number_fifo_regs;
11
                parameter fifoCntrWidth = `fifoCntrWidth;
12
                parameter fifodepth = `fifoDepth;
13
 
14
        //      integer i;
15
 
16
                input [dataBits-1 : 0] wData;
17
                input clk, reset, rd, wr;
18
                output [`dataBits-1 : 0] rData;
19
                output full, empty;
20
 
21
                reg [dataBits-1 : 0] fifoReg [0:fiforegs-1];
22
 
23
                reg [dataBits-1 : 0] rData;
24
 
25
                reg full=1'b0, empty=1'b1;
26
 
27
                // pointers
28
                reg [fifoWidth-1 : 0] top = 4'b1111, bottom = 4'b1111;
29
                wire [fifoWidth-1 : 0] topPlusOne = top + 1'b1;
30
 
31
                //counter
32
                reg [fifoCntrWidth-1 : 0] cntr = 0;
33
 
34
 
35
                        always @ (posedge clk or posedge reset)
36
                        begin
37
 
38
                                if (reset)
39
                                begin
40
                                                top = 0;
41
                                                bottom = 0;
42
 
43
                                                fifoReg[0] = 0;
44
                                                fifoReg[1] = 0;
45
                                                fifoReg[2] = 0;
46
                                                fifoReg[3] = 0;
47
                                                fifoReg[4] = 0;
48
                                                fifoReg[5] = 0;
49
                                                fifoReg[6] = 0;
50
                                                fifoReg[7] = 0;
51
                                                fifoReg[8] = 0;
52
                                                fifoReg[9] = 0;
53
                                                fifoReg[10] = 0;
54
                                                fifoReg[11] = 0;
55
                                                fifoReg[12] = 0;
56
                                                fifoReg[13] = 0;
57
                                                fifoReg[14] = 0;
58
                                                fifoReg[15] = 0;
59
                                end //end if(reset)
60
 
61
 
62
 
63
                                else
64
                                begin
65
 
66
                                        case ({rd, wr})
67
 
68
                                                2'b 01  :       if (cntr <= fifodepth)
69
                                                                                begin
70
                                                                                fifoReg[top] = wData;
71
                                                                                top = topPlusOne;
72
                                                                                cntr = cntr + 1'b1;
73
                                                                                end
74
 
75
                                                2'b 10  :       if (cntr > 0)
76
                                                                                begin
77
                                                                                rData = fifoReg[bottom];
78
                                                                                fifoReg[bottom] = 0;
79
                                                                                bottom = bottom + 1'b1;
80
                                                                                cntr = cntr - 1'b1;
81
 
82
                                                                                end
83
 
84
                                                2'b 11  :       if ((cntr >0) & (cntr <= fifodepth))
85
                                                                                begin
86
                                                                                rData = fifoReg[bottom];
87
                                                                                fifoReg[bottom] = 0;
88
                                                                                bottom = bottom + 1'b1;
89
                                                                                fifoReg[top] = wData;
90
                                                                                top = topPlusOne;
91
                                                                                end
92
 
93
                                                default :       ;
94
                                        endcase
95
 
96
                                end // end else
97
 
98
                        end // end always
99
 
100
                        //assign rData = fifoReg[bottom];
101
 
102
                        always @ (posedge clk or posedge reset)
103
                        begin
104
 
105
                                if (reset)
106
                                begin
107
                                        full <= 1'b0;
108
                                        empty <= 1'b1;  end
109
 
110
                                else
111
                                begin
112
                                        if(~rd & (cntr>=(fifodepth-1)))
113
                                        begin
114
                                                full <= 1'b1;
115
                                                //$display ($time, " ns \t * FIFO FULL ");
116
                                                empty <= 1'b0;  end
117
 
118
                                        else if (~wr & (cntr==4'b0000))
119
                                        begin
120
                                                empty <= 1'b1;
121
                                                full <= 1'b0;   end
122
 
123
                                        else if ((cntr != 0) | (cntr != fifodepth))
124
                                        begin
125
                                                empty <= 1'b0;
126
                                                full <= 1'b0;   end
127
                                        end     // end else i.e. (!reset)
128
 
129
                        end     // end always 
130
 
131
 
132
                        always @ *
133
                        begin
134
 
135
                                if (full & wr)
136
                                $display ($time, "ns \t\t attempting to write to full fifo.... data overwritten");
137
 
138
                                else
139
                                if (empty & rd)
140
                                $display ($time, "ns \t\t attempting to read from empty fifo...");
141
 
142
                        end
143
 
144
 
145
endmodule

powered by: WebSVN 2.1.0

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