diff --git a/modules/wr_endpoint/endpoint_private_pkg.vhd b/modules/wr_endpoint/endpoint_private_pkg.vhd index 42a76bf0a1475c6d6e87186744fb0b9c8489a1f2..5bb058cd773a2fb897aed65b3c246da3ff6e3a08 100644 --- a/modules/wr_endpoint/endpoint_private_pkg.vhd +++ b/modules/wr_endpoint/endpoint_private_pkg.vhd @@ -45,6 +45,7 @@ use ieee.numeric_std.all; use work.ep_wbgen2_pkg.all; use work.wr_fabric_pkg.all; use work.endpoint_pkg.all; +use work.genram_pkg.all; package endpoint_private_pkg is @@ -113,59 +114,226 @@ package endpoint_private_pkg is end record; component ep_1000basex_pcs + generic ( + g_simulation : boolean; + g_16bit : boolean); + port ( + rst_n_i : in std_logic; + clk_sys_i : in std_logic; + rxpcs_fab_o : out t_ep_internal_fabric; + rxpcs_fifo_almostfull_i : in std_logic; + rxpcs_busy_o : out std_logic; + rxpcs_timestamp_trigger_p_a_o : out std_logic; + rxpcs_timestamp_i : in std_logic_vector(31 downto 0); + rxpcs_timestamp_stb_i : in std_logic; + rxpcs_timestamp_valid_i : in std_logic; + txpcs_fab_i : in t_ep_internal_fabric; + txpcs_error_o : out std_logic; + txpcs_busy_o : out std_logic; + txpcs_dreq_o : out std_logic; + txpcs_timestamp_trigger_p_a_o : out std_logic; + link_ok_o : out std_logic; + link_ctr_i : in std_logic := '1'; + serdes_rst_o : out std_logic; + serdes_syncen_o : out std_logic; + serdes_loopen_o : out std_logic; + serdes_enable_o : out std_logic; + serdes_tx_clk_i : in std_logic; + serdes_tx_data_o : out std_logic_vector(15 downto 0); + serdes_tx_k_o : out std_logic_vector(1 downto 0); + serdes_tx_disparity_i : in std_logic; + serdes_tx_enc_err_i : in std_logic; + serdes_rx_clk_i : in std_logic; + serdes_rx_data_i : in std_logic_vector(15 downto 0); + serdes_rx_k_i : in std_logic_vector(1 downto 0); + serdes_rx_enc_err_i : in std_logic; + serdes_rx_bitslide_i : in std_logic_vector(4 downto 0); + rmon_o : out t_rmon_triggers; + mdio_addr_i : in std_logic_vector(15 downto 0); + mdio_data_i : in std_logic_vector(15 downto 0); + mdio_data_o : out std_logic_vector(15 downto 0); + mdio_stb_i : in std_logic; + mdio_rw_i : in std_logic; + mdio_ready_o : out std_logic; + dbg_tx_pcs_wr_count_o : out std_logic_vector(5+4 downto 0); + dbg_tx_pcs_rd_count_o : out std_logic_vector(5+4 downto 0); + nice_dbg_o : out t_dbg_ep_pcs); + end component; + + component ep_tx_pcs_8bit + port ( + rst_n_i : in std_logic; + clk_sys_i : in std_logic; + pcs_fab_i : in t_ep_internal_fabric; + pcs_error_o : out std_logic; + pcs_busy_o : out std_logic; + pcs_dreq_o : out std_logic; + mdio_mcr_pdown_i : in std_logic; + mdio_wr_spec_tx_cal_i : in std_logic; + an_tx_en_i : in std_logic; + an_tx_val_i : in std_logic_vector(15 downto 0); + timestamp_trigger_p_a_o : out std_logic; + rmon_tx_underrun : out std_logic; + phy_tx_clk_i : in std_logic; + phy_tx_data_o : out std_logic_vector(7 downto 0); + phy_tx_k_o : out std_logic; + phy_tx_disparity_i : in std_logic; + phy_tx_enc_err_i : in std_logic); + end component; + + component ep_tx_pcs_16bit + port ( + rst_n_i : in std_logic; + clk_sys_i : in std_logic; + pcs_fab_i : in t_ep_internal_fabric; + pcs_error_o : out std_logic; + pcs_busy_o : out std_logic; + pcs_dreq_o : out std_logic; + mdio_mcr_pdown_i : in std_logic; + mdio_wr_spec_tx_cal_i : in std_logic; + an_tx_en_i : in std_logic; + an_tx_val_i : in std_logic_vector(15 downto 0); + timestamp_trigger_p_a_o : out std_logic; + rmon_tx_underrun : out std_logic; + phy_tx_clk_i : in std_logic; + phy_tx_data_o : out std_logic_vector(15 downto 0); + phy_tx_k_o : out std_logic_vector(1 downto 0); + phy_tx_disparity_i : in std_logic; + phy_tx_enc_err_i : in std_logic; + dbg_wr_count_o : out std_logic_vector(5+4 downto 0); + dbg_rd_count_o : out std_logic_vector(5+4 downto 0)); + end component; + + component ep_rx_pcs_8bit generic ( g_simulation : boolean); port ( - rst_n_i : in std_logic; - clk_sys_i : in std_logic; - rxpcs_fab_o : out t_ep_internal_fabric; - rxpcs_busy_o : out std_logic; - rxpcs_dreq_i : in std_logic; - rxpcs_timestamp_stb_p_o : out std_logic; - txpcs_fab_i : in t_ep_internal_fabric; - txpcs_error_o : out std_logic; - txpcs_busy_o : out std_logic; - txpcs_dreq_o : out std_logic; - txpcs_timestamp_stb_p_o : out std_logic; - link_ok_o : out std_logic; - serdes_rst_o : out std_logic; - serdes_syncen_o : out std_logic; - serdes_loopen_o : out std_logic; - serdes_prbsen_o : out std_logic; - serdes_enable_o : out std_logic; - serdes_tx_clk_i : in std_logic; - serdes_tx_data_o : out std_logic_vector(7 downto 0); - serdes_tx_k_o : out std_logic; - serdes_tx_disparity_i : in std_logic; - serdes_tx_enc_err_i : in std_logic; - serdes_rx_data_i : in std_logic_vector(7 downto 0); - serdes_rx_clk_i : in std_logic; - serdes_rx_k_i : in std_logic; - serdes_rx_enc_err_i : in std_logic; - serdes_rx_bitslide_i : in std_logic_vector(3 downto 0); - rmon_o : out t_rmon_triggers; - mdio_addr_i : in std_logic_vector(15 downto 0); - mdio_data_i : in std_logic_vector(15 downto 0); - mdio_data_o : out std_logic_vector(15 downto 0); - mdio_stb_i : in std_logic; - mdio_rw_i : in std_logic; - mdio_ready_o : out std_logic); + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + pcs_fifo_almostfull_i : in std_logic; + pcs_busy_o : out std_logic; + pcs_fab_o : out t_ep_internal_fabric; + timestamp_trigger_p_a_o : out std_logic; -- strobe for RX timestamping + timestamp_i : in std_logic_vector(31 downto 0); + timestamp_stb_i : in std_logic; + timestamp_valid_i : in std_logic; + phy_rdy_i : in std_logic; + phy_rx_clk_i : in std_logic; + phy_rx_data_i : in std_logic_vector(7 downto 0); + phy_rx_k_i : in std_logic; + phy_rx_enc_err_i : in std_logic; + mdio_mcr_pdown_i : in std_logic; + mdio_wr_spec_cal_crst_i : in std_logic; + mdio_wr_spec_rx_cal_stat_o : out std_logic; + synced_o : out std_logic; + sync_lost_o : out std_logic; + an_rx_en_i : in std_logic; + an_rx_val_o : out std_logic_vector(15 downto 0); + an_rx_valid_o : out std_logic; + an_idle_match_o : out std_logic; + rmon_rx_overrun : out std_logic; + rmon_rx_inv_code : out std_logic; + rmon_rx_sync_lost : out std_logic); end component; - component ep_rmon_counters + component ep_rx_pcs_16bit generic ( - g_num_counters : integer; - g_ram_addr_width : integer); + g_simulation : boolean); port ( - clk_sys_i : in std_logic; - rst_n_i : in std_logic; - cntr_rst_i : in std_logic; - cntr_pulse_i : in std_logic_vector(g_num_counters-1 downto 0); - ram_addr_o : out std_logic_vector(g_ram_addr_width-1 downto 0); - ram_data_i : in std_logic_vector(31 downto 0); - ram_data_o : out std_logic_vector(31 downto 0); - ram_wr_o : out std_logic; - cntr_overflow_o : out std_logic); + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + pcs_fifo_almostfull_i : in std_logic; + pcs_busy_o : out std_logic; + pcs_fab_o : out t_ep_internal_fabric; + timestamp_trigger_p_a_o : out std_logic; -- strobe for RX timestamping + timestamp_i : in std_logic_vector(31 downto 0); + timestamp_stb_i : in std_logic; + timestamp_valid_i : in std_logic; + phy_rdy_i : in std_logic; + phy_rx_clk_i : in std_logic; + phy_rx_data_i : in std_logic_vector(15 downto 0); + phy_rx_k_i : in std_logic_vector(1 downto 0); + phy_rx_enc_err_i : in std_logic; + mdio_mcr_pdown_i : in std_logic; + mdio_wr_spec_cal_crst_i : in std_logic; + mdio_wr_spec_rx_cal_stat_o : out std_logic; + synced_o : out std_logic; + sync_lost_o : out std_logic; + an_rx_en_i : in std_logic; + an_rx_val_o : out std_logic_vector(15 downto 0); + an_rx_valid_o : out std_logic; + an_idle_match_o : out std_logic; + rmon_rx_overrun : out std_logic; + rmon_rx_inv_code : out std_logic; + rmon_rx_sync_lost : out std_logic; + nice_dbg_o : out t_dbg_ep_rxpcs); + end component; + + component ep_autonegotiation + generic ( + g_simulation : boolean); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + pcs_synced_i : in std_logic; + pcs_los_i : in std_logic; + pcs_link_ok_o : out std_logic; + an_idle_match_i : in std_logic; + an_rx_en_o : out std_logic; + an_rx_val_i : in std_logic_vector(15 downto 0); + an_rx_valid_i : in std_logic; + an_tx_en_o : out std_logic; + an_tx_val_o : out std_logic_vector(15 downto 0); + mdio_mcr_anrestart_i : in std_logic; + mdio_mcr_anenable_i : in std_logic; + mdio_msr_anegcomplete_o : out std_logic; + mdio_advertise_pause_i : in std_logic_vector(1 downto 0); + mdio_advertise_rfault_i : in std_logic_vector(1 downto 0); + mdio_lpa_full_o : out std_logic; + mdio_lpa_half_o : out std_logic; + mdio_lpa_pause_o : out std_logic_vector(1 downto 0); + mdio_lpa_rfault_o : out std_logic_vector(1 downto 0); + mdio_lpa_lpack_o : out std_logic; + mdio_lpa_npage_o : out std_logic); + end component; + + component ep_pcs_tbi_mdio_wb + port ( + rst_n_i : in std_logic; + clk_sys_i : in std_logic; + wb_adr_i : in std_logic_vector(4 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(3 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + tx_clk_i : in std_logic; + rx_clk_i : in std_logic; + mdio_mcr_uni_en_o : out std_logic; + mdio_mcr_anrestart_o : out std_logic; + mdio_mcr_pdown_o : out std_logic; + mdio_mcr_anenable_o : out std_logic; + mdio_mcr_loopback_o : out std_logic; + mdio_mcr_reset_o : out std_logic; + mdio_msr_lstatus_i : in std_logic; + lstat_read_notify_o : out std_logic; + mdio_msr_rfault_i : in std_logic; + mdio_msr_anegcomplete_i : in std_logic; + mdio_advertise_pause_o : out std_logic_vector(1 downto 0); + mdio_advertise_rfault_o : out std_logic_vector(1 downto 0); + mdio_lpa_full_i : in std_logic; + mdio_lpa_half_i : in std_logic; + mdio_lpa_pause_i : in std_logic_vector(1 downto 0); + mdio_lpa_rfault_i : in std_logic_vector(1 downto 0); + mdio_lpa_lpack_i : in std_logic; + mdio_lpa_npage_i : in std_logic; + mdio_wr_spec_tx_cal_o : out std_logic; + mdio_wr_spec_rx_cal_stat_i : in std_logic; + mdio_wr_spec_cal_crst_o : out std_logic; + mdio_wr_spec_bslide_i : in std_logic_vector(4 downto 0)); end component; component ep_tx_header_processor @@ -220,27 +388,24 @@ package endpoint_private_pkg is g_timestamp_bits_f : natural; g_ref_clock_rate : integer); port ( - clk_ref_i : in std_logic; - clk_sys_i : in std_logic; - rst_n_i : in std_logic; - pps_csync_p1_i : in std_logic; - tx_timestamp_stb_p_i : in std_logic; - rx_timestamp_stb_p_i : in std_logic; - txoob_fid_i : in std_logic_vector(16 - 1 downto 0); - txoob_stb_p_i : in std_logic; - rxoob_data_o : out std_logic_vector(47 downto 0); - rxoob_valid_o : out std_logic; - rxoob_ack_i : in std_logic; - txtsu_port_id_o : out std_logic_vector(4 downto 0); - txtsu_fid_o : out std_logic_vector(16 -1 downto 0); - txtsu_tsval_o : out std_logic_vector(28 + 4 - 1 downto 0); - txtsu_valid_o : out std_logic; - txtsu_ack_i : in std_logic; - ep_tscr_en_txts_i : in std_logic; - ep_tscr_en_rxts_i : in std_logic; - ep_tscr_cs_start_i : in std_logic; - ep_tscr_cs_done_o : out std_logic; - ep_ecr_portid_i : in std_logic_vector(4 downto 0)); + clk_ref_i : in std_logic; + clk_sys_i : in std_logic; + clk_rx_i : in std_logic; + rst_n_rx_i : in std_logic; + rst_n_ref_i : in std_logic; + rst_n_sys_i : in std_logic; + pps_csync_p1_i : in std_logic; + pps_valid_i : in std_logic; + tx_timestamp_trigger_p_a_i : in std_logic; + rx_timestamp_trigger_p_a_i : in std_logic; + rxts_timestamp_o : out std_logic_vector(31 downto 0); + rxts_timestamp_stb_o : out std_logic; + rxts_timestamp_valid_o : out std_logic; + txts_timestamp_o : out std_logic_vector(31 downto 0); + txts_timestamp_stb_o : out std_logic; + txts_timestamp_valid_o : out std_logic; + regs_i : in t_ep_out_registers; + regs_o : out t_ep_in_registers); end component; component ep_flow_control @@ -281,23 +446,6 @@ package endpoint_private_pkg is regs_i : in t_ep_in_registers); end component; - component ep_rx_bypass_queue - generic ( - g_size : integer; - g_width : integer); - port ( - rst_n_i : in std_logic; - clk_i : in std_logic; - d_i : in std_logic_vector(g_width-1 downto 0); - valid_i : in std_logic; - dreq_o : out std_logic; - q_o : out std_logic_vector(g_width-1 downto 0); - valid_o : out std_logic; - dreq_i : in std_logic; - flush_i : in std_logic; - purge_i : in std_logic); - end component; - component ep_leds_controller generic ( g_blink_period_log2 : integer); @@ -328,21 +476,222 @@ package endpoint_private_pkg is mem_data_i : in std_logic_vector(17 downto 0)); end component; - component ep_tx_framer + component ep_rtu_header_extract + generic ( + g_with_rtu : boolean); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + snk_fab_i : in t_ep_internal_fabric; + snk_dreq_o : out std_logic; + src_fab_o : out t_ep_internal_fabric; + src_dreq_i : in std_logic; + mbuf_is_pause_i : in std_logic; + vlan_class_i : in std_logic_vector(2 downto 0); + vlan_vid_i : in std_logic_vector(11 downto 0); + vlan_tag_done_i : in std_logic; + vlan_is_tagged_i : in std_logic; + rmon_drp_at_rtu_full_o: out std_logic; + rtu_rq_o : out t_ep_internal_rtu_request; + rtu_full_i : in std_logic; + rtu_rq_abort_o : out std_logic; + rtu_rq_valid_o : out std_logic); + end component; + + component ep_rx_early_address_match + port ( + clk_sys_i : in std_logic; + clk_rx_i : in std_logic; + rst_n_sys_i : in std_logic; + rst_n_rx_i : in std_logic; + snk_fab_i : in t_ep_internal_fabric; + src_fab_o : out t_ep_internal_fabric; + match_done_o : out std_logic; + match_is_hp_o : out std_logic; + match_is_pause_o : out std_logic; + match_pause_quanta_o : out std_logic_vector(15 downto 0); + match_pause_prio_mask_o : out std_logic_vector(7 downto 0); + match_pause_p_o : out std_logic; + regs_i : in t_ep_out_registers); + end component; + + component ep_clock_alignment_fifo + generic ( + g_size : integer; + g_almostfull_threshold : integer); + port ( + rst_n_rd_i : in std_logic; + clk_wr_i : in std_logic; + clk_rd_i : in std_logic; + dreq_i : in std_logic; + fab_i : in t_ep_internal_fabric; + fab_o : out t_ep_internal_fabric; + full_o : out std_logic; + empty_o : out std_logic; + almostfull_o : out std_logic; + pass_threshold_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0)); + end component; + + component ep_packet_filter + port ( + clk_rx_i : in std_logic; + clk_sys_i : in std_logic; + rst_n_rx_i : in std_logic; + rst_n_sys_i : in std_logic; + snk_fab_i : in t_ep_internal_fabric; + src_fab_o : out t_ep_internal_fabric; + done_o : out std_logic; + pclass_o : out std_logic_vector(7 downto 0); + drop_o : out std_logic; + regs_i : in t_ep_out_registers); + end component; + + component ep_rx_vlan_unit + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + snk_fab_i : in t_ep_internal_fabric; + snk_dreq_o : out std_logic; + src_fab_o : out t_ep_internal_fabric; + src_dreq_i : in std_logic; + tclass_o : out std_logic_vector(2 downto 0); + vid_o : out std_logic_vector(11 downto 0); + tag_done_o : out std_logic; + is_tagged_o : out std_logic; + regs_i : in t_ep_out_registers; + regs_o : out t_ep_in_registers); + end component; + + component ep_rx_oob_insert + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + snk_fab_i : in t_ep_internal_fabric; + snk_dreq_o : out std_logic; + src_fab_o : out t_ep_internal_fabric; + src_dreq_i : in std_logic; + regs_i : in t_ep_out_registers); + end component; + + component ep_rx_crc_size_check + generic ( + g_use_new_crc : boolean := false); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + snk_fab_i : in t_ep_internal_fabric; + snk_dreq_o : out std_logic; + src_fab_o : out t_ep_internal_fabric; + src_dreq_i : in std_logic; + regs_i : in t_ep_out_registers; + rmon_pcs_err_o : out std_logic; + rmon_giant_o : out std_logic; + rmon_runt_o : out std_logic; + rmon_crc_err_o : out std_logic); + end component; + + component ep_rx_wb_master + generic ( + g_ignore_ack : boolean; + g_cyc_on_stall : boolean := false); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + snk_fab_i : in t_ep_internal_fabric; + snk_dreq_o : out std_logic; + src_wb_i : in t_wrf_source_in; + src_wb_o : out t_wrf_source_out); + end component; + + component ep_rx_status_reg_insert + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + snk_fab_i : in t_ep_internal_fabric; + snk_dreq_o : out std_logic; + src_fab_o : out t_ep_internal_fabric; + src_dreq_i : in std_logic; + mbuf_valid_i : in std_logic; + mbuf_ack_o : out std_logic; + mbuf_drop_i : in std_logic; + mbuf_pclass_i : in std_logic_vector(7 downto 0); + mbuf_is_hp_i : in std_logic; + mbuf_is_pause_i : in std_logic; + rmon_pfilter_drop_o : out std_logic); + end component; + + component ep_rx_buffer + generic ( + g_size : integer; + g_with_fc : boolean := false); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + snk_fab_i : in t_ep_internal_fabric; + snk_dreq_o : out std_logic; + src_fab_o : out t_ep_internal_fabric; + src_dreq_i : in std_logic; + level_o : out std_logic_vector(7 downto 0); + full_o : out std_logic; + drop_req_i : in std_logic; + dropped_o : out std_logic; + regs_i : in t_ep_out_registers; + rmon_o : out t_rmon_triggers); + end component; + + + component ep_rx_path + generic ( + g_with_vlans : boolean; + g_with_dpi_classifier : boolean; + g_with_rtu : boolean; + g_with_rx_buffer : boolean; + g_rx_buffer_size : integer; + g_use_new_crc : boolean); + port ( + clk_sys_i : in std_logic; + clk_rx_i : in std_logic; + rst_n_sys_i : in std_logic; + rst_n_rx_i : in std_logic; + pcs_fab_i : in t_ep_internal_fabric; + pcs_fifo_almostfull_o : out std_logic; + pcs_busy_i : in std_logic; + src_wb_o : out t_wrf_source_out; + src_wb_i : in t_wrf_source_in; + fc_pause_p_o : out std_logic; + fc_pause_quanta_o : out std_logic_vector(15 downto 0); + fc_pause_prio_mask_o : out std_logic_vector(7 downto 0); + fc_buffer_occupation_o : out std_logic_vector(7 downto 0); + rmon_o : out t_rmon_triggers; + regs_i : in t_ep_out_registers; + regs_o : out t_ep_in_registers; + pfilter_pclass_o : out std_logic_vector(7 downto 0); + pfilter_drop_o : out std_logic; + pfilter_done_o : out std_logic; + rtu_rq_o : out t_ep_internal_rtu_request; + rtu_full_i : in std_logic; + rtu_rq_valid_o : out std_logic; + rtu_rq_abort_o : out std_logic; + nice_dbg_o : out t_dbg_ep_rxpath); + end component; + + component ep_tx_path generic ( g_with_vlans : boolean; - g_with_packet_injection : boolean; g_with_timestamper : boolean; - g_force_gap_length : integer); + g_with_packet_injection : boolean; + g_force_gap_length : integer; + g_runt_padding : boolean; + g_use_new_crc : boolean := false); port ( clk_sys_i : in std_logic; rst_n_i : in std_logic; - src_fab_o : out t_ep_internal_fabric; - src_dreq_i : in std_logic; - pcs_busy_i : in std_logic; + pcs_fab_o : out t_ep_internal_fabric; pcs_error_i : in std_logic; - wb_snk_i : in t_wrf_sink_in; - wb_snk_o : out t_wrf_sink_out; + pcs_busy_i : in std_logic; + pcs_dreq_i : in std_logic; + snk_i : in t_wrf_sink_in; + snk_o : out t_wrf_sink_out; fc_pause_req_i : in std_logic; fc_pause_delay_i : in std_logic_vector(15 downto 0); fc_pause_ready_o : out std_logic; @@ -355,7 +704,14 @@ package endpoint_private_pkg is txtsu_ack_i : in std_logic; txts_timestamp_i : in std_logic_vector(31 downto 0); txts_timestamp_valid_i : in std_logic; - regs_i : in t_ep_out_registers); + inject_req_i : in std_logic := '0'; + inject_ready_o : out std_logic; + inject_packet_sel_i : in std_logic_vector(2 downto 0) := "000"; + inject_user_value_i : in std_logic_vector(15 downto 0) := x"0000"; + ep_ctrl_i : in std_logic := '1'; + regs_i : in t_ep_out_registers; + regs_o : out t_ep_in_registers; + dbg_o : out std_logic_vector(33 downto 0)); end component; component ep_tx_crc_inserter diff --git a/modules/wr_endpoint/ep_1000basex_pcs.vhd b/modules/wr_endpoint/ep_1000basex_pcs.vhd index 59a7ae6d41d2e8696dde9a9f4236f194d3871d26..f5ceb85eb221ae90af4a2294fac55874b959c420 100644 --- a/modules/wr_endpoint/ep_1000basex_pcs.vhd +++ b/modules/wr_endpoint/ep_1000basex_pcs.vhd @@ -188,182 +188,6 @@ end ep_1000basex_pcs; architecture rtl of ep_1000basex_pcs is - component ep_tx_pcs_8bit - port ( - rst_n_i : in std_logic; - clk_sys_i : in std_logic; - pcs_fab_i : in t_ep_internal_fabric; - pcs_error_o : out std_logic; - pcs_busy_o : out std_logic; - pcs_dreq_o : out std_logic; - mdio_mcr_pdown_i : in std_logic; - mdio_wr_spec_tx_cal_i : in std_logic; - an_tx_en_i : in std_logic; - an_tx_val_i : in std_logic_vector(15 downto 0); - timestamp_trigger_p_a_o : out std_logic; - rmon_tx_underrun : out std_logic; - phy_tx_clk_i : in std_logic; - phy_tx_data_o : out std_logic_vector(7 downto 0); - phy_tx_k_o : out std_logic; - phy_tx_disparity_i : in std_logic; - phy_tx_enc_err_i : in std_logic); - end component; - - component ep_tx_pcs_16bit - port ( - rst_n_i : in std_logic; - clk_sys_i : in std_logic; - pcs_fab_i : in t_ep_internal_fabric; - pcs_error_o : out std_logic; - pcs_busy_o : out std_logic; - pcs_dreq_o : out std_logic; - mdio_mcr_pdown_i : in std_logic; - mdio_wr_spec_tx_cal_i : in std_logic; - an_tx_en_i : in std_logic; - an_tx_val_i : in std_logic_vector(15 downto 0); - timestamp_trigger_p_a_o : out std_logic; - rmon_tx_underrun : out std_logic; - phy_tx_clk_i : in std_logic; - phy_tx_data_o : out std_logic_vector(15 downto 0); - phy_tx_k_o : out std_logic_vector(1 downto 0); - phy_tx_disparity_i : in std_logic; - phy_tx_enc_err_i : in std_logic; - dbg_wr_count_o : out std_logic_vector(5+4 downto 0); - dbg_rd_count_o : out std_logic_vector(5+4 downto 0) -); - end component; - - component ep_rx_pcs_8bit - generic ( - g_simulation : boolean); - port ( - clk_sys_i : in std_logic; - rst_n_i : in std_logic; - pcs_fifo_almostfull_i : in std_logic; - pcs_busy_o : out std_logic; - pcs_fab_o : out t_ep_internal_fabric; - timestamp_trigger_p_a_o : out std_logic; -- strobe for RX timestamping - timestamp_i : in std_logic_vector(31 downto 0); - timestamp_stb_i : in std_logic; - timestamp_valid_i : in std_logic; - phy_rx_clk_i : in std_logic; - phy_rx_data_i : in std_logic_vector(7 downto 0); - phy_rx_k_i : in std_logic; - phy_rx_enc_err_i : in std_logic; - mdio_mcr_pdown_i : in std_logic; - mdio_wr_spec_cal_crst_i : in std_logic; - mdio_wr_spec_rx_cal_stat_o : out std_logic; - synced_o : out std_logic; - sync_lost_o : out std_logic; - an_rx_en_i : in std_logic; - an_rx_val_o : out std_logic_vector(15 downto 0); - an_rx_valid_o : out std_logic; - an_idle_match_o : out std_logic; - rmon_rx_overrun : out std_logic; - rmon_rx_inv_code : out std_logic; - rmon_rx_sync_lost : out std_logic); - end component; - - component ep_rx_pcs_16bit - generic ( - g_simulation : boolean); - port ( - clk_sys_i : in std_logic; - rst_n_i : in std_logic; - pcs_fifo_almostfull_i : in std_logic; - pcs_busy_o : out std_logic; - pcs_fab_o : out t_ep_internal_fabric; - timestamp_trigger_p_a_o : out std_logic; -- strobe for RX timestamping - timestamp_i : in std_logic_vector(31 downto 0); - timestamp_stb_i : in std_logic; - timestamp_valid_i : in std_logic; - phy_rx_clk_i : in std_logic; - phy_rx_data_i : in std_logic_vector(15 downto 0); - phy_rx_k_i : in std_logic_vector(1 downto 0); - phy_rx_enc_err_i : in std_logic; - mdio_mcr_pdown_i : in std_logic; - mdio_wr_spec_cal_crst_i : in std_logic; - mdio_wr_spec_rx_cal_stat_o : out std_logic; - synced_o : out std_logic; - sync_lost_o : out std_logic; - an_rx_en_i : in std_logic; - an_rx_val_o : out std_logic_vector(15 downto 0); - an_rx_valid_o : out std_logic; - an_idle_match_o : out std_logic; - rmon_rx_overrun : out std_logic; - rmon_rx_inv_code : out std_logic; - rmon_rx_sync_lost : out std_logic; - nice_dbg_o : out t_dbg_ep_rxpcs); - end component; - - - component ep_pcs_tbi_mdio_wb - port ( - rst_n_i : in std_logic; - clk_sys_i : in std_logic; - wb_adr_i : in std_logic_vector(4 downto 0); - wb_dat_i : in std_logic_vector(31 downto 0); - wb_dat_o : out std_logic_vector(31 downto 0); - wb_cyc_i : in std_logic; - wb_sel_i : in std_logic_vector(3 downto 0); - wb_stb_i : in std_logic; - wb_we_i : in std_logic; - wb_ack_o : out std_logic; - wb_stall_o : out std_logic; - tx_clk_i : in std_logic; - rx_clk_i : in std_logic; - mdio_mcr_uni_en_o : out std_logic; - mdio_mcr_anrestart_o : out std_logic; - mdio_mcr_pdown_o : out std_logic; - mdio_mcr_anenable_o : out std_logic; - mdio_mcr_loopback_o : out std_logic; - mdio_mcr_reset_o : out std_logic; - mdio_msr_lstatus_i : in std_logic; - lstat_read_notify_o : out std_logic; - mdio_msr_rfault_i : in std_logic; - mdio_msr_anegcomplete_i : in std_logic; - mdio_advertise_pause_o : out std_logic_vector(1 downto 0); - mdio_advertise_rfault_o : out std_logic_vector(1 downto 0); - mdio_lpa_full_i : in std_logic; - mdio_lpa_half_i : in std_logic; - mdio_lpa_pause_i : in std_logic_vector(1 downto 0); - mdio_lpa_rfault_i : in std_logic_vector(1 downto 0); - mdio_lpa_lpack_i : in std_logic; - mdio_lpa_npage_i : in std_logic; - mdio_wr_spec_tx_cal_o : out std_logic; - mdio_wr_spec_rx_cal_stat_i : in std_logic; - mdio_wr_spec_cal_crst_o : out std_logic; - mdio_wr_spec_bslide_i : in std_logic_vector(4 downto 0)); - end component; - - component ep_autonegotiation - generic ( - g_simulation : boolean); - port ( - clk_sys_i : in std_logic; - rst_n_i : in std_logic; - pcs_synced_i : in std_logic; - pcs_los_i : in std_logic; - pcs_link_ok_o : out std_logic; - an_idle_match_i : in std_logic; - an_rx_en_o : out std_logic; - an_rx_val_i : in std_logic_vector(15 downto 0); - an_rx_valid_i : in std_logic; - an_tx_en_o : out std_logic; - an_tx_val_o : out std_logic_vector(15 downto 0); - mdio_mcr_anrestart_i : in std_logic; - mdio_mcr_anenable_i : in std_logic; - mdio_msr_anegcomplete_o : out std_logic; - mdio_advertise_pause_i : in std_logic_vector(1 downto 0); - mdio_advertise_rfault_i : in std_logic_vector(1 downto 0); - mdio_lpa_full_o : out std_logic; - mdio_lpa_half_o : out std_logic; - mdio_lpa_pause_o : out std_logic_vector(1 downto 0); - mdio_lpa_rfault_o : out std_logic_vector(1 downto 0); - mdio_lpa_lpack_o : out std_logic; - mdio_lpa_npage_o : out std_logic); - end component; - signal mdio_mcr_uni_en : std_logic; signal mdio_mcr_anrestart : std_logic; signal mdio_mcr_pdown : std_logic; diff --git a/modules/wr_endpoint/ep_rx_path.vhd b/modules/wr_endpoint/ep_rx_path.vhd index f35dec7193b29e8edb37f41a3fa40ef085100d11..e8a244ed0e5b5d0994f2d5116abc91591b6a724c 100644 --- a/modules/wr_endpoint/ep_rx_path.vhd +++ b/modules/wr_endpoint/ep_rx_path.vhd @@ -114,169 +114,6 @@ end ep_rx_path; architecture behavioral of ep_rx_path is - component ep_rtu_header_extract - generic ( - g_with_rtu : boolean); - port ( - clk_sys_i : in std_logic; - rst_n_i : in std_logic; - snk_fab_i : in t_ep_internal_fabric; - snk_dreq_o : out std_logic; - src_fab_o : out t_ep_internal_fabric; - src_dreq_i : in std_logic; - mbuf_is_pause_i : in std_logic; - vlan_class_i : in std_logic_vector(2 downto 0); - vlan_vid_i : in std_logic_vector(11 downto 0); - vlan_tag_done_i : in std_logic; - vlan_is_tagged_i : in std_logic; - rmon_drp_at_rtu_full_o: out std_logic; - rtu_rq_o : out t_ep_internal_rtu_request; - rtu_full_i : in std_logic; - rtu_rq_abort_o : out std_logic; - rtu_rq_valid_o : out std_logic); - end component; - - component ep_rx_early_address_match - port ( - clk_sys_i : in std_logic; - clk_rx_i : in std_logic; - rst_n_sys_i : in std_logic; - rst_n_rx_i : in std_logic; - snk_fab_i : in t_ep_internal_fabric; - src_fab_o : out t_ep_internal_fabric; - match_done_o : out std_logic; - match_is_hp_o : out std_logic; - match_is_pause_o : out std_logic; - match_pause_quanta_o : out std_logic_vector(15 downto 0); - match_pause_prio_mask_o : out std_logic_vector(7 downto 0); - match_pause_p_o : out std_logic; - regs_i : in t_ep_out_registers); - end component; - - component ep_clock_alignment_fifo - generic ( - g_size : integer; - g_almostfull_threshold : integer); - port ( - rst_n_rd_i : in std_logic; - clk_wr_i : in std_logic; - clk_rd_i : in std_logic; - dreq_i : in std_logic; - fab_i : in t_ep_internal_fabric; - fab_o : out t_ep_internal_fabric; - full_o : out std_logic; - empty_o : out std_logic; - almostfull_o : out std_logic; - pass_threshold_i : in std_logic_vector(f_log2_size(g_size)-1 downto 0)); - end component; - - component ep_packet_filter - port ( - clk_rx_i : in std_logic; - clk_sys_i : in std_logic; - rst_n_rx_i : in std_logic; - rst_n_sys_i : in std_logic; - snk_fab_i : in t_ep_internal_fabric; - src_fab_o : out t_ep_internal_fabric; - done_o : out std_logic; - pclass_o : out std_logic_vector(7 downto 0); - drop_o : out std_logic; - regs_i : in t_ep_out_registers); - end component; - - component ep_rx_vlan_unit - port ( - clk_sys_i : in std_logic; - rst_n_i : in std_logic; - snk_fab_i : in t_ep_internal_fabric; - snk_dreq_o : out std_logic; - src_fab_o : out t_ep_internal_fabric; - src_dreq_i : in std_logic; - tclass_o : out std_logic_vector(2 downto 0); - vid_o : out std_logic_vector(11 downto 0); - tag_done_o : out std_logic; - is_tagged_o : out std_logic; - regs_i : in t_ep_out_registers; - regs_o : out t_ep_in_registers); - end component; - - component ep_rx_oob_insert - port ( - clk_sys_i : in std_logic; - rst_n_i : in std_logic; - snk_fab_i : in t_ep_internal_fabric; - snk_dreq_o : out std_logic; - src_fab_o : out t_ep_internal_fabric; - src_dreq_i : in std_logic; - regs_i : in t_ep_out_registers); - end component; - - component ep_rx_crc_size_check - generic ( - g_use_new_crc : boolean := false); - port ( - clk_sys_i : in std_logic; - rst_n_i : in std_logic; - snk_fab_i : in t_ep_internal_fabric; - snk_dreq_o : out std_logic; - src_fab_o : out t_ep_internal_fabric; - src_dreq_i : in std_logic; - regs_i : in t_ep_out_registers; - rmon_pcs_err_o : out std_logic; - rmon_giant_o : out std_logic; - rmon_runt_o : out std_logic; - rmon_crc_err_o : out std_logic); - end component; - - component ep_rx_wb_master - generic ( - g_ignore_ack : boolean; - g_cyc_on_stall : boolean := false); - port ( - clk_sys_i : in std_logic; - rst_n_i : in std_logic; - snk_fab_i : in t_ep_internal_fabric; - snk_dreq_o : out std_logic; - src_wb_i : in t_wrf_source_in; - src_wb_o : out t_wrf_source_out); - end component; - - component ep_rx_status_reg_insert - port ( - clk_sys_i : in std_logic; - rst_n_i : in std_logic; - snk_fab_i : in t_ep_internal_fabric; - snk_dreq_o : out std_logic; - src_fab_o : out t_ep_internal_fabric; - src_dreq_i : in std_logic; - mbuf_valid_i : in std_logic; - mbuf_ack_o : out std_logic; - mbuf_drop_i : in std_logic; - mbuf_pclass_i : in std_logic_vector(7 downto 0); - mbuf_is_hp_i : in std_logic; - mbuf_is_pause_i : in std_logic; - rmon_pfilter_drop_o : out std_logic); - end component; - - component ep_rx_buffer - generic ( - g_size : integer; - g_with_fc : boolean := false); - port ( - clk_sys_i : in std_logic; - rst_n_i : in std_logic; - snk_fab_i : in t_ep_internal_fabric; - snk_dreq_o : out std_logic; - src_fab_o : out t_ep_internal_fabric; - src_dreq_i : in std_logic; - level_o : out std_logic_vector(7 downto 0); - full_o : out std_logic; - drop_req_i : in std_logic; - dropped_o : out std_logic; - regs_i : in t_ep_out_registers; - rmon_o : out t_rmon_triggers); - end component; - type t_rx_deframer_state is (RXF_IDLE, RXF_DATA, RXF_FLUSH_STALL, RXF_FINISH_CYCLE, RXF_THROW_ERROR); signal state : t_rx_deframer_state; @@ -572,32 +409,6 @@ begin -- behavioral rxbuf_full <= '0'; end generate gen_without_rx_buffer; --- U_RTU_Header_Extract : ep_rtu_header_extract --- generic map ( --- g_with_rtu => g_with_rtu) --- port map ( --- clk_sys_i => clk_sys_i, --- rst_n_i => rst_n_sys_i, --- snk_fab_i => fab_pipe(7), --- snk_dreq_o => dreq_pipe(7), --- src_fab_o => fab_pipe(8), --- src_dreq_i => dreq_pipe(8), --- mbuf_is_pause_i => mbuf_is_pause, -- this module is in the pipe before ep_rx_status_reg_insert, --- -- however, we know that mbuf_is_pause is valid when it --- -- is used by this module -- this is because blocks the pipe --- -- untill mbuf_valid is HIGH, and rtu_rq_valid_o is inserted HIGH --- -- at the end of the header... (clear ??:) --- vlan_class_i => vlan_tclass, --- vlan_vid_i => vlan_vid, --- vlan_tag_done_i => vlan_tag_done, --- vlan_is_tagged_i => vlan_is_tagged, --- --- rmon_drp_at_rtu_full_o => rmon_o.rx_drop_at_rtu_full, --- --- rtu_rq_o => rtu_rq_o, --- rtu_full_i => rtu_full_i, --- rtu_rq_valid_o => rtu_rq_valid); - U_Gen_Status : ep_rx_status_reg_insert port map ( clk_sys_i => clk_sys_i, diff --git a/modules/wr_endpoint/wr_endpoint.vhd b/modules/wr_endpoint/wr_endpoint.vhd index f56eb92ebc0647b00867892b6ae7b60c780b785d..3548bd027f12da79240e5aa1b2867cb9a2af0141 100644 --- a/modules/wr_endpoint/wr_endpoint.vhd +++ b/modules/wr_endpoint/wr_endpoint.vhd @@ -308,9 +308,6 @@ architecture syn of wr_endpoint is end if; end f_pick_rate; - - - ------------------------------------------------------------------------------- component dmtd_phase_meas generic ( @@ -328,154 +325,6 @@ architecture syn of wr_endpoint is phase_meas_p_o : out std_logic); end component; - - component ep_tx_path - generic ( - g_with_vlans : boolean; - g_with_timestamper : boolean; - g_with_packet_injection : boolean; - g_force_gap_length : integer; - g_runt_padding : boolean; - g_use_new_crc : boolean := false); - port ( - clk_sys_i : in std_logic; - rst_n_i : in std_logic; - pcs_fab_o : out t_ep_internal_fabric; - pcs_error_i : in std_logic; - pcs_busy_i : in std_logic; - pcs_dreq_i : in std_logic; - snk_i : in t_wrf_sink_in; - snk_o : out t_wrf_sink_out; - fc_pause_req_i : in std_logic; - fc_pause_delay_i : in std_logic_vector(15 downto 0); - fc_pause_ready_o : out std_logic; - fc_flow_enable_i : in std_logic; - txtsu_port_id_o : out std_logic_vector(4 downto 0); - txtsu_fid_o : out std_logic_vector(16 -1 downto 0); - txtsu_ts_value_o : out std_logic_vector(28 + 4 - 1 downto 0); - txtsu_ts_incorrect_o : out std_logic; - txtsu_stb_o : out std_logic; - txtsu_ack_i : in std_logic; - txts_timestamp_i : in std_logic_vector(31 downto 0); - txts_timestamp_valid_i : in std_logic; - inject_req_i : in std_logic := '0'; - inject_ready_o : out std_logic; - inject_packet_sel_i : in std_logic_vector(2 downto 0) := "000"; - inject_user_value_i : in std_logic_vector(15 downto 0) := x"0000"; - ep_ctrl_i : in std_logic := '1'; - regs_i : in t_ep_out_registers; - regs_o : out t_ep_in_registers; - dbg_o : out std_logic_vector(33 downto 0)); - end component; - - component ep_rx_path - generic ( - g_with_vlans : boolean; - g_with_dpi_classifier : boolean; - g_with_rtu : boolean; - g_with_rx_buffer : boolean; - g_rx_buffer_size : integer; - g_use_new_crc : boolean); - port ( - clk_sys_i : in std_logic; - clk_rx_i : in std_logic; - rst_n_sys_i : in std_logic; - rst_n_rx_i : in std_logic; - pcs_fab_i : in t_ep_internal_fabric; - pcs_fifo_almostfull_o : out std_logic; - pcs_busy_i : in std_logic; - src_wb_o : out t_wrf_source_out; - src_wb_i : in t_wrf_source_in; - fc_pause_p_o : out std_logic; - fc_pause_quanta_o : out std_logic_vector(15 downto 0); - fc_pause_prio_mask_o : out std_logic_vector(7 downto 0); - fc_buffer_occupation_o : out std_logic_vector(7 downto 0); - rmon_o : out t_rmon_triggers; - regs_i : in t_ep_out_registers; - regs_o : out t_ep_in_registers; - pfilter_pclass_o : out std_logic_vector(7 downto 0); - pfilter_drop_o : out std_logic; - pfilter_done_o : out std_logic; - rtu_rq_o : out t_ep_internal_rtu_request; - rtu_full_i : in std_logic; - rtu_rq_valid_o : out std_logic; - rtu_rq_abort_o : out std_logic; - nice_dbg_o : out t_dbg_ep_rxpath); - end component; - - component ep_1000basex_pcs - generic ( - g_simulation : boolean; - g_16bit : boolean); - port ( - rst_n_i : in std_logic; - clk_sys_i : in std_logic; - rxpcs_fab_o : out t_ep_internal_fabric; - rxpcs_fifo_almostfull_i : in std_logic; - rxpcs_busy_o : out std_logic; - rxpcs_timestamp_trigger_p_a_o : out std_logic; - rxpcs_timestamp_i : in std_logic_vector(31 downto 0); - rxpcs_timestamp_stb_i : in std_logic; - rxpcs_timestamp_valid_i : in std_logic; - txpcs_fab_i : in t_ep_internal_fabric; - txpcs_error_o : out std_logic; - txpcs_busy_o : out std_logic; - txpcs_dreq_o : out std_logic; - txpcs_timestamp_trigger_p_a_o : out std_logic; - link_ok_o : out std_logic; - link_ctr_i : in std_logic := '1'; - serdes_rst_o : out std_logic; - serdes_syncen_o : out std_logic; - serdes_loopen_o : out std_logic; - serdes_enable_o : out std_logic; - serdes_tx_clk_i : in std_logic; - serdes_tx_data_o : out std_logic_vector(15 downto 0); - serdes_tx_k_o : out std_logic_vector(1 downto 0); - serdes_tx_disparity_i : in std_logic; - serdes_tx_enc_err_i : in std_logic; - serdes_rx_clk_i : in std_logic; - serdes_rx_data_i : in std_logic_vector(15 downto 0); - serdes_rx_k_i : in std_logic_vector(1 downto 0); - serdes_rx_enc_err_i : in std_logic; - serdes_rx_bitslide_i : in std_logic_vector(4 downto 0); - rmon_o : out t_rmon_triggers; - mdio_addr_i : in std_logic_vector(15 downto 0); - mdio_data_i : in std_logic_vector(15 downto 0); - mdio_data_o : out std_logic_vector(15 downto 0); - mdio_stb_i : in std_logic; - mdio_rw_i : in std_logic; - mdio_ready_o : out std_logic; - dbg_tx_pcs_wr_count_o : out std_logic_vector(5+4 downto 0); - dbg_tx_pcs_rd_count_o : out std_logic_vector(5+4 downto 0); - nice_dbg_o : out t_dbg_ep_pcs); - end component; - - component ep_timestamping_unit - generic ( - g_timestamp_bits_r : natural; - g_timestamp_bits_f : natural; - g_ref_clock_rate : integer); - port ( - clk_ref_i : in std_logic; - clk_sys_i : in std_logic; - clk_rx_i : in std_logic; - rst_n_rx_i : in std_logic; - rst_n_ref_i : in std_logic; - rst_n_sys_i : in std_logic; - pps_csync_p1_i : in std_logic; - pps_valid_i : in std_logic; - tx_timestamp_trigger_p_a_i : in std_logic; - rx_timestamp_trigger_p_a_i : in std_logic; - rxts_timestamp_o : out std_logic_vector(31 downto 0); - rxts_timestamp_stb_o : out std_logic; - rxts_timestamp_valid_o : out std_logic; - txts_timestamp_o : out std_logic_vector(31 downto 0); - txts_timestamp_stb_o : out std_logic; - txts_timestamp_valid_o : out std_logic; - regs_i : in t_ep_out_registers; - regs_o : out t_ep_in_registers); - end component; - ------------------------------------------------------------------------------- -- TX FRAMER -> TX PCS signals ------------------------------------------------------------------------------- @@ -513,22 +362,6 @@ architecture syn of wr_endpoint is signal rxpcs_busy : std_logic; signal rxpcs_fifo_almostfull : std_logic; -------------------------------------------------------------------------------- --- RX deframer -> RX buffer signals -------------------------------------------------------------------------------- - - --signal rbuf_data : std_logic_vector(15 downto 0); - --signal rbuf_ctrl : std_logic_vector(4-1 downto 0); - --signal rbuf_sof_p : std_logic; - --signal rbuf_eof_p : std_logic; - --signal rbuf_error_p : std_logic; - --signal rbuf_valid : std_logic; - --signal rbuf_drop : std_logic; - --signal rbuf_bytesel : std_logic; - - --signal rx_buffer_used : std_logic_vector(7 downto 0); - - ------------------------------------------------------------------------------- -- WB slave signals ------------------------------------------------------------------------------- @@ -548,18 +381,11 @@ architecture syn of wr_endpoint is signal txfra_flow_enable : std_logic; signal rxfra_pause_p : std_logic; signal rxfra_pause_delay : std_logic_vector(15 downto 0); - --signal rxbuf_threshold_hit : std_logic; signal txfra_pause_req : std_logic; signal txfra_pause_ready : std_logic; signal txfra_pause_delay : std_logic_vector(15 downto 0); - --signal rofifo_write, rofifo_full, oob_valid_d0 : std_logic; - - --signal phase_meas : std_logic_vector(31 downto 0); - --signal phase_meas_p : std_logic; - --signal validity_cntr : unsigned(1 downto 0); - signal link_ok : std_logic; signal txfra_enable, rxfra_enable : std_logic;