diff --git a/applications/arts/designs/arts_unb2b_sc3/src/vhdl/arts_unb2b_sc3.vhd b/applications/arts/designs/arts_unb2b_sc3/src/vhdl/arts_unb2b_sc3.vhd index b9cf00ec52a8ad37832223625b012cf49a107604..6b5c996bdac5c12415a499d1a04cbbfc8304f0e5 100644 --- a/applications/arts/designs/arts_unb2b_sc3/src/vhdl/arts_unb2b_sc3.vhd +++ b/applications/arts/designs/arts_unb2b_sc3/src/vhdl/arts_unb2b_sc3.vhd @@ -32,10 +32,18 @@ -- . [ 8 CB sets * 3 10G ] * [ packed data ] -- (<--- 24 streams --->) * (<-- 9 Gbps -->) -- (<--- 24 streams * 9 Gbps = 216 Gbps -->) --- Output: --- . TODO +-- Output: QSFP_0_TX, QSFP_1_TX +-- . [ 8 CB sets * 10G ] * [ packed data ] +-- . (<--- 8 streams --->) * (<-- 1.6875 Gbps -->) +-- (<--- 8 streams * 1.6875 Gbps = 13.5 Gbps -->) -- Details: --- . TODO +-- . Even though the output is only 13.5Gbps, it needs to be carried on 8 +-- separate optical fibers such that each fiber carries its own CB set. +-- Each of the 8 fibers (CB sets) connects to its own switch 0..7, +-- implementing a physical transpose: +-- . CB set 0 (CB 0...5) -> switch 0 -> GPU nodes 0...5 +-- . .. +-- . CB set 7 (CB 30..39) -> switch 7 -> GPU nodes 30..39 -- FIXME I've put the data dimension on the very right of the serial dimensions, -- and the time interval behind an '@' on the right, too. Looking at @@ -109,17 +117,17 @@ ENTITY arts_unb2b_sc3 IS PMBUS_ALERT : IN STD_LOGIC := '0'; -- front transceivers - QSFP_0_RX : IN STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.bus_w-1 downto 0) := (OTHERS=>'0'); + QSFP_0_RX : IN STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.bus_w-1 downto 0); -- Input 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) := (OTHERS=>'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) := (OTHERS=>'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) := (OTHERS=>'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) := (OTHERS=>'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) := (OTHERS=>'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); @@ -133,148 +141,6 @@ END arts_unb2b_sc3; ARCHITECTURE str OF arts_unb2b_sc3 IS - - -- Firmware version x.y - CONSTANT c_fw_version : t_unb2_board_fw_version := (1, 1); - CONSTANT c_mm_clk_freq : NATURAL := c_unb2_board_mm_clk_freq_125M; - - -- 1GbE - CONSTANT c_use_1GbE : BOOLEAN := FALSE; - CONSTANT c_nof_streams_1GbE : NATURAL := sel_a_b(c_use_1GbE,1,0); --sel_a_b(c_use_1GbE,c_unb2_board_nof_eth,0); - - -- 10GbE - CONSTANT c_nof_streams_qsfp : NATURAL := 24; - CONSTANT c_nof_qsfp_bus : NATURAL := 6; - CONSTANT c_def_10GbE_block_size : NATURAL := 700; -- (700/1000) * 200MHz * 64b = 8.96Gbps user rate (excl. header overhead (16 words/packet) ) - - -- System - SIGNAL cs_sim : STD_LOGIC; - - SIGNAL ext_clk200 : STD_LOGIC; - SIGNAL ext_rst200 : STD_LOGIC; - - SIGNAL xo_ethclk : STD_LOGIC; - SIGNAL xo_rst : STD_LOGIC; - SIGNAL xo_rst_n : STD_LOGIC; - - SIGNAL mm_clk : STD_LOGIC; - SIGNAL mm_rst : STD_LOGIC; - - SIGNAL dp_clk : STD_LOGIC; - SIGNAL dp_rst : STD_LOGIC; - - SIGNAL mb_I_ref_rst : STD_LOGIC; - SIGNAL mb_II_ref_rst : STD_LOGIC; - - -- PIOs - SIGNAL pout_wdi : STD_LOGIC; - - -- WDI override - SIGNAL reg_wdi_mosi : t_mem_mosi; - SIGNAL reg_wdi_miso : t_mem_miso; - - -- PPSH - SIGNAL reg_ppsh_mosi : t_mem_mosi; - SIGNAL reg_ppsh_miso : t_mem_miso; - - -- UniBoard system info - SIGNAL reg_unb_system_info_mosi : t_mem_mosi; - SIGNAL reg_unb_system_info_miso : t_mem_miso; - SIGNAL rom_unb_system_info_mosi : t_mem_mosi; - SIGNAL rom_unb_system_info_miso : t_mem_miso; - - -- UniBoard I2C sens - SIGNAL reg_unb_sens_mosi : t_mem_mosi; - SIGNAL reg_unb_sens_miso : t_mem_miso; - - -- pm bus - SIGNAL reg_unb_pmbus_mosi : t_mem_mosi; - SIGNAL reg_unb_pmbus_miso : t_mem_miso; - - -- FPGA sensors - SIGNAL reg_fpga_temp_sens_mosi : t_mem_mosi; - SIGNAL reg_fpga_temp_sens_miso : t_mem_miso; - SIGNAL reg_fpga_voltage_sens_mosi : t_mem_mosi; - SIGNAL reg_fpga_voltage_sens_miso : t_mem_miso; - - -- eth1g ch0 - SIGNAL eth1g_eth0_mm_rst : STD_LOGIC; - SIGNAL eth1g_eth0_tse_mosi : t_mem_mosi; -- ETH TSE MAC registers - SIGNAL eth1g_eth0_tse_miso : t_mem_miso; - SIGNAL eth1g_eth0_reg_mosi : t_mem_mosi; -- ETH control and status registers - SIGNAL eth1g_eth0_reg_miso : t_mem_miso; - SIGNAL eth1g_eth0_reg_interrupt : STD_LOGIC; -- Interrupt - SIGNAL eth1g_eth0_ram_mosi : t_mem_mosi; -- ETH rx frame and tx frame memory - SIGNAL eth1g_eth0_ram_miso : t_mem_miso; - - -- eth1g ch1 - SIGNAL eth1g_eth1_mm_rst : STD_LOGIC; - SIGNAL eth1g_eth1_tse_mosi : t_mem_mosi; -- ETH TSE MAC registers - SIGNAL eth1g_eth1_tse_miso : t_mem_miso; - SIGNAL eth1g_eth1_reg_mosi : t_mem_mosi; -- ETH control and status registers - SIGNAL eth1g_eth1_reg_miso : t_mem_miso; - SIGNAL eth1g_eth1_reg_interrupt : STD_LOGIC; -- Interrupt - SIGNAL eth1g_eth1_ram_mosi : t_mem_mosi; -- ETH rx frame and tx frame memory - SIGNAL eth1g_eth1_ram_miso : t_mem_miso; - - -- EPCS read - SIGNAL reg_dpmm_data_mosi : t_mem_mosi; - SIGNAL reg_dpmm_data_miso : t_mem_miso; - SIGNAL reg_dpmm_ctrl_mosi : t_mem_mosi; - SIGNAL reg_dpmm_ctrl_miso : t_mem_miso; - - -- EPCS write - SIGNAL reg_mmdp_data_mosi : t_mem_mosi; - SIGNAL reg_mmdp_data_miso : t_mem_miso; - SIGNAL reg_mmdp_ctrl_mosi : t_mem_mosi; - SIGNAL reg_mmdp_ctrl_miso : t_mem_miso; - - -- EPCS status/control - SIGNAL reg_epcs_mosi : t_mem_mosi; - SIGNAL reg_epcs_miso : t_mem_miso; - - -- Remote Update - SIGNAL reg_remu_mosi : t_mem_mosi; - SIGNAL reg_remu_miso : t_mem_miso; - - -- 10GbE - SIGNAL i_QSFP_TX : t_unb2_board_qsfp_bus_2arr(c_nof_qsfp_bus-1 DOWNTO 0); - SIGNAL i_QSFP_RX : t_unb2_board_qsfp_bus_2arr(c_nof_qsfp_bus-1 DOWNTO 0); - - SIGNAL unb2_board_10gbe_serial_tx_arr : STD_LOGIC_VECTOR(c_nof_streams_qsfp-1 DOWNTO 0); - SIGNAL unb2_board_10gbe_serial_rx_arr : STD_LOGIC_VECTOR(c_nof_streams_qsfp-1 DOWNTO 0); - - SIGNAL unb2_board_front_io_serial_tx_arr : STD_LOGIC_VECTOR(c_nof_streams_qsfp-1 DOWNTO 0) := (OTHERS=>'0'); - SIGNAL unb2_board_front_io_serial_rx_arr : STD_LOGIC_VECTOR(c_nof_streams_qsfp-1 DOWNTO 0); - - SIGNAL unb2_board_10gbe_snk_in_arr : t_dp_sosi_arr(c_nof_streams_qsfp-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); - SIGNAL unb2_board_10gbe_snk_out_arr : t_dp_siso_arr(c_nof_streams_qsfp-1 DOWNTO 0) := (OTHERS => c_dp_siso_rst); - SIGNAL unb2_board_10gbe_src_out_arr : t_dp_sosi_arr(c_nof_streams_qsfp-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); - SIGNAL unb2_board_10gbe_src_in_arr : t_dp_siso_arr(c_nof_streams_qsfp-1 DOWNTO 0) := (OTHERS => c_dp_siso_rst); - - SIGNAL reg_tr_10GbE_qsfp_ring_mosi : t_mem_mosi; - SIGNAL reg_tr_10GbE_qsfp_ring_miso : t_mem_miso; - - SIGNAL reg_eth10g_qsfp_ring_mosi : t_mem_mosi; - SIGNAL reg_eth10g_qsfp_ring_miso : t_mem_miso; - - SIGNAL reg_ip_arria10_e1sg_phy_10gbase_r_24_mosi : t_mem_mosi; - SIGNAL reg_ip_arria10_e1sg_phy_10gbase_r_24_miso : t_mem_miso; - - -- Interface: 1GbE UDP streaming ports - SIGNAL eth1g_udp_tx_sosi_arr : t_dp_sosi_arr(c_nof_streams_1GbE-1 DOWNTO 0); - SIGNAL eth1g_udp_tx_siso_arr : t_dp_siso_arr(c_nof_streams_1GbE-1 DOWNTO 0); - SIGNAL eth1g_udp_rx_sosi_arr : t_dp_sosi_arr(c_nof_streams_1GbE-1 DOWNTO 0); - SIGNAL eth1g_udp_rx_siso_arr : t_dp_siso_arr(c_nof_streams_1GbE-1 DOWNTO 0); - - -- QSFP leds - SIGNAL unb2_board_qsfp_leds_tx_snk_in_arr : t_dp_sosi_arr(c_nof_streams_qsfp-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); - SIGNAL unb2_board_qsfp_leds_tx_src_in_arr : t_dp_siso_arr(c_nof_streams_qsfp-1 DOWNTO 0) := (OTHERS => c_dp_siso_rst); - SIGNAL unb2_board_qsfp_leds_rx_snk_in_arr : t_dp_sosi_arr(c_nof_streams_qsfp-1 DOWNTO 0) := (OTHERS => c_dp_sosi_rst); - - SIGNAL qsfp_green_led_arr : STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.nof_bus-1 DOWNTO 0); - SIGNAL qsfp_red_led_arr : STD_LOGIC_VECTOR(c_unb2_board_tr_qsfp.nof_bus-1 DOWNTO 0); - ------------------------------------------------------------------------------- -- ARTS SC3 constants @@ -296,6 +162,81 @@ ARCHITECTURE str OF arts_unb2b_sc3 IS ------------------------------------------------------------------------------- SIGNAL arts_unb2b_sc3_input_src_out_2arr : t_dp_sosi_2arr_8(c_nof_cbsets-1 DOWNTO 0); -- 8 CB sets * 8 dishes + ------------------------------------------------------------------------------- + -- ctrl_unb2_board + ------------------------------------------------------------------------------- + CONSTANT c_fw_version : t_unb2_board_fw_version := (1, 1); + CONSTANT c_mm_clk_freq : NATURAL := c_unb2_board_mm_clk_freq_125M; + CONSTANT c_use_1GbE : BOOLEAN := FALSE; + CONSTANT c_nof_streams_1GbE : NATURAL := sel_a_b(c_use_1GbE,1,0); --sel_a_b(c_use_1GbE,c_unb2_board_nof_eth,0); + CONSTANT c_nof_streams_qsfp : NATURAL := 24; + CONSTANT c_nof_qsfp_bus : NATURAL := 6; + CONSTANT c_def_10GbE_block_size : NATURAL := 700; -- (700/1000) * 200MHz * 64b = 8.96Gbps user rate (excl. header overhead (16 words/packet) ) + + SIGNAL ext_clk200 : STD_LOGIC; + SIGNAL ext_rst200 : STD_LOGIC; + SIGNAL xo_ethclk : STD_LOGIC; + SIGNAL xo_rst : STD_LOGIC; + SIGNAL xo_rst_n : STD_LOGIC; + SIGNAL mm_clk : STD_LOGIC; + SIGNAL mm_rst : STD_LOGIC; + SIGNAL dp_clk : STD_LOGIC; + SIGNAL dp_rst : STD_LOGIC; + SIGNAL mb_I_ref_rst : STD_LOGIC; + SIGNAL mb_II_ref_rst : STD_LOGIC; + SIGNAL pout_wdi : STD_LOGIC; + + SIGNAL reg_wdi_mosi : t_mem_mosi; + SIGNAL reg_wdi_miso : t_mem_miso; + SIGNAL reg_ppsh_mosi : t_mem_mosi; + SIGNAL reg_ppsh_miso : t_mem_miso; + SIGNAL reg_unb_system_info_mosi : t_mem_mosi; + SIGNAL reg_unb_system_info_miso : t_mem_miso; + SIGNAL rom_unb_system_info_mosi : t_mem_mosi; + SIGNAL rom_unb_system_info_miso : t_mem_miso; + SIGNAL reg_unb_sens_mosi : t_mem_mosi; + SIGNAL reg_unb_sens_miso : t_mem_miso; + SIGNAL reg_unb_pmbus_mosi : t_mem_mosi; + SIGNAL reg_unb_pmbus_miso : t_mem_miso; + SIGNAL reg_fpga_temp_sens_mosi : t_mem_mosi; + SIGNAL reg_fpga_temp_sens_miso : t_mem_miso; + SIGNAL reg_fpga_voltage_sens_mosi : t_mem_mosi; + SIGNAL reg_fpga_voltage_sens_miso : t_mem_miso; + SIGNAL eth1g_eth0_mm_rst : STD_LOGIC; + SIGNAL eth1g_eth0_tse_mosi : t_mem_mosi; + SIGNAL eth1g_eth0_tse_miso : t_mem_miso; + SIGNAL eth1g_eth0_reg_mosi : t_mem_mosi; + SIGNAL eth1g_eth0_reg_miso : t_mem_miso; + SIGNAL eth1g_eth0_reg_interrupt : STD_LOGIC; + SIGNAL eth1g_eth0_ram_mosi : t_mem_mosi; + SIGNAL eth1g_eth0_ram_miso : t_mem_miso; + SIGNAL eth1g_eth1_mm_rst : STD_LOGIC; + SIGNAL eth1g_eth1_tse_mosi : t_mem_mosi; + SIGNAL eth1g_eth1_tse_miso : t_mem_miso; + SIGNAL eth1g_eth1_reg_mosi : t_mem_mosi; + SIGNAL eth1g_eth1_reg_miso : t_mem_miso; + SIGNAL eth1g_eth1_reg_interrupt : STD_LOGIC; + SIGNAL eth1g_eth1_ram_mosi : t_mem_mosi; + SIGNAL eth1g_eth1_ram_miso : t_mem_miso; + SIGNAL reg_dpmm_data_mosi : t_mem_mosi; + SIGNAL reg_dpmm_data_miso : t_mem_miso; + SIGNAL reg_dpmm_ctrl_mosi : t_mem_mosi; + SIGNAL reg_dpmm_ctrl_miso : t_mem_miso; + SIGNAL reg_mmdp_data_mosi : t_mem_mosi; + SIGNAL reg_mmdp_data_miso : t_mem_miso; + SIGNAL reg_mmdp_ctrl_mosi : t_mem_mosi; + SIGNAL reg_mmdp_ctrl_miso : t_mem_miso; + SIGNAL reg_epcs_mosi : t_mem_mosi; + SIGNAL reg_epcs_miso : t_mem_miso; + SIGNAL reg_remu_mosi : t_mem_mosi; + SIGNAL reg_remu_miso : t_mem_miso; + SIGNAL reg_tr_10GbE_qsfp_ring_mosi : t_mem_mosi; + SIGNAL reg_tr_10GbE_qsfp_ring_miso : t_mem_miso; + SIGNAL reg_eth10g_qsfp_ring_mosi : t_mem_mosi; + SIGNAL reg_eth10g_qsfp_ring_miso : t_mem_miso; + SIGNAL reg_ip_arria10_e1sg_phy_10gbase_r_24_mosi : t_mem_mosi; + SIGNAL reg_ip_arria10_e1sg_phy_10gbase_r_24_miso : t_mem_miso; + BEGIN ------------------------------------------------------------------------------- @@ -507,10 +448,7 @@ BEGIN g_dp_clk_use_pll => TRUE, g_factory_image => g_factory_image ) - PORT MAP ( - -- Clock an reset signals - cs_sim => cs_sim, - + PORT MAP ( ext_clk200 => ext_clk200, ext_rst200 => ext_rst200, @@ -590,12 +528,6 @@ BEGIN eth1g_ram_mosi => eth1g_eth0_ram_mosi, eth1g_ram_miso => eth1g_eth0_ram_miso, - -- eth1g UDP streaming ports - udp_tx_sosi_arr => eth1g_udp_tx_sosi_arr, - udp_tx_siso_arr => eth1g_udp_tx_siso_arr, - udp_rx_sosi_arr => eth1g_udp_rx_sosi_arr, - udp_rx_siso_arr => eth1g_udp_rx_siso_arr, - -- FPGA pins -- . General CLK => CLK,