Visible to Intel only — GUID: ggw1739496326520
Ixiasoft
Visible to Intel only — GUID: ggw1739496326520
Ixiasoft
A.4.2. Executing the Script
The design used to execute and test the script is an FGT FEC direct 400G 8 channels PAM4 design.
In the Tcl console window type: source ttk_helper_ftile.tclrd_channel_ftile {phy channel address verbose} to read and printout use e.g. rd_channel_file ftile_phy_0 3 0x47830 1 when only reading without printing use e.g. set d [rd_channel_ftile ftile_phy_0 3 0x47830 0] rd_channel_pdp {phy channel offset verbose} to read and printout use e.g. rd_channel_pdp ftile_phy_pdp_0 0 0x60C0 1 when only reading without printing use e.g. set d [rd_channel_pdp ftile_phy_pdp_0 0 0x60C0 1] wr_channel {phy channel offset newval verbose} example usage wr_channel ftile_phy_0 1 0x207 0x91 1 rmw_channel {phy channel offset mask newval verbose} example usage rmw_channel ftile_phy_0 0 0x47830 0x0000FC00 [expr 35 << 10] 1 rmw_channel_ftile {phy channel address mask newval verbose} example usage (set maintap to 35) rmw_channel_ftile ftile_phy_0 1 0x47830 0x0000FC00 [expr 35 << 10] 1 wr_channel_ftile {phy channel address newval verbose} wr_channel_pdp {phy channel offset newval verbose} example usage wr_channel ftile_phy_pdp_0 0 0x1E0 0x00000001 1 rmw_channel_pdp {phy channel offset mask newval verbose} example usage rmw_channel_pdp ftile_phy_pdp_0 0 0x1E0 0x00000001 0x00000001 1 reset_phy {phy verbose} example usage reset phy using soft CSR : reset_phy ftile_phy_0 1 Note that this function does not check whether soft CSR is enabled or not when Phy-Direct IP is used reset_assert_phy {phy verbose} example usage reset assert phy using soft CSR : reset_assert_phy ftile_phy_0 1 Note that this function does not check whether soft CSR is enabled or not when Phy-Direct IP is used reset_deassert_phy {phy verbose} example usage reset deassert phy using soft CSR : reset_deassert_phy ftile_phy_0 1 Note that this function does not check whether soft CSR is enabled or not when Phy-Direct IP is used cpi_request_fgt {phy channel data opcode assert set_getn verbose get_cpidata {phy channel data opcode verbose} get_fom {phy channel verbose} example usage (read from from channel 7): get_fom ftile_phy_0 7 0 get_vga {phy channel verbose} example usage (read from from channel 7): get_vga ftile_phy_0 7 0 get_ctle {phy channel verbose} example usage (read from from channel 7): get_ctle ftile_phy_0 7 0 set_media_mode {phy number_of_lanes media_mode verbose} example usage to set to VSR Low Loss (8dB) : set_media_mode ftile_phy_0 8 0x14 0 example usage to set to VSR High Loss (10dB) : set_media_mode ftile_phy_0 8 0x15 0 example usage to set to FW Default : set_media_mode ftile_phy_0 8 0x10 0 Note that VSR High Loss mode is not supported on Rev A0 silicon get_firmware_fgt {phy verbose} example to get firmware version for fgt: get_firmware_fgt ftile_phy_0 1 get_firmware_fht {phy verbose} example to get firmware version for fht : get_firmware_fht ftile_phy_0 1 get_silicon_rev {phy verbose} example to get silicon revision : get_silicon_rev ftile_phy_0 0 readout_adaptation_mode_fgt {phy channel verbose} example to get adapation mode for fgt for channel 1: readout_adaptation_mode_fgt ftile_phy_0 1 0 read_recclk_status {phy channel verbose} example usage to read the status of the recovered clock output : read_recclk_status ftile_phy_0 0 0 enable_recclk {phy channel verbose} example usage to enable the recovered clock from phy_15 : enable_recclk ftile_phy_0 0 0 disable_recclk {phy channel verbose} example usage to disable the recovered clock output on phy_15 : disable_recclk ftile_phy_0 0 0 get_rx_ready_fgt {phy channel verbose} example usage : get_rx_ready_fgt ftile_phy_0 0 0 get_rx_ready_fht {phy channel verbose} example usage : get_rx_ready_fht ftile_phy_0 0 0 get_tx_ready_fgt {phy channel verbose} example usage : get_tx_ready_fgt ftile_phy_0 0 0 compare_xcvr_channels {phy ch1 ch2 start_addr stop_addr} example usage compare_xcvr_channels ftile_phy_0 0 1 0x0 0xF set_serial_loopback {phy number_of_lanes serial_loop verbose} the corresponding reconfig_pdp or phy_pdp (AVMM1) will be used using the same index number as the phy example to turn serial loopback ON for all 8 channels of ftile_phy_0 : set_serial_loopback ftile_phy_0 8 1 1 set_rev_par_loopback {phy number_of_lanes rev_parallel verbose} this information can be obtained by looking that the claimed phy's and pdp_phy's "Note : if Phy Direct IP with FEC enabled is used enabling/disabling PMA reverse parallel loopback will not work with system console" "Note : as it requires user logic to start the generation of the tx_am_gen_start pulses to reach tx_ready after tx_reset" example to turn the PMA reverse parallel loopback ON for all channels of ftile_phy_0 : set_rev_par_loopback ftile_phy_0 8 1 1 set_par_loopback {phy number_of_lanes parallel verbose} this information can be obtained by looking that the claimed phy's and pdp_phy's "Note : if a Phy Direct IP with FEC enabled is used then turning off the parallel loopback requires a full reset of the phy (to be done outside of system console)" example to turn the parallel loopback ON for all channels of ftile_phy_0 : set_par_loopback ftile_phy_0 8 1 1 set_tx_invert_polarity {phy channel tx_polarity verbose} example to invert the tx_polarity on channel 2 on ftile_phy_0 : set_tx_invert_polarity ftile_phy_0 2 1 1 set_rx_invert_polarity {phy channel rx_polarity verbose} example to invert the rx_polarity on channel 2 on ftile_phy_0 : set_rx_invert_polarity ftile_phy_0 2 1 1 run_prbs_test {remote_phy remote_ch dut_phy dut_ch prbs_pattern runtime_ms error_count verbose} example to run a BER Test using PRBS31 for 1 second from phy 0 channel 0 to phy 3 channel 0 and injecting 10 errors : run_prbs_test ftile_phy_0 0 ftile_phy_3 0 $PRBS31 1000 10 0 start_prbs_tx {phy channel prbs_pattern verbose} example to start BER Test using PRBS31 pattern on tx of channel 0 on ftile_phy_0 : start_prbs_tx ftile_phy_0 0 $PRBS31 0 start_prbs_rx {phy channel prbs_pattern verbose} example to start BER Test using PRBS31 pattern on rx of channel 0 on ftile_phy_0 : start_prbs_rx ftile_phy_0 0 $PRBS31 0 inj_prbs_err_fht {phy channel verbose} prbs_err_cnt_ctrl_fht {phy channel start stop clear} prbs_err_cnt_fht {phy channel} prbs_tx_cnt_fht {phy channel} prbs_ber_fht {phy channel} prbs_test_fht {phy channel prbs_pattern verbose} example: prbs_test_fht ftile_phy_0 0 4 0 prbs_pattern: 7/9/11/23/31 --> 0/1/2/3/4 rsfec_test {phy_pdp eth_rate num_of_lane test_time_sec num_of_test file_id} example: rsfec_test ftile_phy_pdp_0 200 4 1 10 stdout inject_prbs_errors {phy channel error_number verbose} example to inject 10 errors on channel 0 on ftile_phy_0 : inject_prbs_errors ftile_phy_0 0 10 0 read_prbs_error_count {phy channel} example to get the prbs errorcount on channel 0 on ftile_phy_0 : set errorcount [read_prbs_error_count ftile_phy_0 0] clear_prbs_error_count {phy channel} example to clear the prbs errorcount on channel 0 on ftile_phy_0 : clear_prbs_error_count ftile_phy_0 0 stop_prbs_tx {phy channel verbose} example to stop BER Test on tx of channel 0 on ftile_phy_0 : stop_prbs_tx ftile_phy_0 0 0 stop_prbs_rx {phy channel prbs_pattern verbose} example to start BER Test using PRBS31 pattern on rx of channel 0 on ftile_phy_0 : stop_prbs_rx ftile_phy_0 0 0 program_tx_pma_settings_fht {phy channel fht_tx_pretap_3 fht_tx_pretap_2 fht_tx_pretap_1 fht_tx_maintap fht_tx_posttap_1 fht_tx_posttap_2 fht_tx_posttap_3 fht_tx_posttap_4 verbose} example to set FHT Tx EQ settings (pre_tap_1=56, main_tap=30, post_tap_1=60, post_tap_2=56 on ftile_phy_0 : program_tx_pma_settings_fht ftile_phy_0 0 0 0 56 30 60 56 0 0 1 note that Tx EQ settings provided are similar to .qsf assignment settings (using twos_complement and multiplication) note that no check is being done whether the values entered or valid or not, this is the responsibility of the user to mute the transmitter just set all values to 0 show_phy_direct_info {phy_pdp} example to show phy info ON of ftile_phy_pdp_0 : show_phy_direct_info ftile_phy_pdp_0 1 show_pma_settings_ftile {phy number_of_lanes do_ehm} example usage (with ehm at 1e-6 enabled : show_pma_settings_ftile ftile_phy_0 8 1 Note that if you use ehm it will take more time for it to complete measure_ehm_fgt {phy channel ber_target verbose} example usage measure ehm on fgt with ber target of 1E-6: measure_ehm_fgt ftile_phy_0 0 6 0 get_snr_fht {phy channel} example usage measure snr on fht : get_snr_fht ftile_phy_0 0 get_ehm_fht {phy channel bin_threshold test_length} example usage measure ehm on fht : get_ehm_fht ftile_phy_0 0 2 10 set_txeq_settings {phy number_of_lanes maintap pretap1 pretap2 posttap1 verbose} example usage : set_txeq_settings ftile_phy_0 1 35 5 0 0 0 set_rxeq_settings {phy number_of_lanes hf_boost vga_gain dfe_tap verbose} example usage : set_rxeq_settings ftile_phy_0 1 30 10 0 1
Following is the list of F-Tile PHY's claimed (reconfig_xcvr/avmm2). You should use the ftile_phy_<i> as phy identifier in the functions:
Phy : "ftile_phy_0" ---> Hierarchy Path: {Generate_transceiver_block[0].instx| Generate_txrx_pcs_64b66b_fgt[0].txrx_pcs_64b66b_fgt_x| Generate_phy_direct[0].phy_direct_inst|directphy_f_0| dphy_sip_inst|f_dphy_adme[0].f_dphy_adme_inst|f_dphy_adme|avmm2} Slave: 0x1800000
Phy : "ftile_phy_1" ---> Hierarchy Path: {Generate_transceiver_block[1].instx| Generate_txrx_pcs_64b66b_fgt[0].txrx_pcs_64b66b_fgt_x| Generate_phy_direct[0].phy_direct_inst|directphy_f_0| dphy_sip_inst|f_dphy_adme[0].f_dphy_adme_inst|f_dphy_adme|avmm2} Slave: 0x2000000
Following is the list of F-Tile PDP PHY's claimed (reconfig_xcvr/avmm1). You should use the ftile_phy_<i> as phy identifier in the functions:
Phy_pdp : "ftile_phy_pdp_0" ---> Hierarchy Path: {Generate_transceiver_block[0].instx| Generate_txrx_pcs_64b66b_fgt[0].txrx_pcs_64b66b_fgt_x| Generate_phy_direct[0].phy_direct_inst|directphy_f_0|dphy_sip_inst| f_dphy_adme[0].f_dphy_adme_inst|f_dphy_adme|avmm1} Slave: 0x800000
Phy_pdp : "ftile_phy_pdp_1" ---> Hierarchy Path: {Generate_transceiver_block[1].instx| Generate_txrx_pcs_64b66b_fgt[0].txrx_pcs_64b66b_fgt_x| Generate_phy_direct[0].phy_direct_inst|directphy_f_0| dphy_sip_inst|f_dphy_adme[0].f_dphy_adme_inst|f_dphy_adme|avmm1} Slave: 0x1000000
You can view the complete print out in the Messages window that displays each function with an example to guide you what parameter to pass for the acceptable function calls.
For example, you can use show_pma_setting_ftile function to get the pma_settings of specific channels of a PMA Direct IP or an F-Tile Hard IP or a Multirate IP. From the output hint in the Messages window, you can see how to make the function call.
show_pma_settings_ftile {phy number_of_lanes do_ehm} example usage (with ehm at 1e-6 enabled : show_pma_settings_ftile ftile_phy_0 8 1} {Note that if you use ehm it will take more time for it to complete}
In the example, if you want to view the PMA settings for phy_0, 8 channels, with eye height measurement (do_ehm=1). You should enter the following function call in the Tcl console window:
show_pma_settings_ftile ftile_phy_0 8 1
show_pma_setting_ftile ftile_phy_0 8 0
You can view a lot of useful information to help you understand your channel such as PMA type, Quad and channel used, line encoding type, loopback type, TX and RX equalization taps values, adaptation mode as well as useful information to help you examine the channel health such as tx and rx ready status, FOM value (larger the better). The eye height measurement function is currently available for the auto adaptation mode only.
You can see that the top, middle and bottom eye height values are printed out. By adjusting the TX and RX equalization parameter values, you can see changes in the eye height values. Hence, you can find the optimal equalization parameter values to generate the largest eye opening.
set_serial_loopback {phy number_of_lanes serial_loop verbose} the corresponding reconfig_pdp or phy_pdp (AVMM1) will be used using the same index number as the phy example to turn serial loopback ON for all 8 channels of ftile_phy_0 : set_serial_loopback ftile_phy_0 8 1 1
set_serial_loopback ftile_phy_0 4 1 0
The script output hint shows that this is an illegal function call and displays the following message:
number_of_lanes: 4 provided does not match with the amount of lanes in the phy: 8: operation aborted
set_serial_loopback ftile_phy_0 8 1 1You can now see that serial loopback is enabled for all the channels. You can also modify the script to achieve the individual channel’s loopback control. The following figure displays the information for the 8 channel serial loopback enabled.
rsfec_test {phy_pdp eth_rate num_of_lane test_time_sec num_of_test file_id} example: rsfec_test ftile_phy_pdp_0 200 4 1 10 stdout
The design used to run the test is a FGT FEC direct 400G-8 design. The example print out displays the function call for a 200G 4 channel design. You can modify the function call for a 400G 8 channel design that is used to execute this script as shown below:
rsfec_test ftile_phy_pdp_0 400 8 1 10 stdout