diff --git a/boards/uniboard2/designs/unb2_test/revisions/unb2_test_10GbE/unb2_test_10GbE.vhd b/boards/uniboard2/designs/unb2_test/revisions/unb2_test_10GbE/unb2_test_10GbE.vhd index e39c4ac2857675a1023bccfb25c12cead6856052..81251b2151868e9bf9b14ca5198e199c312e2c8e 100644 --- a/boards/uniboard2/designs/unb2_test/revisions/unb2_test_10GbE/unb2_test_10GbE.vhd +++ b/boards/uniboard2/designs/unb2_test/revisions/unb2_test_10GbE/unb2_test_10GbE.vhd @@ -31,7 +31,7 @@ USE technology_lib.technology_pkg.ALL; ENTITY unb2_test_10GbE IS GENERIC ( g_design_name : STRING := "unb2_test_10GbE"; - g_design_note : STRING := "Test design with 10GbE"; + g_design_note : STRING := "10GbE: 6xQSFP and 2xRING"; g_sim : BOOLEAN := FALSE; --Overridden by TB g_sim_unb_nr : NATURAL := 0; g_sim_node_nr : NATURAL := 0; @@ -74,10 +74,10 @@ ENTITY unb2_test_10GbE IS BCK_ERR : INOUT STD_LOGIC_VECTOR(c_unb2_board_tr_back.i2c_w-1 downto 0); -- ring transceivers - --RING_0_RX : IN STD_LOGIC_VECTOR(c_unb2_board_tr_ring.bus_w-1 downto 0); - --RING_0_TX : OUT STD_LOGIC_VECTOR(c_unb2_board_tr_ring.bus_w-1 downto 0); - --RING_1_RX : IN STD_LOGIC_VECTOR(c_unb2_board_tr_ring.bus_w-1 downto 0); - --RING_1_TX : OUT STD_LOGIC_VECTOR(c_unb2_board_tr_ring.bus_w-1 downto 0); + RING_0_RX : IN STD_LOGIC_VECTOR(c_unb2_board_tr_ring.bus_w-1 downto 0); + RING_0_TX : OUT STD_LOGIC_VECTOR(c_unb2_board_tr_ring.bus_w-1 downto 0); + RING_1_RX : IN STD_LOGIC_VECTOR(c_unb2_board_tr_ring.bus_w-1 downto 0); + RING_1_TX : OUT STD_LOGIC_VECTOR(c_unb2_board_tr_ring.bus_w-1 downto 0); -- pmbus PMBUS_SC : INOUT STD_LOGIC; PMBUS_SD : INOUT STD_LOGIC; @@ -87,14 +87,14 @@ ENTITY unb2_test_10GbE IS QSFP_0_TX : OUT STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.bus_w-1 downto 0); QSFP_1_RX : IN STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.bus_w-1 downto 0); QSFP_1_TX : OUT STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.bus_w-1 downto 0); - --QSFP_2_RX : IN STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.bus_w-1 downto 0); - --QSFP_2_TX : OUT STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.bus_w-1 downto 0); - --QSFP_3_RX : IN STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.bus_w-1 downto 0); - --QSFP_3_TX : OUT STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.bus_w-1 downto 0); - --QSFP_4_RX : IN STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.bus_w-1 downto 0); - --QSFP_4_TX : OUT STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.bus_w-1 downto 0); - --QSFP_5_RX : IN STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.bus_w-1 downto 0); - --QSFP_5_TX : OUT STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.bus_w-1 downto 0); + QSFP_2_RX : IN STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.bus_w-1 downto 0); + QSFP_2_TX : OUT STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.bus_w-1 downto 0); + QSFP_3_RX : IN STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.bus_w-1 downto 0); + QSFP_3_TX : OUT STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.bus_w-1 downto 0); + QSFP_4_RX : IN STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.bus_w-1 downto 0); + QSFP_4_TX : OUT STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.bus_w-1 downto 0); + QSFP_5_RX : IN STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.bus_w-1 downto 0); + QSFP_5_TX : OUT STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.bus_w-1 downto 0); QSFP_SDA : INOUT STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.i2c_w-1 downto 0); QSFP_SCL : INOUT STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.i2c_w-1 downto 0); @@ -153,10 +153,10 @@ BEGIN BCK_ERR => BCK_ERR, -- ring transceivers - --RING_0_RX => RING_0_RX, - --RING_0_TX => RING_0_TX, - --RING_1_RX => RING_1_RX, - --RING_1_TX => RING_1_TX, + RING_0_RX => RING_0_RX, + RING_0_TX => RING_0_TX, + RING_1_RX => RING_1_RX, + RING_1_TX => RING_1_TX, -- pmbus PMBUS_SC => PMBUS_SC, PMBUS_SD => PMBUS_SD, @@ -166,14 +166,14 @@ BEGIN QSFP_0_TX => QSFP_0_TX, QSFP_1_RX => QSFP_1_RX, QSFP_1_TX => QSFP_1_TX, - --QSFP_2_RX => QSFP_2_RX, - --QSFP_2_TX => QSFP_2_TX, - --QSFP_3_RX => QSFP_3_RX, - --QSFP_3_TX => QSFP_3_TX, - --QSFP_4_RX => QSFP_4_RX, - --QSFP_4_TX => QSFP_4_TX, - --QSFP_5_RX => QSFP_5_RX, - --QSFP_5_TX => QSFP_5_TX, + QSFP_2_RX => QSFP_2_RX, + QSFP_2_TX => QSFP_2_TX, + QSFP_3_RX => QSFP_3_RX, + QSFP_3_TX => QSFP_3_TX, + QSFP_4_RX => QSFP_4_RX, + QSFP_4_TX => QSFP_4_TX, + QSFP_5_RX => QSFP_5_RX, + QSFP_5_TX => QSFP_5_TX, QSFP_SDA => QSFP_SDA, QSFP_SCL => QSFP_SCL, diff --git a/boards/uniboard2/designs/unb2_test/src/vhdl/unb2_test.vhd b/boards/uniboard2/designs/unb2_test/src/vhdl/unb2_test.vhd index cab5731b9cbdd7c0a6747e7521f7b4cd85063c82..979b0a865f0a38490253e5cb2576587bcc4a981b 100644 --- a/boards/uniboard2/designs/unb2_test/src/vhdl/unb2_test.vhd +++ b/boards/uniboard2/designs/unb2_test/src/vhdl/unb2_test.vhd @@ -85,10 +85,10 @@ ENTITY unb2_test IS BCK_ERR : INOUT STD_LOGIC_VECTOR(c_unb2_board_tr_back.i2c_w-1 downto 0); -- ring transceivers - --RING_0_RX : IN STD_LOGIC_VECTOR(c_unb2_board_tr_ring.bus_w-1 downto 0) := (OTHERS=>'0'); - --RING_0_TX : OUT STD_LOGIC_VECTOR(c_unb2_board_tr_ring.bus_w-1 downto 0); - --RING_1_RX : IN STD_LOGIC_VECTOR(c_unb2_board_tr_ring.bus_w-1 downto 0) := (OTHERS=>'0'); - --RING_1_TX : OUT STD_LOGIC_VECTOR(c_unb2_board_tr_ring.bus_w-1 downto 0); + RING_0_RX : IN STD_LOGIC_VECTOR(c_unb2_board_tr_ring.bus_w-1 downto 0) := (OTHERS=>'0'); + RING_0_TX : OUT STD_LOGIC_VECTOR(c_unb2_board_tr_ring.bus_w-1 downto 0); + RING_1_RX : IN STD_LOGIC_VECTOR(c_unb2_board_tr_ring.bus_w-1 downto 0) := (OTHERS=>'0'); + RING_1_TX : OUT STD_LOGIC_VECTOR(c_unb2_board_tr_ring.bus_w-1 downto 0); -- pmbus PMBUS_SC : INOUT STD_LOGIC; PMBUS_SD : INOUT STD_LOGIC; @@ -138,7 +138,7 @@ ARCHITECTURE str OF unb2_test IS CONSTANT c_use_1GbE : BOOLEAN := g_design_name="unb2_test_1GbE" OR g_design_name="unb2_test_10GbE" OR g_design_name="unb2_test_all"; CONSTANT c_use_10GbE : BOOLEAN := g_design_name="unb2_test_10GbE" OR g_design_name="unb2_test_all"; CONSTANT c_use_10GbE_qsfp : BOOLEAN := c_use_10GbE; - CONSTANT c_use_10GbE_ring : BOOLEAN := FALSE; + CONSTANT c_use_10GbE_ring : BOOLEAN := c_use_10GbE; CONSTANT c_use_10GbE_back0 : BOOLEAN := FALSE; CONSTANT c_use_10GbE_back1 : BOOLEAN := FALSE; CONSTANT c_use_ddr : BOOLEAN := g_design_name="unb2_test_ddr" OR g_design_name="unb2_test_all"; @@ -815,10 +815,10 @@ BEGIN dp_rst => dp_rst, dp_clk => dp_clk, - src_out_arr => dp_offload_rx_10GbE_snk_in_arr(c_nof_streams_qsfp-1 DOWNTO 0), - src_in_arr => dp_offload_rx_10GbE_snk_out_arr(c_nof_streams_qsfp-1 DOWNTO 0), - snk_out_arr => dp_offload_tx_10GbE_src_in_arr(c_nof_streams_qsfp-1 DOWNTO 0), - snk_in_arr => dp_offload_tx_10GbE_src_out_arr(c_nof_streams_qsfp-1 DOWNTO 0), + src_out_arr => dp_offload_rx_10GbE_snk_in_arr(c_nof_streams_qsfp+c_nof_streams_ring-1 DOWNTO 0), + src_in_arr => dp_offload_rx_10GbE_snk_out_arr(c_nof_streams_qsfp+c_nof_streams_ring-1 DOWNTO 0), + snk_out_arr => dp_offload_tx_10GbE_src_in_arr(c_nof_streams_qsfp+c_nof_streams_ring-1 DOWNTO 0), + snk_in_arr => dp_offload_tx_10GbE_src_out_arr(c_nof_streams_qsfp+c_nof_streams_ring-1 DOWNTO 0), serial_tx_arr => i_serial_10G_tx_qsfp_ring_arr, serial_rx_arr => i_serial_10G_rx_qsfp_ring_arr @@ -867,6 +867,31 @@ BEGIN QSFP_LED => QSFP_LED ); + + gen_ring_wires: FOR i IN 0 TO c_nof_streams_ring-1 GENERATE + serial_10G_tx_ring_arr(i) <= i_serial_10G_tx_qsfp_ring_arr(i+c_nof_streams_qsfp); + i_serial_10G_rx_qsfp_ring_arr(i+c_nof_streams_qsfp) <= serial_10G_rx_ring_arr(i); + END GENERATE; + + i_RING_RX(0) <= RING_0_RX; + i_RING_RX(1) <= RING_1_RX; + RING_0_TX <= i_RING_TX(0); + RING_1_TX <= i_RING_TX(1); + + u_ring_io : ENTITY unb2_board_lib.unb2_board_ring_io + GENERIC MAP ( + g_nof_ring_bus => c_nof_ring_bus + ) + PORT MAP ( + serial_tx_arr => serial_10G_tx_ring_arr, + serial_rx_arr => serial_10G_rx_ring_arr, + RING_RX => i_RING_RX, + RING_TX => i_RING_TX + ); + + + + u_front_led : ENTITY unb2_board_lib.unb2_board_qsfp_leds GENERIC MAP ( g_sim => g_sim, diff --git a/boards/uniboard2/designs/unb2_test/tb/python/tc_unb2_test.py b/boards/uniboard2/designs/unb2_test/tb/python/tc_unb2_test.py index d024aac7cfe5f33daf54f0a64bd799b0e5f30d67..3cbb6ea2b6027b716738182890d8989987c95962 100644 --- a/boards/uniboard2/designs/unb2_test/tb/python/tc_unb2_test.py +++ b/boards/uniboard2/designs/unb2_test/tb/python/tc_unb2_test.py @@ -96,7 +96,7 @@ def test_BG_to_DB(tc,io,cmd): tc.set_section_id('Read - ') instanceName=tc.gpString - nof_streams=8 + nof_streams=24 blocksize=0 Bg = pi_diag_block_gen.PiDiagBlockGen(tc,io,nofChannels=nof_streams,ramSizePerChannel=blocksize,instanceName=instanceName) Bg.write_disable() diff --git a/boards/uniboard2/designs/unb2_test/tb/vhdl/tb_unb2_test.vhd b/boards/uniboard2/designs/unb2_test/tb/vhdl/tb_unb2_test.vhd index 5bfc63d655c9dd9232ee2a2e2c0a4da0d608f144..ffcb6b3107a62c05d905d53341e9d5665943cb7f 100644 --- a/boards/uniboard2/designs/unb2_test/tb/vhdl/tb_unb2_test.vhd +++ b/boards/uniboard2/designs/unb2_test/tb/vhdl/tb_unb2_test.vhd @@ -206,19 +206,19 @@ BEGIN QSFP_0_RX => si_lpbk_0, QSFP_1_TX => si_lpbk_1, QSFP_1_RX => si_lpbk_1, --- QSFP_2_TX => si_lpbk_2, --- QSFP_2_RX => si_lpbk_2, --- QSFP_3_TX => si_lpbk_3, --- QSFP_3_RX => si_lpbk_3, --- QSFP_4_TX => si_lpbk_4, --- QSFP_4_RX => si_lpbk_4, --- QSFP_5_TX => si_lpbk_5, --- QSFP_5_RX => si_lpbk_5, --- --- RING_0_TX => si_lpbk_6, --- RING_0_RX => si_lpbk_6, --- RING_1_TX => si_lpbk_7, --- RING_1_RX => si_lpbk_7, + QSFP_2_TX => si_lpbk_2, + QSFP_2_RX => si_lpbk_2, + QSFP_3_TX => si_lpbk_3, + QSFP_3_RX => si_lpbk_3, + QSFP_4_TX => si_lpbk_4, + QSFP_4_RX => si_lpbk_4, + QSFP_5_TX => si_lpbk_5, + QSFP_5_RX => si_lpbk_5, + + RING_0_TX => si_lpbk_6, + RING_0_RX => si_lpbk_6, + RING_1_TX => si_lpbk_7, + RING_1_RX => si_lpbk_7, -- -- BCK_TX => si_lpbk_8, -- BCK_RX => si_lpbk_8,