9 use IEEE.STD_LOGIC_1164.
all;
10 use ieee.numeric_std.
all;
12 use ipbus_lib.ipbus.
all;
18 clk280 : in std_logic_vector(3 downto 0);
19 ipb_clk : in std_logic;
20 ipb_rst : in std_logic;
22 ipb_out : out ipb_rbus;
23 loopback : out std_logic_vector(2 downto 0);
24 bc_reg_sel : out std_logic_vector(15 downto 0);
25 mux_sel : out std_logic_vector(15 downto 0);
26 softreset_tx : out std_logic;
27 softreset_rx : out std_logic;
28 qpll_lock : in std_logic;
29 qpll_refclklost : in std_logic;
30 tx_pd : in std_logic_vector(3 downto 0);
31 rx_pd : in std_logic_vector(3 downto 0);
32 bc_cntr_0 : in std_logic_vector(4 downto 0);
33 bc_cntr_1 : in std_logic_vector(4 downto 0);
34 bc_cntr_2 : in std_logic_vector(4 downto 0);
35 bc_cntr_3 : in std_logic_vector(4 downto 0);
36 bc_mux_cntr_0 : in std_logic_vector(4 downto 0);
37 bc_mux_cntr_1 : in std_logic_vector(4 downto 0);
38 bc_mux_cntr_2 : in std_logic_vector(4 downto 0);
39 bc_mux_cntr_3 : in std_logic_vector(4 downto 0);
40 delay_cntr_0 : in std_logic_vector (3 downto 0);
41 delay_cntr_1 : in std_logic_vector (3 downto 0);
42 delay_cntr_2 : in std_logic_vector (3 downto 0);
43 delay_cntr_3 : in std_logic_vector (3 downto 0);
44 mgt_enable : out std_logic_vector(3 downto 0);
45 phase_mux : out std_logic_vector(15 downto 0);
46 rx_resetdone : in std_logic_vector (3 downto 0);
47 rx_fsm_resetdone : in std_logic_vector (3 downto 0);
48 rx_byteisaligned : in std_logic_vector (3 downto 0);
49 tx_resetdone : in std_logic_vector (3 downto 0);
50 tx_fsm_resetdone : in std_logic_vector (3 downto 0);
51 tx_bufstatus : in std_logic_vector (7 downto 0);
52 rx_realign : in std_logic_vector (3 downto 0);
53 rx_disperr : in std_logic_vector (15 downto 0);
54 encode_error : in std_logic_vector (15 downto 0);
55 crc_error : in std_logic_vector (1 downto 0)
65 signal ipbw : ipb_wbus_array(N_SLAVES-1 downto 0);
66 signal ipbr, ipbr_d : ipb_rbus_array(N_SLAVES-1 downto 0);
67 signal error_counter_reset : std_logic;
68 signal encode_error_int, rx_disperr_int : std_logic_vector (3 downto 0);
69 signal softreset_rx_int, softreset_tx_int, error_counter_reset_int : std_logic;
70 signal control_reg, synch_reg, pulse_reg, quad_status, phase_reg : std_logic_vector (31 downto 0);
71 signal pulse_reset, softreset_rx_i, error_counter_reset_i, softreset_tx_i : std_logic;
72 signal clr_pulse_reg, cntr_reset : std_logic;
77 fabric_quad :
entity ipbus_lib.ipbus_fabric_sel
78 generic map(NSLV => N_SLAVES,
79 SEL_WIDTH => ipbus_sel_width
)
83 sel => ipbus_sel_efex_cntrl_mgt_quad
(ipb_in.ipb_addr
),
84 ipb_to_slaves => ipbw,
85 ipb_from_slaves => ipbr
90 encode_error_int(0) <= encode_error(0) or encode_error(1) or encode_error(2) or encode_error(3);
91 encode_error_int(1) <= encode_error(4) or encode_error(5) or encode_error(6) or encode_error(7);
92 encode_error_int(2) <= encode_error(8) or encode_error(9) or encode_error(10) or encode_error(11);
93 encode_error_int(3) <= encode_error(12) or encode_error(13) or encode_error(14) or encode_error(15);
95 rx_disperr_int(0) <= rx_disperr(0) or rx_disperr(1) or rx_disperr(2) or rx_disperr(3);
96 rx_disperr_int(1) <= rx_disperr(4) or rx_disperr(5) or rx_disperr(6) or rx_disperr(7);
97 rx_disperr_int(2) <= rx_disperr(8) or rx_disperr(9) or rx_disperr(10) or rx_disperr(11);
98 rx_disperr_int(3) <= rx_disperr(12) or rx_disperr(13) or rx_disperr(14) or rx_disperr(15);
100 loopback <= control_reg(2 downto 0);
101 mgt_enable <= control_reg(7 downto 4);
102 bc_reg_sel <= synch_reg (15 downto 0);
103 mux_sel <= synch_reg (31 downto 16);
104 softreset_tx_int <= pulse_reg(0);
105 softreset_rx_int <= pulse_reg(1);
106 error_counter_reset_int <= pulse_reg(2);
107 quad_status <= x"0000000" & "00" & qpll_refclklost & qpll_lock;
108 softreset_tx <= softreset_tx_i;
109 softreset_rx <= softreset_rx_i;
110 phase_mux <= phase_reg(15 downto 0);
112 softreset_rx_pulse :
entity work.
led_stretch -- softresetrx pulse generator
114 input => softreset_rx_int,
120 softreset_tx_pulse :
entity work.
led_stretch -- softresettx pulse generator
122 input => softreset_tx_int,
127 error_counter_reset_pulse :
entity work.
led_stretch -- pulse generator
129 input => error_counter_reset_int,
131 output => error_counter_reset_i
134 cntr_reset <= error_counter_reset_i or softreset_rx_i;
135 pulse_reset <= softreset_rx_i or error_counter_reset_i or softreset_tx_i;
136 clr_pulse_reg <= ipb_rst or pulse_reset;
138 MGT_QUAD_Control :
entity ipbus_lib.ipbus_ctrlreg_v --- control
register
145 ipbus_in => ipbw
(N_SLV_QUAD_MGT_CONTROL
),
146 ipbus_out => ipbr
(N_SLV_QUAD_MGT_CONTROL
),
147 d =>
(others =>
(others => '0'
)),
151 MGT_QUAD_Synch :
entity ipbus_lib.ipbus_ctrlreg_v -- reads the module ID
register
158 ipbus_in => ipbw
(N_SLV_QUAD_SYNCH_CONTROL
),
159 ipbus_out => ipbr
(N_SLV_QUAD_SYNCH_CONTROL
),
160 d =>
(others =>
(others => '0'
)),
164 MGT_QUAD_Pulse :
entity ipbus_lib.ipbus_ctrlreg_v -- reads the module ID
register
170 reset => clr_pulse_reg,
171 ipbus_in => ipbw
(N_SLV_QUAD_MGT_PULSE
),
172 ipbus_out => ipbr
(N_SLV_QUAD_MGT_PULSE
),
173 d =>
(others =>
(others => '0'
)),
177 MGT_QUAD_status :
entity ipbus_lib.ipbus_ctrlreg_v
184 ipbus_in => ipbw
(N_SLV_QUAD_MGT_STATUS
),
185 ipbus_out => ipbr
(N_SLV_QUAD_MGT_STATUS
),
186 d =>
(0 => quad_status
),
191 generic map (addr_width =>
3)
197 ipb_in => ipbw
(N_SLV_GT0
),
218 generic map (addr_width =>
3)
224 ipb_in => ipbw
(N_SLV_GT1
),
244 generic map (addr_width =>
3)
250 ipb_in => ipbw
(N_SLV_GT2
),
271 generic map (addr_width =>
3)
277 ipb_in => ipbw
(N_SLV_GT3
),
out output std_logic
output