OpenCores
URL https://opencores.org/ocsvn/1g_ethernet_dpi/1g_ethernet_dpi/trunk

Subversion Repositories 1g_ethernet_dpi

[/] [1g_ethernet_dpi/] [tags/] [vmblite_base/] [hw/] [src/] [rtl/] [wb_uart/] [hdl/] [wb_uart_mscfifo.v] - Blame information for rev 7

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 7 kuzmi4
//////////////////////////////////////////////////////////////////////////////////
2
// Company:         
3
// Engineer:        IK
4
// 
5
// Create Date:     
6
// Design Name:     
7
// Module Name:     wb_uart_mscfifo
8
// Project Name:    
9
// Target Devices:  
10
// Tool versions:   
11
// Description:     
12
//                  
13
//                  single clock FWFT FIFO
14
//                  
15
//                  
16
//                  
17
// Revision: 
18
// Revision 0.01 - File Created, 
19
//
20
//////////////////////////////////////////////////////////////////////////////////
21
`timescale 1ns / 1ps
22
 
23
module wb_uart_mscfifo #(parameter p_DW = 0, p_AW = 0)
24
(
25
    // SYS_CON
26
    input   i_clk,
27
    input   i_arst,
28
    // DIN
29
    input               i_wr,
30
    input   [p_DW-1:0]  iv_data,
31
    // DOUT
32
    input               i_rd,
33
    output  [p_DW-1:0]  ov_data,
34
    // STS-OUT
35
    output  [p_AW-1:0]  ov_count,
36
    output              o_full,
37
    output  reg         o_empty
38
);
39
//////////////////////////////////////////////////////////////////////////////////
40
    // LEN
41
    reg     [p_AW-1:0]  sv_length;
42
    wire                s_last_data;
43
    // ADDR
44
    reg     [p_AW-1:0]  sv_raddr;
45
    reg     [p_AW-1:0]  sv_waddr;
46
    wire                s_rd;
47
    reg                 s_1st_wr;
48
    // FWFT
49
    reg                 s_fwft_flag;
50
    reg     [p_DW-1:0]  sv_fwft_data;
51
    // BRAM
52
    wire    [p_DW-1:0]  sv_data_bram;
53
 
54
//////////////////////////////////////////////////////////////////////////////////
55
    // LAST-DATA flag
56
    assign  s_last_data =   (sv_length == 1);
57
    // inner-RD 
58
    assign  s_rd        =   s_1st_wr | (i_rd & ((!s_last_data & !o_empty) | i_wr));
59
    //
60
    // DOUT
61
    assign  ov_data     =   (s_fwft_flag)? sv_fwft_data : sv_data_bram;
62
    // FF
63
    assign  o_full      =   (sv_length == {p_AW{1'b1}});
64
    // CNT
65
    assign  ov_count    =   sv_length;
66
 
67
//////////////////////////////////////////////////////////////////////////////////
68
//
69
// Construct FIFO-CTRL logic
70
//
71
always @ (posedge i_clk or posedge i_arst)
72
begin   :   FIFO_CTRL_LOGIC
73
    if (i_arst)
74
        begin   :   RST
75
            sv_length <= 0;
76
            s_1st_wr <= 0;
77
            sv_raddr <= 0;
78
            sv_waddr <= 0;
79
            s_fwft_flag <= 0;
80
            sv_fwft_data <= 0;
81
        end
82
    else
83
        begin   :   WRK
84
            // FIFO-LEN
85
            if (i_wr & !i_rd & !o_full)
86
                sv_length <= sv_length + 1'b1;
87
            else if (!i_wr & i_rd & !o_empty)
88
                sv_length <= sv_length - 1'b1;
89
            // 1st-wr flag (in empty fifo)
90
            s_1st_wr <= i_wr & (sv_length == 0);
91
            // rd-addr
92
            if (s_rd)
93
                sv_raddr <= sv_raddr + 1'b1;
94
            // wr-addr
95
            if (i_wr)
96
                sv_waddr <= sv_waddr + 1'b1;
97
            // fwft-flag
98
            if (i_rd & !i_wr)
99
                s_fwft_flag <= 0;
100
            else if (i_rd & i_wr & s_last_data)
101
                s_fwft_flag <= 1;
102
            // fwft-data
103
            if (i_rd & i_wr & s_last_data)
104
                sv_fwft_data <= iv_data;
105
        end
106
end
107
//////////////////////////////////////////////////////////////////////////////////
108
//
109
// Construct EF
110
//
111
always @ (posedge i_clk or posedge i_arst)
112
begin   :   EF_LOGIC
113
    if (i_arst)
114
        begin   :   RST
115
            o_empty <= 1;
116
        end
117
    else
118
        begin   :   WRK
119
            if (s_1st_wr)
120
                o_empty <= 0;
121
            else if (i_rd & !i_wr & s_last_data)
122
                o_empty <= 1;
123
        end
124
end
125
//////////////////////////////////////////////////////////////////////////////////
126
//
127
// Instantiate BRAM
128
//
129
sdpram      #(p_DW, p_AW) // p_DW, p_AW
130
            U_SDPRAM
131
(
132
// SYS_CON
133
.i_clk      (i_clk),
134
// IN / port-a
135
.i_we_a     (i_wr),
136
.iv_addr_a  (sv_waddr),
137
.iv_data_a  (iv_data),
138
// OUT / port-b
139
.i_rd_b     (s_rd),
140
.iv_addr_b  (sv_raddr),
141
.ov_data_b  (sv_data_bram)
142
);
143
//////////////////////////////////////////////////////////////////////////////////
144
endmodule

powered by: WebSVN 2.1.0

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