ID Artikel: 000092741 Jenis Konten: Errata Terakhir Ditinjau: 15/08/2023

Mengapa nilai hitung saya untuk rx_tam_adjust salah saat menggunakan skrip yang ditemukan dalam contoh desain untuk varian PTP multijalur dari Intel® FPGA Hard IP Ethernet F-tile?

Lingkungan

  • Intel® Quartus® Prime Edisi Pro
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    Deskripsi

    Karena masalah dalam Perangkat Lunak Intel® Quartus® Prime Pro Edition versi 22.3, skrip "ptp_fw.tcl" yang disediakan dalam contoh desain untuk varian PTP multilane dari F-tile Ethernet Intel® FPGA Hard IP mungkin menghasilkan nilai rx_tam_adjust yang salah.

    Resolusi

    Untuk mengatasi masalah ini, lakukan langkah-langkah berikut ini:

    1. Buka skrip firmware PTP yang terletak di folder desain contoh yang dihasilkan <>/hardware_test_design/hwtest/altera/ptp/ptp_fw.tcl
    2. Temukan dan ganti baris kode berikut:
    DARIUNTUK

    # b) Hitung penyesuaian pulsa

    untuk {set fl 0} {$fl < $::FL} {incr fl} {
    set rx_xcvr_if_pulse_adj($fl) [format 0x%X $rx_fec_cw_pos_fl($fl)]
    }

    # b) Hitung penyesuaian pulsa dan periksa rollover cw_pos FEC antara jalur FEC yang diterima dari jalur transceiver yang sama

    untuk {set fl 0} {$fl < $::FL} {incr fl} {
    atur fl_minus [expr $fl - [expr $fl % $::P L_FL_MAP]]
    set cond1a [expr ($rx_fec_cw_pos_fl($fl) >= $rx_fec_cw_pos_fl($fl_minus))]
    Setel cond1b [expr (($rx_fec_cw_pos_fl($fl) - $rx_fec_cw_pos_fl($fl_minus)) > 0x4E20)]

    Setel cond2a [expr ($rx_fec_cw_pos_fl($fl_minus) > $rx_fec_cw_pos_fl($fl))]
    Setel cond2b [expr (($rx_fec_cw_pos_fl($fl_minus) - $rx_fec_cw_pos_fl($fl)) > 0x4E20)]

    jika: {$cond 1a &&; $cond 1b} {
    jika {$::FEC == 2} {
    # KRFEC
    set rx_xcvr_if_pulse_adj($fl) [expr 0x5280 - $rx_fec_cw_pos_fl($fl)]
    } elseif {($::FEC == 3) || ($::FEC == 4)} {
    # KP/LLFEC
    set rx_xcvr_if_pulse_adj($fl) [expr 0x5500 - $rx_fec_cw_pos_fl($fl)]
    }
    Atur rx_xcvr_if_pulse_adj_sign($fl) 0x1
    } elseif {$cond 2a &&; $cond 2b} {
    jika {$::FEC == 2} {
    # KRFEC
    set rx_xcvr_if_pulse_adj($fl) [expr 0x5280 + $rx_fec_cw_pos_fl($fl)]
    } elseif {($::FEC == 3) || ($::FEC == 4)} {
    # KP/LLFEC
    set rx_xcvr_if_pulse_adj($fl) [expr 0x5500 + $rx_fec_cw_pos_fl($fl)]
    }
    Atur rx_xcvr_if_pulse_adj_sign($fl) 0x0
    } else {
    set rx_xcvr_if_pulse_adj($fl) [format 0x%X $rx_fec_cw_pos_fl($fl)]
    Atur rx_xcvr_if_pulse_adj_sign($fl) 0x0
    }
    }

    return [array get rx_xcvr_if_pulse_adj]

    Atur l_rx_xcvr_if_pulse_adj [array get rx_xcvr_if_pulse_adj]
    Atur l_rx_xcvr_if_pulse_adj_sign [array get rx_xcvr_if_pulse_adj_sign]

    kembali [daftar $l_rx_xcvr_if_pulse_adj $l_rx_xcvr_if_pulse_adj_sign]

    proc determine_rx_ref_lane {lst_rx_xcvr_if_pulse_adj VL ui rx_pcs_bitslip_cnt rx_pcs_dlpulse_aligned l_rx_apulse_offset l_rx_apulse_offset_sign l_rx_apulse_wdelay l_rx_apulse_time ip_inst_base_addr} {

    #

    # argumen:

    # Mengembalikan: 'array-lists' untuk RX spulse offset (+ bit tanda). RX Ref PL/VL/FL

    Set array rx_apulse_offset $l_rx_apulse_offset

    set array rx_apulse_offset_sign $l_rx_apulse_offset_sign

    Set array rx_apulse_wdelay $l_rx_apulse_wdelay

    Set array rx_apulse_time $l_rx_apulse_time

    Set array rx_xcvr_if_pulse_adj $lst_rx_xcvr_if_pulse_adj

    print_info_time "Tentukan jalur referensi RX"

    # a) Tentukan offset pulsa sinkronisasi (Penanda Penjajaran) dengan mengacu pada pulsa asinkron

    jika {$::FEC > 0} {

    print_out "\tVarian : FEC>0"

    untuk {set fl 0} {$fl < $::FL} {incr fl} {

    atur fl_minus [expr $fl - [expr $fl % $::P L_FL_MAP]]

    set val0 [format 0x%X [expr $rx_xcvr_if_pulse_adj($fl_minus) & 0x0000001F]]

    atur val1 [format 0x%X [expr $rx_xcvr_if_pulse_adj($fl) + $val 0]]

    jika {$val 1 > $rx_xcvr_if_pulse_adj($fl_minus)} {

    Atur rx_spulse_offset_sign($fl) 0

    set rx_spulse_offset_0 [format 0x%lX [expr [expr ($rx_xcvr_if_pulse_adj($fl) - $rx_xcvr_if_pulse_adj($fl_minus)) + $val 0] * $ui * $::P L_FL_MAP]]

    atur rx_spulse_offset_1 [format 0x%lX [expr $rx_spulse_offset_0 &0x7FFFFFFFFFF]] ; # 43'rx_spulse_offset_0

    set rx_spulse_offset($fl) [format 0x%X [expr $rx_spulse_offset_1 >> [expr 28 - 16]]]

    } else {

    Set rx_spulse_offset_sign($fl) 1

    set rx_spulse_offset_0 [format 0x%lX [expr [expr ($rx_xcvr_if_pulse_adj($fl_minus) - $rx_xcvr_if_pulse_adj($fl)) - $val 0] * $ui * $::P L_FL_MAP]]

    atur rx_spulse_offset_1 [format 0x%lX [expr $rx_spulse_offset_0 &0x7FFFFFFFFFF]] ; # 43'rx_spulse_offset_0

    set rx_spulse_offset($fl) [format 0x%X [expr $rx_spulse_offset_1 >> [expr 28 - 16]]]

    }

    proc determine_rx_ref_lane {lst_rx_xcvr_if_pulse_adj lst_rx_xcvr_if_pulse_adj_sign VL ui rx_pcs_bitslip_cnt rx_pcs_dlpulse_aligned l_rx_apulse_offset l_rx_apulse_offset_sign l_rx_apulse_wdelay l_rx_apulse_time ip_inst_base_addr} {

    #

    # argumen:

    # Mengembalikan: 'array-lists' untuk RX spulse offset (+ bit tanda). RX Ref PL/VL/FL

    Set array rx_apulse_offset $l_rx_apulse_offset

    set array rx_apulse_offset_sign $l_rx_apulse_offset_sign

    Set array rx_apulse_wdelay $l_rx_apulse_wdelay

    Set array rx_apulse_time $l_rx_apulse_time

    Set array rx_xcvr_if_pulse_adj $lst_rx_xcvr_if_pulse_adj

    Set array rx_xcvr_if_pulse_adj_sign $lst_rx_xcvr_if_pulse_adj_sign

    print_info_time "Tentukan jalur referensi RX"

    # a) Tentukan offset pulsa sinkronisasi (Penanda Penjajaran) dengan mengacu pada pulsa asinkron

    jika {$::FEC > 0} {

    print_out "\tVarian : FEC>0"

    untuk {set fl 0} {$fl < $::FL} {incr fl} {

    atur fl_minus [expr $fl - [expr $fl % $::P L_FL_MAP]]

    set val0 [format 0x%X [expr $rx_xcvr_if_pulse_adj($fl_minus) & 0x0000001F]]

    atur val1 [format 0x%X [expr $rx_xcvr_if_pulse_adj($fl) + $val 0]]

    jika {$rx_xcvr_if_pulse_adj_sign($fl) == 1} {

    Set rx_spulse_offset_sign($fl) 1

    atur rx_spulse_offset_0 [format 0x%lX [expr $rx_xcvr_if_pulse_adj($fl) * $ui * $::P L_FL_MAP]]

    atur rx_spulse_offset_1 [format 0x%lX [expr $rx_spulse_offset_0 &0x7FFFFFFFFFF]] ; # 43'rx_spulse_offset_0

    set rx_spulse_offset($fl) [format 0x%X [expr $rx_spulse_offset_1 >> [expr 28 - 16]]]

    } else {

    jika {$val 1 > $rx_xcvr_if_pulse_adj($fl_minus)} {

    Atur rx_spulse_offset_sign($fl) 0

    set rx_spulse_offset_0 [format 0x%lX [expr [expr ($rx_xcvr_if_pulse_adj($fl) - $rx_xcvr_if_pulse_adj($fl_minus)) + $val 0] * $ui * $::P L_FL_MAP]]

    atur rx_spulse_offset_1 [format 0x%lX [expr $rx_spulse_offset_0 &0x7FFFFFFFFFF]] ; # 43'rx_spulse_offset_0

    set rx_spulse_offset($fl) [format 0x%X [expr $rx_spulse_offset_1 >> [expr 28 - 16]]]

    } else {

    Set rx_spulse_offset_sign($fl) 1

    set rx_spulse_offset_0 [format 0x%lX [expr [expr ($rx_xcvr_if_pulse_adj($fl_minus) - $rx_xcvr_if_pulse_adj($fl)) - $val 0] * $ui * $::P L_FL_MAP]]

    atur rx_spulse_offset_1 [format 0x%lX [expr $rx_spulse_offset_0 &0x7FFFFFFFFFF]] ; # 43'rx_spulse_offset_0

    set rx_spulse_offset($fl) [format 0x%X [expr $rx_spulse_offset_1 >> [expr 28 - 16]]]

    }

    }

    rangkaian array rx_xcvr_if_pulse_adj [configure_rx_fec_cw_pos $inst_num $init_pl]

    jika {$::FEC > 0} {

    mengatur int_list [configure_rx_fec_cw_pos $inst_num $init_pl]

    lassign $int_list l_rx_xcvr_if_pulse_adj l_rx_xcvr_if_pulse_adj_sign

    Set array rx_xcvr_if_pulse_adj $l_rx_xcvr_if_pulse_adj

    Set array rx_xcvr_if_pulse_adj_sign $l_rx_xcvr_if_pulse_adj_sign

    jika {$::d ebug} {

    untuk {set fl 0} {$fl < $::FL} {incr fl} {

    print_out "\trx_xcvr_if_pulse_adj($fl) : [format 0x%08X $rx_xcvr_if_pulse_adj($fl)]"

    print_out "\trx_xcvr_if_pulse_adj_sign($fl) : [format 0x%08X $rx_xcvr_if_pulse_adj_sign($fl)]"

    }

    }

    # Langkah 3: Tentukan jalur referensi RX

    Atur int_list [determine_rx_ref_lane [array get rx_xcvr_if_pulse_adj]\

    $VL\

    # Langkah 3: Tentukan jalur referensi RX

    Atur int_list [determine_rx_ref_lane [array get rx_xcvr_if_pulse_adj]\

    [array mendapatkan rx_xcvr_if_pulse_adj_sign]\

    $VL

    1. Simpan file

    Masalah ini diperbaiki dimulai dengan Perangkat Lunak Intel® Quartus® Prime Pro Edition versi 22.4.

    Produk Terkait

    Artikel ini berlaku untuk 2 produk

    FPGA dan SoC FPGA Intel® Agilex™ Seri F
    Intel® Agilex™ 7 FPGA dan SoC FPGA Seri I

    Isi halaman ini adalah kombinasi terjemahan manusia dan komputer dari konten berbahasa Inggris. Konten ini diberikan hanya untuk kenyamanan Anda serta sebagai informasi umum dan tidak bisa dianggap sebagai lengkap atau akurat. Jika terdapat kontradiksi antara versi bahasa Inggris halaman ini dan terjemahannya, versi bahasa Inggris akan didahulukan. Lihat versi bahasa Inggris halaman ini.