diff --git a/libraries/io/tr_10GbE/src/vhdl/tr_10GbE.vhd b/libraries/io/tr_10GbE/src/vhdl/tr_10GbE.vhd index b531073e0c88a4732430e1c7256119cdadce6316..d56345fec744b79a6a96765a0de887997524af2b 100644 --- a/libraries/io/tr_10GbE/src/vhdl/tr_10GbE.vhd +++ b/libraries/io/tr_10GbE/src/vhdl/tr_10GbE.vhd @@ -19,7 +19,7 @@ -- ------------------------------------------------------------------------------- -LIBRARY IEEE, common_lib, dp_lib, diag_lib, tr_xaui_lib, technology_lib, tech_memory_lib, tech_transceiver_lib; +LIBRARY IEEE, common_lib, dp_lib, diag_lib, tr_xaui_lib, technology_lib, tech_mac_10g_lib; USE IEEE.std_logic_1164.ALL; USE IEEE.numeric_std.ALL; USE common_lib.common_pkg.ALL; @@ -269,88 +269,6 @@ ARCHITECTURE str OF tr_10GbE IS ); end component; - component mac_10g is - port ( - csr_clk_clk : in std_logic; - csr_reset_reset_n : in std_logic; - csr_address : in std_logic_vector(12 downto 0); - csr_waitrequest : out std_logic; - csr_read : in std_logic; - csr_readdata : out std_logic_vector(31 downto 0); - csr_write : in std_logic; - csr_writedata : in std_logic_vector(31 downto 0); - tx_clk_clk : in std_logic; - tx_reset_reset_n : in std_logic; - avalon_st_tx_startofpacket : in std_logic; - avalon_st_tx_valid : in std_logic; - avalon_st_tx_data : in std_logic_vector(63 downto 0); - avalon_st_tx_empty : in std_logic_vector(2 downto 0); - avalon_st_tx_ready : out std_logic; - avalon_st_tx_error : in std_logic_vector(0 downto 0); - avalon_st_tx_endofpacket: in std_logic; - avalon_st_pause_data : in std_logic_vector(1 downto 0); - xgmii_tx_data : out std_logic_vector(71 downto 0); - avalon_st_txstatus_valid: out std_logic; - avalon_st_txstatus_data : out std_logic_vector(39 downto 0); - avalon_st_txstatus_error: out std_logic_vector(6 downto 0); - rx_clk_clk : in std_logic; - rx_reset_reset_n : in std_logic; - xgmii_rx_data : in std_logic_vector(71 downto 0); - avalon_st_rx_startofpacket : out std_logic; - avalon_st_rx_endofpacket: out std_logic; - avalon_st_rx_valid : out std_logic; - avalon_st_rx_ready : in std_logic; - avalon_st_rx_data : out std_logic_vector(63 downto 0); - avalon_st_rx_empty : out std_logic_vector(2 downto 0); - avalon_st_rx_error : out std_logic_vector(5 downto 0); - avalon_st_rxstatus_valid: out std_logic; - avalon_st_rxstatus_data : out std_logic_vector(39 downto 0); - avalon_st_rxstatus_error: out std_logic_vector(6 downto 0); - link_fault_status_xgmii_rx_data : out std_logic_vector(1 downto 0) - ); - end component mac_10g; - - - - component tr_xaui is - generic ( - g_technology : NATURAL := c_tech_select_default; - g_sim : BOOLEAN := FALSE; - g_sim_level : NATURAL := 0; -- 0 = use IP; 1 = use fast serdes model - g_use_xgmii : BOOLEAN := FALSE; -- Don't use streaming I/O but XGMII (e.g. conenct to 10GbE MAC) - g_nof_xaui : NATURAL := 1; -- Up to 3 (hard XAUI only) supported - g_mdio : BOOLEAN := FALSE; - g_mdio_epcs_dis : BOOLEAN := FALSE -- TRUE disables EPCS on init; e.g. to target a 10GbE card in PC that does not support it - ); - port ( - tr_clk : IN STD_LOGIC; - cal_rec_clk : IN STD_LOGIC; - mm_clk : IN STD_LOGIC := '0'; - mm_rst : IN STD_LOGIC := '0'; - rx_clk : OUT STD_LOGIC_VECTOR(g_nof_macs-1 DOWNTO 0); - rx_rst : OUT STD_LOGIC_VECTOR(g_nof_macs-1 DOWNTO 0); --- rx_sosi_arr : OUT t_dp_sosi_arr(g_nof_macs-1 DOWNTO 0); --- rx_siso_arr : IN t_dp_siso_arr(g_nof_macs-1 DOWNTO 0); - tx_clk : IN STD_LOGIC_VECTOR(g_nof_macs-1 DOWNTO 0); - tx_rst : OUT STD_LOGIC_VECTOR(g_nof_macs-1 DOWNTO 0); --- tx_sosi_arr : IN t_dp_sosi_arr(g_nof_macs-1 DOWNTO 0); --- tx_siso_arr : OUT t_dp_siso_arr(g_nof_macs-1 DOWNTO 0); - xgmii_tx_dc_arr : IN t_xgmii_dc_arr(g_nof_macs-1 DOWNTO 0); - xgmii_rx_dc_arr : OUT t_xgmii_dc_arr(g_nof_macs-1 DOWNTO 0); - xaui_rx : IN t_xaui_arr(g_nof_macs-1 DOWNTO 0); - xaui_tx : OUT t_xaui_arr(g_nof_macs-1 DOWNTO 0); - xaui_mosi : IN t_mem_mosi := c_mem_mosi_rst; - xaui_miso : OUT t_mem_miso; - mdio_mosi_arr : IN t_mem_mosi_arr(g_nof_macs-1 DOWNTO 0); - mdio_miso_arr : OUT t_mem_miso_arr(g_nof_macs-1 DOWNTO 0); - mdio_rst : OUT STD_LOGIC; - mdio_mdc : OUT STD_LOGIC_VECTOR(g_nof_macs-1 DOWNTO 0); - mdio_mdat_in : IN STD_LOGIC_VECTOR(g_nof_macs-1 DOWNTO 0); - mdio_mdat_oen : OUT STD_LOGIC_VECTOR(g_nof_macs-1 DOWNTO 0) - ); - end component; - - BEGIN --------------------------------------------------------------------------------------- @@ -569,58 +487,35 @@ BEGIN gen_ip_stratixiv : if g_technology=c_tech_stratixiv generate gen_mac_10g : FOR i IN 0 TO sel_a_b(g_lpbk_sosi, 0, g_nof_macs)-1 GENERATE - - mac_10g_snk_out_arr(i).xon <= tx_rst_n_arr(i); - - u_mac_10g : mac_10g - PORT MAP ( - csr_clk_clk => mm_clk, - csr_reset_reset_n => mm_rst_n, - csr_address => reg_mac_mosi_arr(i).address(c_mac_mm_addr_w-1 DOWNTO 0), - csr_waitrequest => reg_mac_miso_arr(i).waitrequest, - csr_read => reg_mac_mosi_arr(i).rd, - csr_readdata => reg_mac_miso_arr(i).rddata(c_word_w-1 DOWNTO 0), - csr_write => reg_mac_mosi_arr(i).wr, - csr_writedata => reg_mac_mosi_arr(i).wrdata(c_word_w-1 DOWNTO 0), - - tx_clk_clk => tx_clk_arr(i), - tx_reset_reset_n => tx_rst_n_arr(i), - - avalon_st_tx_startofpacket => mac_10g_snk_in_arr(i).sop, - avalon_st_tx_valid => mac_10g_snk_in_arr(i).valid, - avalon_st_tx_data => mac_10g_snk_in_arr(i).data(c_xgmii_data_w-1 DOWNTO 0), - avalon_st_tx_empty => mac_10g_snk_in_arr(i).empty(2 DOWNTO 0), - avalon_st_tx_ready => mac_10g_snk_out_arr(i).ready, - avalon_st_tx_error => mac_10g_snk_in_arr(i).err(0 DOWNTO 0), - avalon_st_tx_endofpacket => mac_10g_snk_in_arr(i).eop, - avalon_st_pause_data => (OTHERS=>'0'), - - xgmii_tx_data => mac_xgmii_tx_dc_arr(i), - - avalon_st_txstatus_valid => OPEN, - avalon_st_txstatus_data => OPEN, - avalon_st_txstatus_error => OPEN, - - rx_clk_clk => rx_clk_arr(i), - rx_reset_reset_n => rx_rst_n_arr(i), - - xgmii_rx_data => mac_xgmii_rx_dc_arr(i), - - avalon_st_rx_startofpacket => mac_10g_src_out_arr(i).sop, - avalon_st_rx_endofpacket => mac_10g_src_out_arr(i).eop, - avalon_st_rx_valid => mac_10g_src_out_arr(i).valid, - avalon_st_rx_ready => mac_10g_src_in_arr(i).ready, - avalon_st_rx_data => mac_10g_src_out_arr(i).data(c_xgmii_data_w-1 DOWNTO 0), - avalon_st_rx_empty => mac_10g_src_out_arr(i).empty(2 DOWNTO 0), - avalon_st_rx_error => mac_10g_src_out_arr(i).err(5 DOWNTO 0), - avalon_st_rxstatus_valid => OPEN, - avalon_st_rxstatus_data => OPEN, - avalon_st_rxstatus_error => OPEN, - - link_fault_status_xgmii_rx_data => OPEN + u_tech_mac_10g : ENTITY tech_mac_10g_lib.tech_mac_10g + GENERIC MAP ( + g_technology => g_technology, + g_pre_header_padding => FALSE + ) + PORT MAP ( + -- MM + mm_clk => mm_clk, + mm_rst => mm_rst, + csr_mosi => reg_mac_mosi_arr(i), -- CSR = control status register + csr_miso => reg_mac_miso_arr(i), + + -- ST + tx_clk => tx_clk_arr(i), -- 156.25 MHz local reference + tx_rst => tx_rst_arr(i), + tx_snk_in => mac_10g_snk_in_arr(i), -- 64 bit data + tx_snk_out => mac_10g_snk_out_arr(i), + + rx_clk => rx_clk_arr(i), -- 156.25 MHz from rx phy + rx_rst => rx_rst_arr(i), + rx_src_out => mac_10g_src_out_arr(i), -- 64 bit data + rx_src_in => mac_10g_src_in_arr(i), + + -- XGMII + xgmii_tx_data => mac_xgmii_tx_dc_arr(i), -- 72 bit + xgmii_rx_data => mac_xgmii_rx_dc_arr(i) -- 72 bit ); - + END GENERATE; mac_10g_src_in_arr <= dp_pad_insert_snk_out_arr WHEN g_use_hdr_ram=TRUE ELSE dp_fifo_dc_rx_snk_out_arr; @@ -640,54 +535,59 @@ BEGIN mac_xgmii_rx_dc_arr <= xaui_xgmii_rx_dc_arr; END GENERATE; - --------------------------------------------------------------------------------------- - -- tr_xaui - --------------------------------------------------------------------------------------- - u_tr_xaui: tr_xaui + u_tr_xaui : ENTITY tr_xaui_lib.tr_xaui GENERIC MAP ( - g_sim => g_sim, - g_sim_level => g_sim_level, - g_use_xgmii => TRUE, -- Use XGMII direct - g_mdio => g_use_mdio, - g_mdio_epcs_dis => g_mdio_epcs_dis, - g_nof_xaui => g_nof_macs + g_technology => g_technology, + g_sim => g_sim, + g_sim_level => g_sim_level, + g_use_xgmii => TRUE, -- Use XGMII direct + g_nof_xaui => g_nof_macs, + g_mdio => g_use_mdio, + g_mdio_epcs_dis => g_mdio_epcs_dis ) - PORT MAP ( - tr_clk => tr_clk, - - mm_rst => mm_rst, - mm_clk => mm_clk, - - -- Serial data - xaui_tx => xaui_tx_arr, - xaui_rx => xaui_rx_arr, - - -- XGMII direct - xgmii_tx_dc_arr => xaui_xgmii_tx_dc_arr, - xgmii_rx_dc_arr => xaui_xgmii_rx_dc_arr, - - -- MDIO - mdio_rst => mdio_rst, - mdio_mdc => mdio_mdc_arr, - mdio_mdat_in => mdio_mdat_in_arr, - mdio_mdat_oen => mdio_mdat_oen_arr, - - mdio_mosi_arr => mdio_mosi_arr(g_nof_macs-1 DOWNTO 0), - mdio_miso_arr => mdio_miso_arr(g_nof_macs-1 DOWNTO 0), - - -- XGMII I/O - rx_rst => rx_rst_arr, - rx_clk => rx_clk_arr, - - tx_rst => tx_rst_arr, - tx_clk => tx_clk_arr, - - cal_rec_clk => cal_rec_clk, - - xaui_mosi => xaui_mosi, - xaui_miso => xaui_miso + PORT MAP ( + -- Transceiver PLL reference clock + tr_clk => tr_clk, + + -- Calibration & reconfig clock + cal_rec_clk => cal_rec_clk, + + -- MM clock for register of optional MDIO master + mm_clk => mm_clk, + mm_rst => mm_rst, + + -- Streaming RX interfaces + rx_clk => rx_clk_arr, + rx_rst => rx_rst_arr, + + -- Streaming TX interfaces + tx_clk => tx_clk_arr, + tx_rst => tx_rst_arr, + + -- Direct XGMII interface + xgmii_tx_dc_arr => xaui_xgmii_tx_dc_arr, + xgmii_rx_dc_arr => xaui_xgmii_rx_dc_arr, + + --Serial I/O + xaui_rx => xaui_rx_arr, + xaui_tx => xaui_tx_arr, + + -- XAUI PHY IP MM control/status + xaui_mosi => xaui_mosi, + xaui_miso => xaui_miso, + + -- MDIO master = mm slave + mdio_mosi_arr => mdio_mosi_arr(g_nof_macs-1 DOWNTO 0), + mdio_miso_arr => mdio_miso_arr(g_nof_macs-1 DOWNTO 0), + + -- MDIO External clock and serial data. + mdio_rst => mdio_rst, + mdio_mdc => mdio_mdc_arr, + mdio_mdat_in => mdio_mdat_in_arr, + mdio_mdat_oen => mdio_mdat_oen_arr ); - end generate; + END GENERATE; + ---------------------- Arria 10 -------------------------