인텔® Quartus® Prime Pro Edition 소프트웨어 버전 22.3의 문제로 인해 F-타일 이더넷 인텔® FPGA Hard IP의 다중 레인 PTP 변형에 대한 설계 예에 제공된 "ptp_fw.tcl" 스크립트가 잘못된 rx_tam_adjust 값을 생성할 수 있습니다.
이 문제를 해결하려면 다음과 같이 하십시오.
- <생성된 예제 디자인 폴더>/hardware_test_design/hwtest/altera/ptp/ptp_fw.tcl에 있는 PTP 펌웨어 스크립트를 엽니다.
- 다음 코드 줄을 찾아 바꿉니다.
보낸 사람 | 받는 사람 |
# b) 펄스 조정 계산 {set fl 0} {$fl < $::FL} {incr fl} { |
# b) 펄스 조정을 계산 하고 동일한 트랜시버 레인에서 수신한 FEC 레인 간 FEC의 cw_pos 롤오버 확인 {set fl 0} {$fl < $::FL} {incr fl} { 설정 cond2a [expr ($rx_fec_cw_pos_fl($fl_minus) > $rx_fec_cw_pos_fl($fl))] 설정 if {$cond 1a && $cond 1b} { |
반환 [배열 가져 오기 rx_xcvr_if_pulse_adj] |
set l_rx_xcvr_if_pulse_adj [array get rx_xcvr_if_pulse_adj] 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 |
- 파일 저장
이 문제는 인텔® Quartus® Prime Pro Edition 소프트웨어 버전 22.4부터 해결되었습니다.