From 5f5ad06e3f2f43784197d921ca6feef94a75fca8 Mon Sep 17 00:00:00 2001 From: Erik Kooistra <kooistra@astron.nl> Date: Thu, 16 Jul 2015 12:33:59 +0000 Subject: [PATCH] Removed g_link_status_check from tech_eth_10g entity. Added g_direction = TX_RX default or TX_ONLY, RX_ONLY. Implemented TX_ONLY by internal loopback of MAC Tx xgmii to MAX Rx. --- libraries/io/tr_10GbE/src/vhdl/tr_10GbE.vhd | 4 ++-- .../io/tr_10GbE/tb/vhdl/tb_tb_tr_10GbE.vhd | 14 ++++++++------ libraries/io/tr_10GbE/tb/vhdl/tb_tr_10GbE.vhd | 17 ++++++++++++----- 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/libraries/io/tr_10GbE/src/vhdl/tr_10GbE.vhd b/libraries/io/tr_10GbE/src/vhdl/tr_10GbE.vhd index c24bea3145..b0735df70e 100644 --- a/libraries/io/tr_10GbE/src/vhdl/tr_10GbE.vhd +++ b/libraries/io/tr_10GbE/src/vhdl/tr_10GbE.vhd @@ -65,12 +65,12 @@ ENTITY tr_10GbE IS g_sim : BOOLEAN; g_sim_level : NATURAL := 1; -- 0 = use IP; 1 = use fast serdes model g_nof_macs : NATURAL; + g_direction : STRING := "TX_RX"; -- "TX_RX", "TX_ONLY", "RX_ONLY" g_use_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 g_tx_fifo_fill : NATURAL := 10; -- Release tx packet only when sufficiently data is available, g_tx_fifo_size : NATURAL := 256; -- 2 * 32b * 256 = 2 M9K (DP interface has 64b data, so at least 2 M9K needed) g_rx_fifo_size : NATURAL := 256; -- 2 * 32b * 256 = 2 M9K (DP interface has 64b data, so at least 2 M9K needed) - g_link_status_check : STD_LOGIC_VECTOR(c_tech_mac_10g_link_status_w-1 DOWNTO 0) := "11"; g_word_alignment_padding : BOOLEAN := FALSE ); PORT ( @@ -231,7 +231,7 @@ BEGIN g_sim => g_sim, g_sim_level => g_sim_level, -- 0 = use IP; 1 = use fast serdes model g_nof_channels => g_nof_macs, - g_link_status_check => g_link_status_check, + g_direction => g_direction, g_pre_header_padding => g_word_alignment_padding ) PORT MAP ( diff --git a/libraries/io/tr_10GbE/tb/vhdl/tb_tb_tr_10GbE.vhd b/libraries/io/tr_10GbE/tb/vhdl/tb_tb_tr_10GbE.vhd index 4b4fa7bfa4..04ad76a309 100644 --- a/libraries/io/tr_10GbE/tb/vhdl/tb_tb_tr_10GbE.vhd +++ b/libraries/io/tr_10GbE/tb/vhdl/tb_tb_tr_10GbE.vhd @@ -53,17 +53,19 @@ BEGIN -- g_dp_clk_period : TIME := 5 ns; -- 200 MHz -- g_sim_level : NATURAL := 1; -- 0 = use IP; 1 = use fast serdes model -- g_nof_channels : NATURAL := 1; +-- g_direction : STRING := "TX_RX"; -- "TX_RX", "TX_ONLY", "RX_ONLY" -- g_ref_clk_644_period : TIME := tech_pll_clk_644_period; -- for 10GBASE-R -- g_ref_clk_156_period : TIME := 6.4 ns; -- for XAUI -- g_data_type : NATURAL := c_tb_tech_mac_10g_data_type_symbols; -- g_verify_link_recovery : BOOLEAN := TRUE; --- g_link_status_check : STD_LOGIC_VECTOR(c_tech_mac_10g_link_status_w-1 DOWNTO 0) := "11" - u_no_dut : ENTITY work.tb_tr_10GbE GENERIC MAP (c_tech_select_default, FALSE, TRUE, 5 ns, 0, 1, c_644, c_156, c_data_type, TRUE, "11") PORT MAP (tb_end_vec(0)); - u_tr_10GbE : ENTITY work.tb_tr_10GbE GENERIC MAP (c_tech_select_default, FALSE, FALSE, 5 ns, 0, 1, c_644, c_156, c_data_type, TRUE, "11") PORT MAP (tb_end_vec(1)); - u_tr_10GbE_dp_clk_6_5ns : ENTITY work.tb_tr_10GbE GENERIC MAP (c_tech_select_default, FALSE, FALSE, 6.5 ns, 0, 1, c_644, c_156, c_data_type, TRUE, "11") PORT MAP (tb_end_vec(2)); - u_tr_10GbE_nof_channels_is_2 : ENTITY work.tb_tr_10GbE GENERIC MAP (c_tech_select_default, FALSE, FALSE, 5 ns, 0, 2, c_644, c_156, c_data_type, TRUE, "11") PORT MAP (tb_end_vec(3)); - u_tr_10GbE_sim_level_is_1 : ENTITY work.tb_tr_10GbE GENERIC MAP (c_tech_select_default, FALSE, FALSE, 5 ns, 1, 1, c_644, c_156, c_data_type, TRUE, "11") PORT MAP (tb_end_vec(4)); + u_no_dut : ENTITY work.tb_tr_10GbE GENERIC MAP (c_tech_select_default, FALSE, TRUE, 5 ns, 0, 1, "TX_RX", c_644, c_156, c_data_type, TRUE) PORT MAP (tb_end_vec(0)); + u_tr_10GbE : ENTITY work.tb_tr_10GbE GENERIC MAP (c_tech_select_default, FALSE, FALSE, 5 ns, 0, 1, "TX_RX", c_644, c_156, c_data_type, TRUE) PORT MAP (tb_end_vec(1)); + u_tr_10GbE_tx_only : ENTITY work.tb_tr_10GbE GENERIC MAP (c_tech_select_default, FALSE, FALSE, 5 ns, 0, 1, "TX_ONLY", c_644, c_156, c_data_type, TRUE) PORT MAP (tb_end_vec(2)); + u_tr_10GbE_rx_only : ENTITY work.tb_tr_10GbE GENERIC MAP (c_tech_select_default, FALSE, FALSE, 5 ns, 0, 1, "RX_ONLY", c_644, c_156, c_data_type, TRUE) PORT MAP (tb_end_vec(3)); + u_tr_10GbE_dp_clk_6_5ns : ENTITY work.tb_tr_10GbE GENERIC MAP (c_tech_select_default, FALSE, FALSE, 6.5 ns, 0, 1, "TX_RX", c_644, c_156, c_data_type, TRUE) PORT MAP (tb_end_vec(4)); + u_tr_10GbE_nof_channels_is_2 : ENTITY work.tb_tr_10GbE GENERIC MAP (c_tech_select_default, FALSE, FALSE, 5 ns, 0, 2, "TX_RX", c_644, c_156, c_data_type, TRUE) PORT MAP (tb_end_vec(5)); + u_tr_10GbE_sim_level_is_1 : ENTITY work.tb_tr_10GbE GENERIC MAP (c_tech_select_default, FALSE, FALSE, 5 ns, 1, 1, "TX_RX", c_644, c_156, c_data_type, TRUE) PORT MAP (tb_end_vec(6)); p_tb_end : PROCESS BEGIN diff --git a/libraries/io/tr_10GbE/tb/vhdl/tb_tr_10GbE.vhd b/libraries/io/tr_10GbE/tb/vhdl/tb_tr_10GbE.vhd index 20720844e4..03af83e74f 100644 --- a/libraries/io/tr_10GbE/tb/vhdl/tb_tr_10GbE.vhd +++ b/libraries/io/tr_10GbE/tb/vhdl/tb_tr_10GbE.vhd @@ -31,6 +31,12 @@ -- Usage: -- > as 10 -- > run -all +-- +-- Remarks: +-- . g_direction = "TX_RX" and "TX_ONLY" are verified properly by +-- c_tx_rx_loopback = TRUE. +-- g_direction = "RX_ONLY" is verified somehwat by c_tx_rx_loopback = FALSE, +-- but to properly verify is would require using two DUTs. LIBRARY IEEE, technology_lib, tech_pll_lib, tech_mac_10g_lib, common_lib, dp_lib; USE IEEE.std_logic_1164.ALL; @@ -56,11 +62,11 @@ ENTITY tb_tr_10GbE IS g_dp_clk_period : TIME := 5 ns; -- must be ~< 9000/(9000-c_tx_fifo_fill) * g_ref_clk_156_period g_sim_level : NATURAL := 0; -- 0 = use IP; 1 = use fast serdes model g_nof_channels : NATURAL := 1; + g_direction : STRING := "TX_RX"; -- "TX_RX", "TX_ONLY", "RX_ONLY" g_ref_clk_644_period : TIME := tech_pll_clk_644_period; -- for 10GBASE-R g_ref_clk_156_period : TIME := 6.4 ns; -- for XAUI g_data_type : NATURAL := c_tb_tech_mac_10g_data_type_symbols; - g_verify_link_recovery : BOOLEAN := TRUE; - g_link_status_check : STD_LOGIC_VECTOR(c_tech_mac_10g_link_status_w-1 DOWNTO 0) := "00" + g_verify_link_recovery : BOOLEAN := TRUE ); PORT ( tb_end : OUT STD_LOGIC @@ -74,7 +80,8 @@ ARCHITECTURE tb OF tb_tr_10GbE IS CONSTANT cal_clk_period : TIME := 25 ns; -- 40 MHz - CONSTANT phy_delay : TIME := sel_a_b(g_sim_level=0, 1 ns, 0 ns); + CONSTANT phy_delay : TIME := sel_a_b(g_sim_level=0, 0 ns, 0 ns); + CONSTANT c_tx_rx_loopback : BOOLEAN := g_direction/="TX_ONLY"; CONSTANT c_tx_fifo_fill : NATURAL := 100; @@ -241,11 +248,11 @@ BEGIN g_sim => c_sim, g_sim_level => g_sim_level, -- 0 = use IP; 1 = use fast serdes model g_nof_macs => g_nof_channels, + g_direction => g_direction, g_use_mdio => TRUE, g_mdio_epcs_dis => TRUE, -- TRUE disables Enhanced PCS on init; e.g. to target a 10GbE card in PC that does not support it g_tx_fifo_fill => c_tx_fifo_fill, g_tx_fifo_size => 256, - g_link_status_check => g_link_status_check, g_word_alignment_padding => TRUE ) PORT MAP ( @@ -300,7 +307,7 @@ BEGIN gen_link_connect : FOR I IN 0 TO g_nof_channels-1 GENERATE u_link_connect : ENTITY tech_mac_10g_lib.tb_tech_mac_10g_link_connect GENERIC MAP ( - g_loopback => TRUE, + g_loopback => c_tx_rx_loopback, g_link_delay => phy_delay ) PORT MAP ( -- GitLab