diff --git a/libraries/io/eth/src/vhdl/eth_statistics.vhd b/libraries/io/eth/src/vhdl/eth_statistics.vhd index 3647085944f1d2440dfd991dbc312f3a7b7a0e9f..39c93d010cff133efae51a02c70f8a70cced78a3 100644 --- a/libraries/io/eth/src/vhdl/eth_statistics.vhd +++ b/libraries/io/eth/src/vhdl/eth_statistics.vhd @@ -36,6 +36,7 @@ LIBRARY IEEE, common_lib, work, technology_lib, dp_lib, tech_tse_lib; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.NUMERIC_STD.ALL; USE common_lib.common_pkg.ALL; +USE common_lib.common_mem_pkg.ALL; USE dp_lib.dp_stream_pkg.ALL; USE common_lib.common_field_pkg.ALL; USE tech_tse_lib.tech_tse_pkg.ALL; @@ -43,7 +44,8 @@ USE technology_lib.technology_select_pkg.ALL; ENTITY eth_statistics IS PORT ( - serial_in : IN STD_LOGIC; + eth_clk : IN STD_LOGIC; + eth_serial_in : IN STD_LOGIC; pkt_cnt : OUT NATURAL; pkt_len : OUT NATURAL @@ -53,6 +55,79 @@ END eth_statistics; ARCHITECTURE str OF eth_statistics IS + SIGNAL tech_tse_rx_src_out : t_dp_sosi; + BEGIN + ------------------------------------------------------------------------------ + -- Use tech_tse with internal simulation model as Ethernet receiver + ------------------------------------------------------------------------------ + u_tech_tse : ENTITY tech_tse_lib.tech_tse + GENERIC MAP( + g_sim => TRUE, + g_sim_level => 1, + g_sim_tx => FALSE, + g_sim_rx => TRUE + ) + PORT MAP ( + mm_rst => '0', + mm_clk => '0', + cal_rec_clk => '0', + + eth_clk => eth_clk, + + mm_sla_in => c_mem_mosi_rst, + + tx_mac_in => ('0','0','0','0','0'), + + tx_snk_clk => eth_clk, + tx_snk_in => c_dp_sosi_rst, + + rx_src_clk => eth_clk, + rx_src_in => c_dp_siso_rdy, + + rx_src_out => tech_tse_rx_src_out, + + eth_rxp => eth_serial_in + ); + + ------------------------------------------------------------------------------ + -- Use 2 BSN monitors: + -- . Monitor A captures the number of SOPs per test interval; + -- . Monitor B captures the number of valid words per packet. + ------------------------------------------------------------------------------ +-- u_mon : ENTITY work.dp_bsn_monitor +-- GENERIC MAP ( +-- g_sync_timeout => g_sync_timeout, +-- g_error_bi => g_error_bi, +-- g_log_first_bsn => g_log_first_bsn +-- ) +-- PORT MAP ( +-- rst => dp_rst, +-- clk => dp_clk, +-- +-- -- ST interface +-- in_siso => in_siso_arr(i), +-- in_sosi => in_sosi_arr(i), +-- sync_in => sync_in, +-- +-- -- MM interface +-- -- . control +-- mon_evt => mon_evt_arr(i), +-- mon_sync => OPEN, +-- mon_sync_timeout => mon_sync_timeout_arr(i), +-- -- . siso +-- mon_ready_stable => mon_ready_stable_arr(i), +-- mon_xon_stable => mon_xon_stable_arr(i), +-- -- . sosi +-- mon_bsn_at_sync => mon_bsn_at_sync_arr(i), +-- mon_nof_sop => mon_nof_sop_arr(i), +-- mon_nof_err => mon_nof_err_arr(i), +-- mon_nof_valid => mon_nof_valid_arr(i), +-- +-- mon_bsn_first => mon_bsn_first_arr(i), +-- mon_bsn_first_cycle_cnt => mon_bsn_first_cycle_cnt_arr(i) +-- ); + + END str; diff --git a/libraries/technology/transceiver/sim_transceiver_deserializer.vhd b/libraries/technology/transceiver/sim_transceiver_deserializer.vhd index 8080af02c149539561c5374f98a851438f2e647e..f1419bac104e735f4dce5d81d876d4b1244d0042 100644 --- a/libraries/technology/transceiver/sim_transceiver_deserializer.vhd +++ b/libraries/technology/transceiver/sim_transceiver_deserializer.vhd @@ -20,6 +20,8 @@ -- -------------------------------------------------------------------------------- +-- Author: +-- . Daniel van der Schuur -- Purpose: -- Basic deserializer model for fast transceiver simulation -- Description: @@ -44,6 +46,8 @@ ENTITY sim_transceiver_deserializer IS rx_out_data : OUT STD_LOGIC_VECTOR(g_data_w-1 DOWNTO 0); rx_out_ctrl : OUT STD_LOGIC_VECTOR(g_data_w/c_byte_w-1 DOWNTO 0); + rx_out_sop : OUT STD_LOGIC_VECTOR(g_data_w/c_byte_w-1 DOWNTO 0); + rx_out_eop : OUT STD_LOGIC_VECTOR(g_data_w/c_byte_w-1 DOWNTO 0); rx_serial_in : IN STD_LOGIC ); @@ -53,9 +57,7 @@ END sim_transceiver_deserializer; ARCHITECTURE beh OF sim_transceiver_deserializer IS - CONSTANT c_line_clk_period : TIME := g_tr_clk_period * 8 / 10 / g_data_w; - CONSTANT c_tr_clk_period_sim : TIME := c_line_clk_period * g_data_w * 10 / 8; - + CONSTANT c_line_clk_period : TIME := g_tr_clk_period * 8 / 10 / g_data_w; CONSTANT c_nof_bytes_per_data : NATURAL := g_data_w/c_byte_w; BEGIN @@ -63,9 +65,14 @@ BEGIN p_deserialize: PROCESS VARIABLE v_rx_out_data : STD_LOGIC_VECTOR(g_data_w-1 DOWNTO 0); VARIABLE v_rx_out_ctrl : STD_LOGIC_VECTOR(g_data_w/c_byte_w-1 DOWNTO 0); + VARIABLE v_rx_out_sop : STD_LOGIC_VECTOR(g_data_w/c_byte_w-1 DOWNTO 0); + VARIABLE v_rx_out_eop : STD_LOGIC_VECTOR(g_data_w/c_byte_w-1 DOWNTO 0); BEGIN --rx_out_data <= (OTHERS=>'0'); rx_out_ctrl <= (OTHERS=>'0'); + rx_out_sop <= (OTHERS=>'0'); + rx_out_eop <= (OTHERS=>'0'); + WAIT UNTIL tr_rst='0' ; -- Align to tr_clk @@ -84,7 +91,13 @@ BEGIN END LOOP; v_rx_out_ctrl(byte) := rx_serial_in; -- Get the 1 control bit from the line for each byte WAIT FOR c_line_clk_period; - --Ignore tenth bit -- Get the 1 unused tenth bit = '0' from the line + v_rx_out_sop(byte) := '0'; -- Get the SOP/EOP (tenth) bit from the line + v_rx_out_eop(byte) := '0'; + IF rx_serial_in='1' THEN + v_rx_out_sop(byte) := '1'; + ELSIF rx_serial_in = 'U' THEN + v_rx_out_eop(byte) := '1'; + END IF; IF byte<c_nof_bytes_per_data-1 THEN WAIT FOR c_line_clk_period; -- exit loop in last half line clock cycle END IF; @@ -96,6 +109,8 @@ BEGIN -- End of this deserialization cycle: the rx data word has been assembled. rx_out_data <= v_rx_out_data; rx_out_ctrl <= v_rx_out_ctrl; + rx_out_sop <= v_rx_out_sop; + rx_out_eop <= v_rx_out_eop; END LOOP; END PROCESS; diff --git a/libraries/technology/transceiver/sim_transceiver_gx.vhd b/libraries/technology/transceiver/sim_transceiver_gx.vhd index 820b78a6ba6064de4b3798059858766d7406cb68..ed292ea5066da526585efc088d778e2f74907621 100644 --- a/libraries/technology/transceiver/sim_transceiver_gx.vhd +++ b/libraries/technology/transceiver/sim_transceiver_gx.vhd @@ -73,7 +73,11 @@ ARCHITECTURE str OF sim_transceiver_gx IS SIGNAL tx_ready : STD_LOGIC; SIGNAL tx_in_ctrl : t_ctrl_2arr; + SIGNAL tx_in_sop : t_ctrl_2arr; + SIGNAL tx_in_eop : t_ctrl_2arr; SIGNAL rx_out_ctrl : t_ctrl_2arr; + SIGNAL rx_out_sop : t_ctrl_2arr; + SIGNAL rx_out_eop : t_ctrl_2arr; BEGIN @@ -111,6 +115,8 @@ BEGIN tx_siso_arr(i).xon <= tx_ready; tx_in_ctrl(i) <= (OTHERS=>tx_sosi_arr(i).valid); + tx_in_sop(i) <= (OTHERS=>tx_sosi_arr(i).sop); + tx_in_eop(i) <= (OTHERS=>tx_sosi_arr(i).eop); u_ser: ENTITY work.sim_transceiver_serializer GENERIC MAP ( @@ -125,6 +131,8 @@ BEGIN tx_in_data => tx_sosi_arr(i).data(g_data_w-1 DOWNTO 0), tx_in_ctrl => tx_in_ctrl(i), + tx_in_sop => tx_in_sop(i), + tx_in_eop => tx_in_eop(i), tx_serial_out => tx_dataout(i) ); @@ -144,12 +152,16 @@ BEGIN rx_out_data => rx_sosi_arr(i).data(g_data_w-1 DOWNTO 0), rx_out_ctrl => rx_out_ctrl(i), + rx_out_sop => rx_out_sop(i), + rx_out_eop => rx_out_eop(i), rx_serial_in => rx_datain(i) ); END GENERATE; rx_sosi_arr(i).valid <= andv(rx_out_ctrl(i)); + rx_sosi_arr(i).sop <= andv(rx_out_sop(i)); + rx_sosi_arr(i).eop <= andv(rx_out_eop(i)); END GENERATE; diff --git a/libraries/technology/transceiver/sim_transceiver_serializer.vhd b/libraries/technology/transceiver/sim_transceiver_serializer.vhd index 4d8598b1ab391811c22c412317c3bf48989620b5..80804911cc5a1e623d7439a398a52079d8adb767 100644 --- a/libraries/technology/transceiver/sim_transceiver_serializer.vhd +++ b/libraries/technology/transceiver/sim_transceiver_serializer.vhd @@ -20,6 +20,8 @@ -- -------------------------------------------------------------------------------- +-- Author: +-- . Daniel van der Schuur -- Purpose: -- Basic serializer model for fast transceiver simulation -- Description: @@ -83,7 +85,9 @@ ENTITY sim_transceiver_serializer IS tr_rst : IN STD_LOGIC; tx_in_data : IN STD_LOGIC_VECTOR(g_data_w-1 DOWNTO 0); - tx_in_ctrl : IN STD_LOGIC_VECTOR(g_data_w/c_byte_w-1 DOWNTO 0); + tx_in_ctrl : IN STD_LOGIC_VECTOR(g_data_w/c_byte_w-1 DOWNTO 0); -- 1 valid bit per byte + tx_in_sop : IN STD_LOGIC_VECTOR(g_data_w/c_byte_w-1 DOWNTO 0) := (OTHERS=>'0'); -- 1 SOP bit per byte + tx_in_eop : IN STD_LOGIC_VECTOR(g_data_w/c_byte_w-1 DOWNTO 0) := (OTHERS=>'0'); -- 1 EOP bit per byte tx_serial_out : OUT STD_LOGIC ); @@ -103,6 +107,8 @@ BEGIN p_serialize: PROCESS VARIABLE v_tx_in_data : STD_LOGIC_VECTOR(g_data_w-1 DOWNTO 0); VARIABLE v_tx_in_ctrl : STD_LOGIC_VECTOR(g_data_w/c_byte_w-1 DOWNTO 0); + VARIABLE v_tx_in_sop : STD_LOGIC_VECTOR(g_data_w/c_byte_w-1 DOWNTO 0); + VARIABLE v_tx_in_eop : STD_LOGIC_VECTOR(g_data_w/c_byte_w-1 DOWNTO 0); BEGIN tx_serial_out <= '0'; WAIT UNTIL tr_rst='0'; @@ -111,6 +117,8 @@ BEGIN WAIT UNTIL rising_edge(tr_clk); v_tx_in_data := tx_in_data; v_tx_in_ctrl := tx_in_ctrl; + v_tx_in_sop := tx_in_sop; + v_tx_in_eop := tx_in_eop; WHILE tb_end='0' LOOP -- Data word serialization cycle @@ -120,9 +128,14 @@ BEGIN tx_serial_out <= v_tx_in_data(byte*c_byte_w+bit); -- Put the 8 data bits of the data byte on the line WAIT FOR c_line_clk_period; END LOOP; - tx_serial_out <= v_tx_in_ctrl(byte); -- Put the 1 control bit on the line for each byte + tx_serial_out <= v_tx_in_ctrl(byte); -- Put the valid bit on the line for each byte WAIT FOR c_line_clk_period; - tx_serial_out <= '0'; -- Put the 1 unused tenth bit = '0' on the line + tx_serial_out <= '0'; -- Put the SOP/EOP indicator bit on the line. '1'=SOP; 'U'=EOP. + IF v_tx_in_sop(byte) = '1' THEN + tx_serial_out <= '1'; + ELSIF v_tx_in_eop(byte)='1' THEN + tx_serial_out <= 'U'; + END IF; IF byte<c_nof_bytes_per_data-1 THEN WAIT FOR c_line_clk_period; -- exit loop in last line clock cycle END IF; @@ -133,6 +146,9 @@ BEGIN v_tx_in_data := tx_in_data; v_tx_in_ctrl := tx_in_ctrl; + v_tx_in_sop := tx_in_sop; + v_tx_in_eop := tx_in_eop; + END LOOP; END PROCESS; diff --git a/libraries/technology/tse/hdllib.cfg b/libraries/technology/tse/hdllib.cfg index a386155b81b1571939820ef7e4ef31c04f99daf6..2e38ea022f6c2bb162912494a433fe3e061db4aa 100644 --- a/libraries/technology/tse/hdllib.cfg +++ b/libraries/technology/tse/hdllib.cfg @@ -4,7 +4,7 @@ hdl_lib_uses_synth = technology common dp hdl_lib_uses_ip = ip_stratixiv_tse_sgmii_lvds ip_stratixiv_tse_sgmii_gx ip_arria10_tse_sgmii_lvds ip_arria10_tse_sgmii_gx ip_arria10_e3sge3_tse_sgmii_lvds ip_arria10_e3sge3_tse_sgmii_gx -hdl_lib_uses_sim = +hdl_lib_uses_sim = tech_transceiver hdl_lib_technology = hdl_lib_disclose_library_clause_names = ip_stratixiv_tse_sgmii_lvds ip_stratixiv_tse_sgmii_lvds_lib @@ -20,6 +20,7 @@ synth_files = tech_tse_stratixiv.vhd tech_tse_arria10.vhd tech_tse_arria10_e3sge3.vhd + sim_tse.vhd tech_tse.vhd tb_tech_tse_pkg.vhd diff --git a/libraries/technology/tse/sim_tse.vhd b/libraries/technology/tse/sim_tse.vhd new file mode 100644 index 0000000000000000000000000000000000000000..9ae20025277303acf57013b3d96e0796e6c639c6 --- /dev/null +++ b/libraries/technology/tse/sim_tse.vhd @@ -0,0 +1,196 @@ +-------------------------------------------------------------------------------- +-- +-- Copyright (C) 2016 +-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/> +-- JIVE (Joint Institute for VLBI in Europe) <http://www.jive.nl/> +-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands +-- +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see <http://www.gnu.org/licenses/>. +-- +-------------------------------------------------------------------------------- + +-- Author: +-- . Daniel van der Schuur +-- Purpose: +-- . Drop-in simulation model for tech_tse.vhd. +-- Description: +-- . Basically just a wrapper around sim_tse. + +LIBRARY IEEE, common_lib, dp_lib, tech_transceiver_lib; +USE IEEE.std_logic_1164.ALL; +USE common_lib.common_pkg.ALL; +USE common_lib.common_mem_pkg.ALL; +USE dp_lib.dp_stream_pkg.ALL; +USE work.tech_tse_pkg.ALL; + +ENTITY sim_tse IS + GENERIC( + g_tx : BOOLEAN; + g_rx : BOOLEAN + ); + PORT( + -- Clocks and reset + mm_rst : IN STD_LOGIC; -- unused + mm_clk : IN STD_LOGIC; -- unused + eth_clk : IN STD_LOGIC; -- 125 MHz + tx_snk_clk : IN STD_LOGIC; -- DP + rx_src_clk : IN STD_LOGIC; -- DP + + -- Memory Mapped Slave + mm_sla_in : IN t_mem_mosi; + mm_sla_out : OUT t_mem_miso; + + -- MAC transmit interface + -- . ST sink + tx_snk_in : IN t_dp_sosi; + tx_snk_out : OUT t_dp_siso; + -- . MAC specific + tx_mac_in : IN t_tech_tse_tx_mac; + tx_mac_out : OUT t_tech_tse_tx_mac; + + -- MAC receive interface + -- . ST Source + rx_src_in : IN t_dp_siso; + rx_src_out : OUT t_dp_sosi; + -- . MAC specific + rx_mac_out : OUT t_tech_tse_rx_mac; + + -- PHY interface + eth_txp : OUT STD_LOGIC; + eth_rxp : IN STD_LOGIC; + + tse_led : OUT t_tech_tse_led + ); + +END sim_tse; + +ARCHITECTURE str OF sim_tse IS + + SIGNAL tr_clk : STD_LOGIC; + SIGNAL tr_rst : STD_LOGIC; + + SIGNAL tx_snk_rst : STD_LOGIC; + SIGNAL rx_src_rst : STD_LOGIC; + + SIGNAL sim_transceiver_gx_tx_snk_in_arr : t_dp_sosi_arr(0 DOWNTO 0); + SIGNAL sim_transceiver_gx_tx_snk_out_arr : t_dp_siso_arr(0 DOWNTO 0); + + SIGNAL sim_transceiver_gx_rx_src_out_arr : t_dp_sosi_arr(0 DOWNTO 0); + SIGNAL sim_transceiver_gx_rx_src_in_arr : t_dp_siso_arr(0 DOWNTO 0); + +BEGIN + + ------------------------------------------------------------------------------- + -- TX FIFO + -- . tx_snk_clk (dp_clk) -> tr_clk + -- . User data width (32b) -> transceiver PCS data width (8b) + ------------------------------------------------------------------------------- + u_common_areset_tx : ENTITY common_lib.common_areset + GENERIC MAP( + g_rst_level => '1' + ) + PORT MAP( + clk => tx_snk_clk, + in_rst => '0', + out_rst => tx_snk_rst + ); + + u_dp_fifo_dc_mixed_widths_tx : ENTITY dp_lib.dp_fifo_dc_mixed_widths + GENERIC MAP ( + g_wr_data_w => c_tech_tse_data_w, + g_rd_data_w => c_byte_w, + g_use_ctrl => TRUE, --SOP, EOP support + g_wr_fifo_size => 50, + g_rd_fifo_rl => 1 + ) + PORT MAP ( + wr_rst => tx_snk_rst, + wr_clk => tx_snk_clk, + rd_rst => tr_rst, + rd_clk => tr_clk, + + snk_in => tx_snk_in, + snk_out => tx_snk_out, + + src_out => sim_transceiver_gx_tx_snk_in_arr(0), + src_in => sim_transceiver_gx_tx_snk_out_arr(0) + ); + + ------------------------------------------------------------------------------- + -- Transceiver sim model + -- . Inside this model, tr_clk = tx_clk = rx_clk. We're using its output + -- tx_clk,tx_rst as local tr_clk,tr_rst to prevent delta delay issues. + ------------------------------------------------------------------------------- + u_sim_transceiver_gx : ENTITY tech_transceiver_lib.sim_transceiver_gx + GENERIC MAP( + g_data_w => c_byte_w, + g_nof_gx => 1, + g_mbps => 1250, + g_rx => g_rx, + g_tx => g_tx + ) + PORT MAP ( + tb_end => '0', + + tr_clk => eth_clk, + + tx_clk(0) => tr_clk, + tx_rst(0) => tr_rst, + + tx_sosi_arr => sim_transceiver_gx_tx_snk_in_arr, + tx_siso_arr => sim_transceiver_gx_tx_snk_out_arr, + tx_dataout(0) => eth_txp, + + rx_datain(0) => eth_rxp, + rx_sosi_arr => sim_transceiver_gx_rx_src_out_arr, + rx_siso_arr => sim_transceiver_gx_rx_src_in_arr + ); + + ------------------------------------------------------------------------------- + -- RX FIFO + -- . tr_clk => rx_src_clk (dp_clk) + -- . transceiver PCS data width (8b) -> User data width (32b) + ------------------------------------------------------------------------------- + u_common_areset_rx : ENTITY common_lib.common_areset + GENERIC MAP( + g_rst_level => '1' + ) + PORT MAP( + clk => rx_src_clk, + in_rst => '0', + out_rst => rx_src_rst + ); + + u_dp_fifo_dc_mixed_widths_rx : ENTITY dp_lib.dp_fifo_dc_mixed_widths + GENERIC MAP ( + g_wr_data_w => c_byte_w, + g_rd_data_w => c_tech_tse_data_w, + g_use_ctrl => TRUE, --SOP, EOP support + g_wr_fifo_size => 50, + g_rd_fifo_rl => 1 + ) + PORT MAP ( + wr_rst => tr_rst, + wr_clk => tr_clk, + rd_rst => rx_src_rst, + rd_clk => rx_src_clk, + + snk_in => sim_transceiver_gx_rx_src_out_arr(0), + snk_out => sim_transceiver_gx_rx_src_in_arr(0), + + src_out => rx_src_out, + src_in => rx_src_in + ); + +end str; diff --git a/libraries/technology/tse/tech_tse.vhd b/libraries/technology/tse/tech_tse.vhd index f91fa4c3690d2d3dfce1b2a8bc72bf280c209267..064d5c501403a01e8c2081289af1b2d293a24e95 100644 --- a/libraries/technology/tse/tech_tse.vhd +++ b/libraries/technology/tse/tech_tse.vhd @@ -32,7 +32,11 @@ USE work.tech_tse_pkg.ALL; ENTITY tech_tse IS GENERIC ( g_technology : NATURAL := c_tech_select_default; - g_ETH_PHY : STRING := "LVDS" -- "LVDS" (default): uses LVDS IOs for ctrl_unb_common, "XCVR": uses tranceiver PHY + g_ETH_PHY : STRING := "LVDS"; -- "LVDS" (default): uses LVDS IOs for ctrl_unb_common, "XCVR": uses tranceiver PHY + g_sim : BOOLEAN := FALSE; + g_sim_level : NATURAL := 0; -- 0 = use IP; 1 = use fast serdes model; + g_sim_tx : BOOLEAN := TRUE; + g_sim_rx : BOOLEAN := TRUE ); PORT ( -- Clocks and reset @@ -74,9 +78,12 @@ END tech_tse; ARCHITECTURE str OF tech_tse IS + CONSTANT c_use_technology : BOOLEAN := g_sim = FALSE OR g_sim_level = 0; + CONSTANT c_use_sim_model : BOOLEAN := NOT c_use_technology; + BEGIN - gen_ip_stratixiv : IF g_technology=c_tech_stratixiv GENERATE + gen_ip_stratixiv : IF c_use_technology=TRUE AND g_technology=c_tech_stratixiv GENERATE u0 : ENTITY work.tech_tse_stratixiv GENERIC MAP (g_ETH_PHY) PORT MAP (mm_rst, mm_clk, eth_clk, tx_snk_clk, rx_src_clk, @@ -90,7 +97,7 @@ BEGIN tse_led); END GENERATE; - gen_ip_arria10 : IF g_technology=c_tech_arria10 GENERATE + gen_ip_arria10 : IF c_use_technology=TRUE AND g_technology=c_tech_arria10 GENERATE u0 : ENTITY work.tech_tse_arria10 GENERIC MAP (g_ETH_PHY) PORT MAP (mm_rst, mm_clk, eth_clk, tx_snk_clk, rx_src_clk, @@ -103,7 +110,7 @@ BEGIN tse_led); END GENERATE; - gen_ip_arria10_e3sge3 : IF g_technology=c_tech_arria10_e3sge3 GENERATE + gen_ip_arria10_e3sge3 : IF c_use_technology=TRUE AND g_technology=c_tech_arria10_e3sge3 GENERATE u0 : ENTITY work.tech_tse_arria10_e3sge3 GENERIC MAP (g_ETH_PHY) PORT MAP (mm_rst, mm_clk, eth_clk, tx_snk_clk, rx_src_clk, @@ -115,5 +122,18 @@ BEGIN eth_txp, eth_rxp, tse_led); END GENERATE; + + gen_sim_tse : IF c_use_sim_model=TRUE GENERATE + u_sim_tse : ENTITY work.sim_tse + GENERIC MAP (g_sim_tx, g_sim_rx) + PORT MAP (mm_rst, mm_clk, eth_clk, tx_snk_clk, rx_src_clk, + mm_sla_in, mm_sla_out, + tx_snk_in, tx_snk_out, + tx_mac_in, tx_mac_out, + rx_src_in, rx_src_out, + rx_mac_out, + eth_txp, eth_rxp, + tse_led); + END GENERATE; END ARCHITECTURE;