Belle II KLM Scint Firmware  1
klm_aurora_intfc.vhd
1 --*********************************************************************************
2 -- Indiana University
3 -- Center for Exploration of Energy and Matter (CEEM)
4 --
5 -- Project: Belle-II
6 --
7 -- Author: Brandon Kunkler
8 --
9 -- Date: 06/25/2014
10 --
11 --*********************************************************************************
12 -- Description:
13 -- Top level Aurora entity.
14 -- Deficiencies/Issues:
15 -- 1) CK: Xst:2972 All outputs of instance <std_cc_module_i> of block <STANDARD_CC_MODULE>
16 -- are unconnected in block <klm_aurora_intfc>. Underlying logic will be removed.
17 --*********************************************************************************
18 library ieee;
19 use ieee.std_logic_1164.all;
20 use ieee.std_logic_misc.all;
21 use work.aurora_pkg.all;
22 
24  generic(
25  SIM_GTPRESET_SPEEDUP : integer := 1;
26  CLK_CORRECT_USE : boolean := TRUE);--Set to true to use clock correction
27  port(
28  refseldypll : std_logic_vector(2 downto 0);
29  ref_clk0 : in std_logic;
30  ref_clk1 : in std_logic;
31  user_clk : in std_logic;
32  sync_clk : in std_logic;
33  reset : in std_logic;
34  gt_reset : in std_logic;
35  plllock : in std_logic;
36  -- LocalLink TX Interface
37  tx_dst_rdy_n : out std_logic;
38  tx_src_rdy_n : in std_logic;
39  tx_sof_n : in std_logic;
40  tx_eof_n : in std_logic;
41  tx_d : in std_logic_vector(0 to 15);
42  tx_rem : in std_logic;
43  -- LocalLink RX Interface
44  rx_src_rdy_n : out std_logic;
45  rx_sof_n : out std_logic;
46  rx_eof_n : out std_logic;
47  rx_rem : out std_logic;
48  rx_d : out std_logic_vector(0 to 15);
49  -- Status
50  gtlock : out std_logic;
51  hard_err : out std_logic;
52  soft_err : out std_logic;
53  frame_err : out std_logic;
54  channel_up : out std_logic;
55  lane_up : out std_logic;
56  warn_cc : out std_logic;
57  do_cc : out std_logic;
58  -- Control
59  powerdown : in std_logic;
60  loopback : in std_logic_vector(2 downto 0);
61  -- GT I/O
62  rxp : in std_logic;
63  rxn : in std_logic;
64  txp : out std_logic;
65  txn : out std_logic);
66 end klm_aurora_intfc;
67 
68 architecture MAPPED of klm_aurora_intfc is
69 
70  signal hard_err_i : std_logic;
71  signal soft_err_i : std_logic;
72  signal frame_err_i : std_logic;
73  -- Status
74  signal channel_up_i : std_logic;
75  signal lane_up_i : std_logic;
76  -- Clock Compensation Control Interface
77  signal warn_cc_i : std_logic;
78  signal do_cc_i : std_logic;
79  -- System Interface
80  signal plllockn_i : std_logic := '1';
81  signal tx_lock_i : std_logic;
82  signal rxeqmix_in_i : std_logic_vector(1 downto 0);
83  signal daddr_in_i : std_logic_vector(7 downto 0);
84  signal dclk_in_i : std_logic;
85  signal den_in_i : std_logic;
86  signal di_in_i : std_logic_vector(15 downto 0);
87  signal drdy_out_unused_i : std_logic;
88  signal drpdo_out_unused_i : std_logic_vector(15 downto 0);
89  signal dwe_in_i : std_logic;
90  signal rst_cc_module_i : std_logic;
91 
92  signal warn_cc_mdl : std_logic;
93  signal do_cc_mdl : std_logic;
94 
95  -- Component Declarations --
96  component klm_aurora
97  generic(
98  SIM_GTPRESET_SPEEDUP : integer := 1;
99  CLK_CORRECT_USE : boolean := TRUE);
100  port(
101  -- LocalLink TX Interface
102  TX_D : in std_logic_vector(0 to 15);
103  TX_REM : in std_logic;
104  TX_SRC_RDY_N : in std_logic;
105  TX_SOF_N : in std_logic;
106  TX_EOF_N : in std_logic;
107  TX_DST_RDY_N : out std_logic;
108  -- LocalLink RX Interface
109  RX_D : out std_logic_vector(0 to 15);
110  RX_REM : out std_logic;
111  RX_SRC_RDY_N : out std_logic;
112  RX_SOF_N : out std_logic;
113  RX_EOF_N : out std_logic;
114  -- GT Serial I/O
115  RXP : in std_logic;
116  RXN : in std_logic;
117  TXP : out std_logic;
118  TXN : out std_logic;
119  -- GT Reference Clock Interface
120  REFSELDYPLL : in std_logic_vector(2 downto 0);
121  REFCLK0 : in std_logic;
122  REFCLK1 : in std_logic;
123  GCLK : in std_logic;
124  -- Error Detection Interface
125  HARD_ERR : out std_logic;
126  SOFT_ERR : out std_logic;
127  FRAME_ERR : out std_logic;
128  -- Status
129  CHANNEL_UP : out std_logic;
130  LANE_UP : out std_logic;
131  -- Clock Compensation Control Interface
132  WARN_CC : in std_logic;
133  DO_CC : in std_logic;
134  -- System Interface
135  USER_CLK : in std_logic;
136  SYNC_CLK : in std_logic;
137  GT_RESET : in std_logic;
138  RESET : in std_logic;
139  POWER_DOWN : in std_logic;
140  LOOPBACK : in std_logic_vector(2 downto 0);
141  GTPCLKOUT : out std_logic;
142  RXEQMIX_IN : in std_logic_vector(1 downto 0);
143  DADDR_IN : in std_logic_vector(7 downto 0);
144  DCLK_IN : in std_logic;
145  DEN_IN : in std_logic;
146  DI_IN : in std_logic_vector(15 downto 0);
147  DRDY_OUT : out std_logic;
148  DRPDO_OUT : out std_logic_vector(15 downto 0);
149  DWE_IN : in std_logic;
150  TX_LOCK : out std_logic);
151  end component;
152 
153  component STANDARD_CC_MODULE
154  port (
155  -- Clock Compensation Control Interface
156  WARN_CC : out std_logic;
157  DO_CC : out std_logic;
158  -- System Interface
159  USER_CLK : in std_logic;
160  RESET : in std_logic);
161  end component;
162 
163 begin
164 
165  -- Module Instantiations --
166  klm_aurora_ins : klm_aurora
167  generic map(
168  SIM_GTPRESET_SPEEDUP => SIM_GTPRESET_SPEEDUP,
169  CLK_CORRECT_USE => CLK_CORRECT_USE)
170  port map(
171  -- LocalLink TX Interface
172  TX_D => tx_d,
173  TX_REM => tx_rem,
174  TX_SRC_RDY_N => tx_src_rdy_n,
175  TX_SOF_N => tx_sof_n,
176  TX_EOF_N => tx_eof_n,
177  TX_DST_RDY_N => tx_dst_rdy_n,
178  -- LocalLink RX Interface
179  RX_D => rx_d,
180  RX_REM => rx_rem,
181  RX_SRC_RDY_N => rx_src_rdy_n,
182  RX_SOF_N => rx_sof_n,
183  RX_EOF_N => rx_eof_n,
184  -- GT Serial I/O
185  RXP => rxp,
186  RXN => rxn,
187  TXP => txp,
188  TXN => txn,
189  -- GT Reference Clock Interface
190  REFSELDYPLL => refseldypll,
191  REFCLK0 => ref_clk0,
192  REFCLK1 => ref_clk1,
193  GCLK => user_clk,
194  -- Error Detection Interface
195  HARD_ERR => hard_err_i,
196  SOFT_ERR => soft_err_i,
197  FRAME_ERR => frame_err_i,
198  -- Status
199  CHANNEL_UP => channel_up_i,
200  LANE_UP => lane_up_i,
201  -- Clock Compensation Control Interface
202  WARN_CC => warn_cc_i,
203  DO_CC => do_cc_i,
204  -- System Interface
205  USER_CLK => user_clk,
206  SYNC_CLK => sync_clk,
207  RESET => reset,
208  POWER_DOWN => powerdown,
209  LOOPBACK => loopback,
210  GT_RESET => gt_reset,
211  GTPCLKOUT => open,
212  RXEQMIX_IN => rxeqmix_in_i,
213  DADDR_IN => daddr_in_i,
214  DCLK_IN => dclk_in_i,
215  DEN_IN => den_in_i,
216  DI_IN => di_in_i,
217  DRDY_OUT => drdy_out_unused_i,
218  DRPDO_OUT => drpdo_out_unused_i,
219  DWE_IN => dwe_in_i,
220  TX_LOCK => tx_lock_i
221  );
222 
223  std_cc_module_i : STANDARD_CC_MODULE
224  port map(
225  -- Clock Compensation Control Interface
226  WARN_CC => warn_cc_mdl,
227  DO_CC => do_cc_mdl,
228  -- System Interface
229  USER_CLK => user_clk,
230  RESET => rst_cc_module_i
231  );
232 
233  --Clock correct logic generation
234  CCLT_GEN : if CLK_CORRECT_USE = TRUE generate
235  warn_cc_i <= warn_cc_mdl;
236  do_cc_i <= do_cc_mdl;
237  end generate;
238  CCLF_GEN : if CLK_CORRECT_USE = FALSE generate
239  warn_cc_i <= '0';
240  do_cc_i <= '0';
241  end generate;
242 
243  -- GTX control ports
244  rxeqmix_in_i <= "11";
245  daddr_in_i <= (others=>'0');
246  dclk_in_i <= '0';
247  den_in_i <= '0';
248  di_in_i <= (others=>'0');
249  dwe_in_i <= '0';
250  rst_cc_module_i <= not lane_up_i;
251 
252  -- Register core user ports
253  pipeline_pcs : process (user_clk)
254  begin
255  if (user_clk 'event and user_clk = '1') then
256  plllockn_i <= not plllock;
257  gtlock <= tx_lock_i;
258  hard_err <= hard_err_i;
259  soft_err <= soft_err_i;
260  frame_err <= frame_err_i;
261  lane_up <= lane_up_i;
262  channel_up <= channel_up_i;
263  warn_cc <= warn_cc_i;
264  do_cc <= do_cc_i;
265  end if;
266  end process;
267 
268 end MAPPED;