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

Subversion Repositories qaz_libs

[/] [qaz_libs/] [trunk/] [basal/] [src/] [FIFOs/] [sync_fifo.sv] - Blame information for rev 50

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 34 qaztronic
//////////////////////////////////////////////////////////////////////
2
////                                                              ////
3
//// Copyright (C) 2015 Authors and OPENCORES.ORG                 ////
4
////                                                              ////
5
//// This source file may be used and distributed without         ////
6
//// restriction provided that this copyright statement is not    ////
7
//// removed from the file and that any derivative work contains  ////
8
//// the original copyright notice and the associated disclaimer. ////
9
////                                                              ////
10
//// This source file is free software; you can redistribute it   ////
11
//// and/or modify it under the terms of the GNU Lesser General   ////
12
//// Public License as published by the Free Software Foundation; ////
13
//// either version 2.1 of the License, or (at your option) any   ////
14
//// later version.                                               ////
15
////                                                              ////
16
//// This source is distributed in the hope that it will be       ////
17
//// useful, but WITHOUT ANY WARRANTY; without even the implied   ////
18
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      ////
19
//// PURPOSE.  See the GNU Lesser General Public License for more ////
20
//// details.                                                     ////
21
////                                                              ////
22
//// You should have received a copy of the GNU Lesser General    ////
23
//// Public License along with this source; if not, download it   ////
24
//// from http://www.opencores.org/lgpl.shtml                     ////
25
////                                                              ////
26
//////////////////////////////////////////////////////////////////////
27
 
28
module
29
  sync_fifo
30
  #(
31
    W = 8,
32
    D = 16,
33
    UB = $clog2(D)
34
  )
35
  (
36
    output            wr_full,
37
    input   [W-1:0]   wr_data,
38
    input             wr_en,
39
    output            rd_empty,
40
    output  [W-1:0]   rd_data,
41
    input             rd_en,
42
    output  [UB:0]    count,
43
    input             clk,
44
    input             reset
45
  );
46
 
47
  // --------------------------------------------------------------------
48
  generate
49
    begin: fifo_gen
50
      if(D == 2)
51
      begin
52 50 qaztronic
        reg [UB:0] count_r;
53
        assign count = count_r;
54
 
55
        always_comb
56
          case({wr_full, rd_empty})
57
            2'b0_0: count_r = 1;
58
            2'b0_1: count_r = 0;
59
            2'b1_0: count_r = 2;
60
            2'b1_1: count_r = 'x; // should never happen
61
          endcase
62
 
63 34 qaztronic
        tiny_sync_fifo #(.W(W))
64
          tiny_sync_fifo_i(.*);
65
      end
66
      else
67
      begin
68
        bc_sync_fifo #(.depth(D), .width(W))
69
          bc_sync_fifo_i
70
          (
71
            .wr_enable(wr_en),
72
            .rd_enable(rd_en),
73
            .empty(rd_empty),
74
            .full(wr_full),
75
            .count(count),
76
            .*
77
           );
78
      end
79
    end
80
  endgenerate
81
 
82
// --------------------------------------------------------------------
83 38 qaztronic
// synthesis translate_off
84
  always_ff @(posedge clk)
85
    if(wr_en & wr_full)
86
      $stop;
87
  always_ff @(posedge clk)
88
    if(rd_en & rd_empty)
89
      $stop;
90
// synthesis translate_on
91
// --------------------------------------------------------------------
92
 
93
// --------------------------------------------------------------------
94 34 qaztronic
endmodule

powered by: WebSVN 2.1.0

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