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

Subversion Repositories sgmii

[/] [sgmii/] [trunk/] [src/] [mSyncFifo.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 jefflieu
/*
2
Developed By Subtleware Corporation Pte Ltd 2011
3
File            :
4
Description     :
5
Remarks         :
6
Revision        :
7
        Date    Author          Description
8
02/09/12        Jefflieu
9
*/
10
 
11
 
12
module mSyncFifo #(parameter pDataWidth=8,pPtrWidth=2)
13
        (
14
        input   [pDataWidth-1:00] iv_Din,
15
        input   i_Wr,
16
        output  o_Full,
17
        output  o_Empty,
18
        output  [pDataWidth-1:00] ov_Q,
19
        input   i_Rd,
20
        input   i_Clk,
21
        input   i_ARst_L);
22
 
23
 
24
        localparam pMemSize=2**pPtrWidth;
25
 
26
        reg [pDataWidth-1:00] rv_Ram [0:pMemSize-1];
27
 
28
        reg [pPtrWidth-1:00] rv_RdPtr;
29
        reg [pPtrWidth-1:00] rv_WrPtr;
30
        reg [pPtrWidth:00]       rv_Cntr;
31
 
32
        wire w_WrValid;
33
        wire w_RdValid;
34
 
35
        assign o_Full = (rv_Cntr==pMemSize)?1'b1:1'b0;
36
        assign o_Empty = (rv_Cntr==0)?1'b1:1'b0;
37
        assign w_WrValid = (~o_Full) & i_Wr;
38
        assign w_RdValid = (~o_Empty) & i_Rd;
39
        //DualPortRam
40
        always@(posedge i_Clk or negedge i_ARst_L)
41
        if(i_ARst_L==1'b0) begin
42
                        rv_RdPtr<={pPtrWidth{1'b0}};
43
                        rv_WrPtr<={pPtrWidth{1'b0}};
44
                        rv_Cntr <={(pPtrWidth+1){1'b0}};
45
        end else
46
        begin
47
                        if(w_WrValid)
48
                                begin
49
                                        rv_WrPtr <= rv_WrPtr+1;
50
                                        rv_Ram[rv_WrPtr] <= iv_Din;
51
                                end
52
                        if(w_RdValid)
53
                                        rv_RdPtr <= rv_RdPtr+1;
54
 
55
                        if(w_RdValid & (~w_WrValid))
56
                                        rv_Cntr <= rv_Cntr-1;
57
                        else if(w_WrValid & (~w_RdValid))
58
                                        rv_Cntr <= rv_Cntr+1;
59
        end
60
 
61
        assign ov_Q = rv_Ram[rv_RdPtr];
62
 
63
 
64
 
65
endmodule

powered by: WebSVN 2.1.0

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