문서 ID: 000092741 콘텐츠 형태: 정오표 마지막 검토일: 2023-08-15

F-tile Ethernet 인텔® FPGA Hard IP의 멀티레인 PTP 변형에 대한 설계 예제에 있는 스크립트를 사용할 때 rx_tam_adjust에 대해 계산된 값이 올바르지 않은 이유는 무엇입니까?

환경

  • 인텔® Quartus® Prime Pro Edition
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    설명

    인텔® Quartus® Prime Pro Edition 소프트웨어 버전 22.3의 문제로 인해 F-타일 이더넷 인텔® FPGA Hard IP의 다중 레인 PTP 변형에 대한 설계 예에 제공된 "ptp_fw.tcl" 스크립트가 잘못된 rx_tam_adjust 값을 생성할 수 있습니다.

    해결 방법

    이 문제를 해결하려면 다음과 같이 하십시오.

    1. <생성된 예제 디자인 폴더>/hardware_test_design/hwtest/altera/ptp/ptp_fw.tcl에 있는 PTP 펌웨어 스크립트를 엽니다.
    2. 다음 코드 줄을 찾아 바꿉니다.
    보낸 사람받는 사람

    # b) 펄스 조정 계산

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

    # b) 펄스 조정계산 하고 동일한 트랜시버 레인에서 수신한 FEC 레인 간 FEC의 cw_pos 롤오버 확인

    {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))] 설정
    cond1b 설정 [expr (($rx_fec_cw_pos_fl($fl) - $rx_fec_cw_pos_fl($fl_minus)) > 0x4E20)]

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

    if {$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
    set rx_xcvr_if_pulse_adj($fl) [expr 0x5500 - $rx_fec_cw_pos_fl($fl)] 설정
    }
    rx_xcvr_if_pulse_adj_sign($fl) 0x1 설정
    } elseif {$cond 2a && $cond 2b} {
    {$::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)]
    }
    rx_xcvr_if_pulse_adj_sign($fl) 0x0 설정
    } 다른 {
    set 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]

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

    return [목록 $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} {

    #

    # 인수:

    # 반환: rx 펄스 오프셋(+sign bit)에 대한 'array-lists'. 수신 참조 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) 오프셋 결정

    {$::FEC > 0}인 경우 {

    print_out "\t변형: FEC>0"

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

    fl_minus 설정 [expr $fl - [expr $fl % $::P L_FL_MAP]]

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

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

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

    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]]

    set 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]]]

    } 다른 {

    세트 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]]

    set 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} {

    #

    # 인수:

    # 반환: rx 펄스 오프셋(+sign bit)에 대한 'array-lists'. 수신 참조 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) 오프셋 결정

    {$::FEC > 0}인 경우 {

    print_out "\t변형: FEC>0"

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

    fl_minus 설정 [expr $fl - [expr $fl % $::P L_FL_MAP]]

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

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

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

    세트 rx_spulse_offset_sign($fl) 1

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

    set 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]]]

    } 다른 {

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

    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]]

    set 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]]]

    } 다른 {

    세트 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]]

    set 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]]]

    }

    }

    배열 집합 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 기준 레인 결정

    set int_list [determine_rx_ref_lane [array get rx_xcvr_if_pulse_adj]\

    $VL\

    # 3단계: RX 기준 레인 결정

    set int_list [determine_rx_ref_lane [array get rx_xcvr_if_pulse_adj]\

    [배열 가져 오기 rx_xcvr_if_pulse_adj_sign] \

    $VL

    1. 파일 저장

    이 문제는 인텔® Quartus® Prime Pro Edition 소프트웨어 버전 22.4부터 해결되었습니다.

    관련 제품

    이 문서는 다음 항목에 적용됩니다. 2 제품

    인텔® Agilex™ F-시리즈 FPGAs 및 SoC FPGAs
    인텔® Agilex™ I-시리즈 FPGAs 및 SoC FPGAs

    이 페이지의 콘텐츠는 원본 영어 콘텐츠에 대한 사람 번역 및 컴퓨터 번역의 조합으로 완성되었습니다. 이 콘텐츠는 편의와 일반적인 정보 제공을 위해서만 제공되었으며, 완전하거나 정확한 것으로 간주되어선 안 됩니다. 이 페이지의 영어 버전과 번역 간 모순이 있는 경우, 영어 버전이 우선적으로 적용됩니다. 이 페이지의 영어 버전을 확인하십시오.