ID บทความ: 000092741 ประเภทข้อมูล: ข้อผิดพลาด การตรวจสอบครั้งล่าสุด: 15/08/2023

ทําไมค่าที่คํานวณ rx_tam_adjust ไม่ถูกต้องเมื่อใช้สคริปต์ที่พบในตัวอย่างการออกแบบสําหรับตัวแปร PTP แบบหลายเลนของ Intel® FPGA Hard IP F-tile Ethernet

สิ่งแวดล้อม

  • Intel® Quartus® Prime Pro Edition
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    คำอธิบาย

    เนื่องจากปัญหาในซอฟต์แวร์ Intel® Quartus® Prime Pro Edition เวอร์ชัน 22.3 สคริปต์ "ptp_fw.tcl" ที่มีให้ในตัวอย่างการออกแบบสําหรับตัวแปร PTP แบบหลายเลนของ Intel® FPGA Hard IP อีเธอร์เน็ต F-tile อาจให้ค่า rx_tam_adjust ที่ไม่ถูกต้อง

    ความละเอียด

    เมื่อต้องการหลีกเลี่ยงปัญหานี้ ให้ทําตามขั้นตอนต่อไปนี้:

    1. เปิดสคริปต์เฟิร์มแวร์ PTP ที่โฟลเดอร์ตัวอย่างการออกแบบ<>/hardware_test_design/hwtest/altera/ptp/ptp_fw.tcl
    2. ค้นหาและแทนที่บรรทัดของรหัสต่อไปนี้:
    จากถึง

    # b) คํานวณ การปรับพัลส์

    สําหรับ {set fl 0} {$fl < $::FL} {incr fl} {
    ตั้งค่า rx_xcvr_if_pulse_adj($fl) [รูปแบบ 0x%X $rx_fec_cw_pos_fl($fl)]
    }

    # b) คํานวณการปรับพัลส์และตรวจสอบ การโรลโอเวอร์ cw_pos ของ FEC ระหว่างเลน FEC ที่ได้รับจากเลนตัวรับส่งสัญญาณเดียวกัน

    สําหรับ {set fl 0} {$fl < $::FL} {incr fl} {
    ตั้งค่า fl_minus [expr $fl - [expr $fl % $::P L_FL_MAP]]
    ตั้งค่า cond1a [expr ($rx_fec_cw_pos_fl($fl) >= $rx_fec_cw_pos_fl ($fl_minus)]
    set cond1b [expr ($rx_fec_cw_pos_fl($fl) - $rx_fec_cw_pos_fl ($fl_minus)) > 0x4E20)]

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

    ถ้า {$cond 1a & $cond 1b} {
    ถ้า {$::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
    ตั้งค่า rx_xcvr_if_pulse_adj($fl) [expr 0x5500 - $rx_fec_cw_pos_fl ($fl)]
    }
    0x1 set rx_xcvr_if_pulse_adj_sign($fl)
    } ส่ง {$cond 2a & $cond 2b} {
    ถ้า {$::FEC == 2} {
    # KRFEC
    ตั้งค่า rx_xcvr_if_pulse_adj($fl) [expr 0x5280 + $rx_fec_cw_pos_fl ($fl)]
    } elseif {($::FEC == 3) || ($::FEC == 4)} {
    # KP/LLFEC
    ตั้งค่า rx_xcvr_if_pulse_adj($fl) [expr 0x5500 + $rx_fec_cw_pos_fl ($fl)]
    }
    ตั้งค่า rx_xcvr_if_pulse_adj_sign($fl) 0x0
    } อื่นๆ {
    ตั้งค่า rx_xcvr_if_pulse_adj($fl) [รูปแบบ 0x%X $rx_fec_cw_pos_fl($fl)]
    ตั้งค่า rx_xcvr_if_pulse_adj_sign($fl) 0x0
    }
    }

    ส่งคืน [รับ rx_xcvr_if_pulse_adj อาร์เรย์]

    ตั้งค่า l_rx_xcvr_if_pulse_adj [รับ rx_xcvr_if_pulse_adj อาร์เรย์]
    ตั้งค่า l_rx_xcvr_if_pulse_adj_sign [รับ rx_xcvr_if_pulse_adj_sign]

    ส่งคืน [list $l_rx_xcvr_if_pulse_adj $l_rx_xcvr_if_pulse_adj_sign]

    determine_rx_ref_lane proc {lst_rx_xcvr_if_pulse_adj VL 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} {

    #

    # อาร์กิวเมนต์:

    # ส่งคืน: 'array-list' สําหรับ rx spulse offset (+sign bit) rx ref pl/vl/fl

    ชุดอาร์เรย์ rx_apulse_offset $l_rx_apulse_offset

    ชุดอาร์เรย์ rx_apulse_offset_sign $l_rx_apulse_offset_sign

    ชุดอาร์เรย์ rx_apulse_wdelay $l_rx_apulse_wdelay

    ชุดอาร์เรย์ rx_apulse_time $l_rx_apulse_time

    ชุดอาร์เรย์ rx_xcvr_if_pulse_adj $lst_rx_xcvr_if_pulse_adj

    print_info_time "กําหนดเลนอ้างอิง RX"

    # a) กําหนด ออฟเซตพัลส์ซิงค์ (Alignment Marker) ด้วยการอ้างอิงไปยังพัลส์ async

    ถ้า {$::FEC > 0} {

    print_out "\tVariant : FEC>0"

    สําหรับ {set fl 0} {$fl < $::FL} {incr fl} {

    ตั้งค่า fl_minus [expr $fl - [expr $fl % $::P L_FL_MAP]]

    ตั้งค่า val0 [รูปแบบ 0x%X [expr $rx_xcvr_if_pulse_adj($fl_minus) &0x0000001F]]

    ตั้งค่า val1 [รูปแบบ 0x%X [expr $rx_xcvr_if_pulse_adj($fl) + $val 0]]

    ถ้า {$val 1 > $rx_xcvr_if_pulse_adj ($fl_minus)} {

    ตั้งค่า rx_spulse_offset_sign($fl) 0

    ตั้งค่า rx_spulse_offset_0 [รูปแบบ 0x%lX [expr [expr ($rx_xcvr_if_pulse_adj($fl) - $rx_xcvr_if_pulse_adj ($fl_minus)) + $val 0] * $ui * $::P L_FL_MAP]]

    ตั้งค่า rx_spulse_offset_1 [รูปแบบ 0x%lX [expr $rx_spulse_offset_0 &0x7FFFFFFFFFF]] ; # 43'rx_spulse_offset_0

    ตั้งค่า rx_spulse_offset($fl) [รูปแบบ 0x%X [expr $rx_spulse_offset_1 >> [expr 28 - 16]]]

    } อื่นๆ {

    ตั้งค่า rx_spulse_offset_sign($fl) 1

    ตั้งค่า rx_spulse_offset_0 [รูปแบบ 0x%lX [expr [expr ($rx_xcvr_if_pulse_adj($fl_minus) - $rx_xcvr_if_pulse_adj($fl)) - $val 0] * $ui * $::P L_FL_MAP]]

    ตั้งค่า rx_spulse_offset_1 [รูปแบบ 0x%lX [expr $rx_spulse_offset_0 &0x7FFFFFFFFFF]] ; # 43'rx_spulse_offset_0

    ตั้งค่า rx_spulse_offset($fl) [รูปแบบ 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} {

    #

    # อาร์กิวเมนต์:

    # ส่งคืน: 'array-list' สําหรับ rx spulse offset (+sign bit) rx ref pl/vl/fl

    ชุดอาร์เรย์ rx_apulse_offset $l_rx_apulse_offset

    ชุดอาร์เรย์ rx_apulse_offset_sign $l_rx_apulse_offset_sign

    ชุดอาร์เรย์ rx_apulse_wdelay $l_rx_apulse_wdelay

    ชุดอาร์เรย์ rx_apulse_time $l_rx_apulse_time

    ชุดอาร์เรย์ rx_xcvr_if_pulse_adj $lst_rx_xcvr_if_pulse_adj

    ชุดอาร์เรย์ rx_xcvr_if_pulse_adj_sign $lst_rx_xcvr_if_pulse_adj_sign

    print_info_time "กําหนดเลนอ้างอิง RX"

    # a) กําหนด ออฟเซตพัลส์ซิงค์ (Alignment Marker) ด้วยการอ้างอิงไปยังพัลส์ async

    ถ้า {$::FEC > 0} {

    print_out "\tVariant : FEC>0"

    สําหรับ {set fl 0} {$fl < $::FL} {incr fl} {

    ตั้งค่า fl_minus [expr $fl - [expr $fl % $::P L_FL_MAP]]

    ตั้งค่า val0 [รูปแบบ 0x%X [expr $rx_xcvr_if_pulse_adj($fl_minus) &0x0000001F]]

    ตั้งค่า val1 [รูปแบบ 0x%X [expr $rx_xcvr_if_pulse_adj($fl) + $val 0]]

    ถ้า {$rx_xcvr_if_pulse_adj_sign ($fl) == 1} {

    ตั้งค่า rx_spulse_offset_sign($fl) 1

    ตั้งค่า rx_spulse_offset_0 [รูปแบบ 0x%lX [expr $rx_xcvr_if_pulse_adj($fl) * $ui * $::P L_FL_MAP]]

    ตั้งค่า rx_spulse_offset_1 [รูปแบบ 0x%lX [expr $rx_spulse_offset_0 &0x7FFFFFFFFFF]] ; # 43'rx_spulse_offset_0

    ตั้งค่า rx_spulse_offset($fl) [รูปแบบ 0x%X [expr $rx_spulse_offset_1 >> [expr 28 - 16]]]

    } อื่นๆ {

    ถ้า {$val 1 > $rx_xcvr_if_pulse_adj ($fl_minus)} {

    ตั้งค่า rx_spulse_offset_sign($fl) 0

    ตั้งค่า rx_spulse_offset_0 [รูปแบบ 0x%lX [expr [expr ($rx_xcvr_if_pulse_adj($fl) - $rx_xcvr_if_pulse_adj ($fl_minus)) + $val 0] * $ui * $::P L_FL_MAP]]

    ตั้งค่า rx_spulse_offset_1 [รูปแบบ 0x%lX [expr $rx_spulse_offset_0 &0x7FFFFFFFFFF]] ; # 43'rx_spulse_offset_0

    ตั้งค่า rx_spulse_offset($fl) [รูปแบบ 0x%X [expr $rx_spulse_offset_1 >> [expr 28 - 16]]]

    } อื่นๆ {

    ตั้งค่า rx_spulse_offset_sign($fl) 1

    ตั้งค่า rx_spulse_offset_0 [รูปแบบ 0x%lX [expr [expr ($rx_xcvr_if_pulse_adj($fl_minus) - $rx_xcvr_if_pulse_adj($fl)) - $val 0] * $ui * $::P L_FL_MAP]]

    ตั้งค่า rx_spulse_offset_1 [รูปแบบ 0x%lX [expr $rx_spulse_offset_0 &0x7FFFFFFFFFF]] ; # 43'rx_spulse_offset_0

    ตั้งค่า rx_spulse_offset($fl) [รูปแบบ 0x%X [expr $rx_spulse_offset_1 >> [expr 28 - 16]]]

    }

    }

    ชุดอาร์เรย์ rx_xcvr_if_pulse_adj [configure_rx_fec_cw_pos $inst_num $init_pl]

    ถ้า {$::FEC > 0} {

    ตั้งค่า 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

    ชุดอาร์เรย์ rx_xcvr_if_pulse_adj $l_rx_xcvr_if_pulse_adj

    ชุดอาร์เรย์ rx_xcvr_if_pulse_adj_sign $l_rx_xcvr_if_pulse_adj_sign

    ถ้า {$::d ebug} {

    สําหรับ {set fl 0} {$fl < $::FL} {incr fl} {

    print_out "\trx_xcvr_if_pulse_adj($fl) : [รูปแบบ 0x%08X $rx_xcvr_if_pulse_adj($fl)]"

    print_out "\trx_xcvr_if_pulse_adj_sign($fl) : [รูปแบบ 0x%08X $rx_xcvr_if_pulse_adj_sign($fl)]

    }

    }

    # ขั้นตอนที่ 3: ระบุเลนอ้างอิง RX

    ตั้งค่า int_list [determine_rx_ref_lane [อาร์เรย์ได้รับ rx_xcvr_if_pulse_adj]\

    $VL\

    # ขั้นตอนที่ 3: ระบุเลนอ้างอิง RX

    ตั้งค่า int_list [determine_rx_ref_lane [อาร์เรย์ได้รับ rx_xcvr_if_pulse_adj]\

    [อาร์เรย์ได้รับ rx_xcvr_if_pulse_adj_sign]\

    $VL

    1. บันทึกไฟล์

    ปัญหานี้ได้รับการแก้ไขแล้วเริ่มต้นด้วย Intel® Quartus®ซอฟต์แวร์ Prime Pro Edition เวอร์ชัน 22.4

    ผลิตภัณฑ์ที่เกี่ยวข้อง

    บทความนี้จะนำไปใช้กับ 2 ผลิตภัณฑ์

    เอฟพีจีเอและเอฟพีจีเอ SoC Intel® Agilex™ 7 F-ซีรีส์
    เอฟพีจีเอและเอฟพีจีเอ SoC Intel® Agilex™ 7 I-ซีรีส์

    เนื้อหาในหน้านี้เป็นการผสมผสานระหว่างการแปลเนื้อหาต้นฉบับภาษาอังกฤษโดยมนุษย์และคอมพิวเตอร์ เนื้อหานี้จัดทำขึ้นเพื่อความสะดวกของคุณและเพื่อเป็นข้อมูลทั่วไปเท่านั้นและไม่ควรอ้างอิงว่าสมบูรณ์หรือถูกต้อง หากมีความขัดแย้งใด ๆ ระหว่างเวอร์ชันภาษาอังกฤษของหน้านี้กับคำแปล เวอร์ชันภาษาอังกฤษจะมีผลเหนือกว่าและควบคุม ดูเวอร์ชันภาษาอังกฤษของหน้านี้