SURF  1.0
SynchronizerFifo.vhd
Go to the documentation of this file.
1 -------------------------------------------------------------------------------
2 -- File : SynchronizerFifo.vhd
3 -- Company : SLAC National Accelerator Laboratory
4 -- Created : 2013-07-10
5 -- Last update: 2016-03-09
6 -------------------------------------------------------------------------------
7 -- Description: Synchronizing FIFO wrapper
8 -------------------------------------------------------------------------------
9 -- This file is part of 'SLAC Firmware Standard Library'.
10 -- It is subject to the license terms in the LICENSE.txt file found in the
11 -- top-level directory of this distribution and at:
12 -- https://confluence.slac.stanford.edu/display/ppareg/LICENSE.html.
13 -- No part of 'SLAC Firmware Standard Library', including this file,
14 -- may be copied, modified, propagated, or distributed except according to
15 -- the terms contained in the LICENSE.txt file.
16 -------------------------------------------------------------------------------
17 
18 library ieee;
19 use ieee.std_logic_1164.all;
20 use ieee.std_logic_arith.all;
21 use ieee.std_logic_unsigned.all;
22 
23 use work.StdRtlPkg.all;
24 
25 --! @see entity
26  --! @ingroup base_sync
28  generic (
29  TPD_G : time := 1 ns;
30  COMMON_CLK_G : boolean := false; -- Bypass FifoAsync module for synchronous data configuration
31  BRAM_EN_G : boolean := false;
32  ALTERA_SYN_G : boolean := false;
33  ALTERA_RAM_G : string := "M9K";
34  SYNC_STAGES_G : integer range 3 to (2**24) := 3;
35  PIPE_STAGES_G : natural range 0 to 16 := 0;
36  DATA_WIDTH_G : integer range 1 to (2**24) := 16;
37  ADDR_WIDTH_G : integer range 2 to 48 := 4;
38  INIT_G : slv := "0");
39  port (
40  -- Asynchronous Reset
41  rst : in sl := '0';
42  -- Write Ports (wr_clk domain)
43  wr_clk : in sl;
44  wr_en : in sl := '1';
45  din : in slv(DATA_WIDTH_G-1 downto 0);
46  -- Read Ports (rd_clk domain)
47  rd_clk : in sl;
48  rd_en : in sl := '1';
49  valid : out sl;
50  dout : out slv(DATA_WIDTH_G-1 downto 0));
51 end SynchronizerFifo;
52 
53 architecture rtl of SynchronizerFifo is
54 
55  constant INIT_C : slv(DATA_WIDTH_G-1 downto 0) := ite(INIT_G = "0", slvZero(DATA_WIDTH_G), INIT_G);
56 
57 begin
58 
59  assert (INIT_G = "0" or INIT_G'length = DATA_WIDTH_G) report
60  "INIT_G must either be ""0"" or the same length as DATA_WIDTH_G" severity failure;
61 
62  GEN_ASYNC : if (COMMON_CLK_G = false) generate
63 
64  FifoAsync_1 : entity work.FifoAsync
65  generic map (
66  TPD_G => TPD_G,
68  FWFT_EN_G => true,
75  INIT_G => INIT_C)
76  port map (
77  rst => rst,
78  wr_clk => wr_clk,
79  wr_en => wr_en,
80  din => din,
81  wr_data_count => open,
82  wr_ack => open,
83  overflow => open,
84  prog_full => open,
85  almost_full => open,
86  full => open,
87  rd_clk => rd_clk,
88  rd_en => rd_en,
89  dout => dout,
90  rd_data_count => open,
91  valid => valid,
92  underflow => open,
93  prog_empty => open,
94  almost_empty => open,
95  empty => open);
96  end generate;
97 
98  GEN_SYNC : if (COMMON_CLK_G = true) generate
99 
100  dout <= din;
101  valid <= wr_en;
102 
103  end generate;
104 
105 end architecture rtl;
in rstsl
Definition: FifoAsync.vhd:45
in wr_clksl
Definition: FifoAsync.vhd:47
_library_ ieeeieee
out almost_fullsl
Definition: FifoAsync.vhd:54
std_logic sl
Definition: StdRtlPkg.vhd:28
in rd_clksl
Definition: FifoAsync.vhd:58
in dinslv( DATA_WIDTH_G- 1 downto 0)
in wr_ensl
Definition: FifoAsync.vhd:48
PIPE_STAGES_Gnatural range 0 to 16:= 0
Definition: FifoAsync.vhd:37
ADDR_WIDTH_Ginteger range 2 to 48:= 4
SYNC_STAGES_Ginteger range 3 to ( 2** 24):= 3
Definition: FifoAsync.vhd:36
PIPE_STAGES_Gnatural range 0 to 16:= 0
in rd_ensl
Definition: FifoAsync.vhd:59
BRAM_EN_Gboolean := false
out underflowsl
Definition: FifoAsync.vhd:63
out doutslv( DATA_WIDTH_G- 1 downto 0)
Definition: FifoAsync.vhd:60
out doutslv( DATA_WIDTH_G- 1 downto 0)
out prog_emptysl
Definition: FifoAsync.vhd:64
DATA_WIDTH_Ginteger range 1 to ( 2** 24):= 16
Definition: FifoAsync.vhd:38
ALTERA_RAM_Gstring := "M9K"
ALTERA_SYN_Gboolean := false
Definition: FifoAsync.vhd:34
INIT_Gslv := "0"
Definition: FifoAsync.vhd:40
ALTERA_RAM_Gstring := "M9K"
Definition: FifoAsync.vhd:35
out prog_fullsl
Definition: FifoAsync.vhd:53
COMMON_CLK_Gboolean := false
ADDR_WIDTH_Ginteger range 2 to 48:= 4
Definition: FifoAsync.vhd:39
out wr_acksl
Definition: FifoAsync.vhd:51
ALTERA_SYN_Gboolean := false
out emptysl
Definition: FifoAsync.vhd:66
SYNC_STAGES_Ginteger range 3 to ( 2** 24):= 3
out rd_data_countslv( ADDR_WIDTH_G- 1 downto 0)
Definition: FifoAsync.vhd:61
out overflowsl
Definition: FifoAsync.vhd:52
FWFT_EN_Gboolean := false
Definition: FifoAsync.vhd:32
in dinslv( DATA_WIDTH_G- 1 downto 0)
Definition: FifoAsync.vhd:49
out fullsl
Definition: FifoAsync.vhd:55
out wr_data_countslv( ADDR_WIDTH_G- 1 downto 0)
Definition: FifoAsync.vhd:50
out validsl
Definition: FifoAsync.vhd:62
BRAM_EN_Gboolean := true
Definition: FifoAsync.vhd:31
DATA_WIDTH_Ginteger range 1 to ( 2** 24):= 16
std_logic_vector slv
Definition: StdRtlPkg.vhd:29
TPD_Gtime := 1 ns
Definition: FifoAsync.vhd:29
out almost_emptysl
Definition: FifoAsync.vhd:65