문서 ID: 000085194 콘텐츠 형태: 문제 해결 마지막 검토일: 2013-06-12

트랜시버 재구성 컨트롤러의 reconfig_busy 출력이 리셋 후 높게 고정되는 이유는 무엇입니까?

환경

    인텔® Quartus® II 구독 에디션
BUILT IN - ARTICLE INTRO SECOND COMPONENT
설명

트랜시버 재구성 \'reconfig_busy\' 출력 포트가 고정되어 리셋 어설션 후 높은 것으로 주장될 수 있습니다.  영향을 받는 재구성 컨트롤러에 연결된 트랜시버 채널도 재설정에 갇혀 있을 수 있습니다.  재구성 컨트롤러를 재설정한 후에도 \'reconfig_busy\' 출력 포트가 고정되어 있습니다. 장치를 다시 프로그래밍하는 것만으로 문제를 해결할 수 있습니다.

이 증상은 트랜시버 재구성 컨트롤러의 내부 재설정 구조로 인해 발생할 수 있습니다.  M20K RAM의 주소 버스를 구동하는 로직에 대한 비동기 재설정 어설션으로 비동기 로직 전파가 발생할 수 있습니다.  이로 인해 M20K에 여러 주소선이 동시에 어설션될 수 있으며, 이로 인해 비트 셀 간에 충전 공유가 발생하여 M20K의 내용물이 손상될 수 있습니다.

이 손상은 PMA 보정에 사용되는 Nios® II 프로세서가 포함되어 있고 프로세서\의 프로그램 코드가 M20K RAM에 저장되므로 Stratix® V 및 Arria® V GZ 장치 트랜시버 재구성 컨트롤러에 영향을 미칩니다.  Nios® II 프로그램 메모리 내에서 손상이 발생하면 프로세서가 잠기게 되어 reconfig_busy 출력 포트가 높게 고정될 수 있습니다.  M20K 콘텐츠는 장치 프로그래밍 중에만 로드되기 때문에 이 상황에서 복구는 장치를 다시 프로그래밍해야만 가능합니다.

해결 방법

이 문제에 대한 수정사항은 트랜시버 재구성 컨트롤러의 내부 리셋 컨트롤러와 재설정 구조를 변경하여 동기화 리셋을 사용할 뿐만 아니라 재설정 조건 중 M20K clock_enable 포트를 선제적으로 해제합니다.

수정 사항은 Quartus® II 소프트웨어의 향후 버전에서 사용할 수 있습니다.  mySupport에서 서비스 요청을 제출하여 Quartus II 소프트웨어의 이전 버전에 대한 패치를 제공할 수 있습니다.  솔루션이 즉시 필요한 경우 다음 지침을 사용하여 수동으로 수정을 적용할 수 있습니다.

추가 또는 수정해야 하는 파일은 9개 있습니다.

  • altera_reset_controller_early_ce_mod.v(추가)
  • altera_reset_synchronizer_early_ce_mod.v(추가)
  • 트랜시버 재구성 컨트롤러와 관련된 QIP 파일(수정)
  • alt_xcvr_reconfig.sv(수정)
  • alt_xcvr_reconfig_soc.sv(수정)
  • alt_xcvr_reconfig_cpu.v(수정)
  • alt_xcvr_reconfig_cpu_ram.sv(수정)
  • sv_xrbasic_lif_csr.sv(수정)
  • sv_xcvr_reconfig_mif_avmm.sv(수정)

이 9개 파일은 트랜시버 재구성 컨트롤러가 생성된 디렉토리에 있어야 합니다.


altera_reset_controller_early_ce_mod.v를 다운로드하여 트랜시버 재구성 파일이 보관된 디렉토리에 배치합니다.

다운로드 altera_reset_synchronizer_early_ce_mod.v 트랜시버 재구성 파일이 보관되는 디렉토리에 배치합니다.

이 두 파일을 설계에 추가하려면 Transceiver 재구성 컨트롤러 인스턴스와 관련된 .qip 파일을 찾아 수정하고 다음 두 줄을 파일에 추가합니다.
set_global_assignment -library "LIBRARY_NAME" -name VERILOG_FILE [파일 조인 $::quartus(qip_path) "LIBRARY_PATH/altera_reset_controller_early_ce_mod.v"]
set_global_assignment -library "LIBRARY_NAME" -name VERILOG_FILE [파일 조인 $::quartus(qip_path) "LIBRARY_PATH/altera_reset_synchronizer_early_ce_mod.v"]

위의 두 줄에서 트랜시버 재구성 컨트롤러의 .qip 파일의 다른 항목과 일치하도록 LIBRARY_NAME 수정하고 LIBRARY_PATH.

alt_xcvr_reconfig.sv의 경우 다음을 수정하십시오.

  • alt_xcvr_resync 모듈 인스턴스화를 찾아 'd'와 '재설정' 포트 간의 연결을 반전합니다.  수정되면 인스턴스화는 다음과 같습니다.

alt_xcvr_resync #(
. INIT_VALUE (1)
) inst_reconfig_reset_sync (
.clk(mgmt_clk_clk),
.d(mgmt_rst_reset),
.reset(1\'b0),
.q(r_mgmt_rst_reset)
);

alt_xcvr_reconfig_soc.sv의 경우 다음을 수정하십시오.

모듈 상단 부근에 다음 와이어 정의를 추가합니다.

와이어 cpu_reset_req;

alt_xcvr_reconfig_cpu 모듈의 인스턴스화를 찾아 다음 포트를 추가합니다.

.ram_ce(cpu_reset_req),

alt_xcvr_reconfig_cpu_ram 모듈의 인스턴스화를 찾아 다음 포트를 추가합니다.

.ram_ce(cpu_reset_req),

alt_xcvr_reconfig_cpu.v의 경우 다음을 수정하십시오.

  • 최상위 수준에 다음 포트를 추가합니다.

출력 와이어 ram_ce,

  • 모듈에 다음 코드를 추가합니다.

와이어 m20k_gate;
와이어 altera_ram_clock_enable;
할당 altera_ram_clock_enable = ~ m20k_gate;
할당 ram_ce = altera_ram_clock_enable;

  • altera_reset_controller 인스턴스화를 찾아 이를 altera_reset_controller_early_ce_mod 인스턴스화로 변경합니다.  이 인스턴스화에 m20k_gate 포트를 추가하고 m20k_gate 신호에 연결합니다.  이러한 수정을 한 후 인스턴스화는 다음과 같이 보일 것입니다.

altera_reset_controller_early_ce_mod #(
. NUM_RESET_INPUTS(1),
. OUTPUT_RESET_SYNC_EDGES("deassert"),
. SYNC_DEPTH (2)
) rst_controller (
.reset_in0(~reset_reset_n), // reset_in0.reset
.clk(clk_clk), // clk.clk
.reset_out(reconfig_ctrl_reset_reset), // reset_out.reset
.m20k_gate(m20k_gate),
.reset_in1(1\'b0), //(종료됨)
.reset_in2(1\'b0), //(종료됨)
.reset_in3(1\'b0), //(종료됨)
.reset_in4(1\'b0), //(종료됨)
.reset_in5(1\'b0), //(종료됨)
.reset_in6(1\'b0), //(종료됨)
.reset_in7(1\'b0), //(종료됨)
.reset_in8(1\'b0), //(종료됨)
.reset_in9(1\'b0), //(종료됨)
.reset_in10(1\'b0), //(종료됨)
.reset_in11(1\'b0), //(종료됨)
.reset_in12(1\'b0), //(종료됨)
.reset_in13(1\'b0), //(종료됨)
.reset_in14(1\'b0), //(종료됨)
.reset_in15(1\'b0) //(종료)
);

alt_xcvr_reconfig_cpu_ram.sv 파일의 경우 다음을 수정합니다.

  • 다음 입력 포트를 추가합니다.

입력 ram_ce,

  • altsyncram 인스턴스화를 찾아 클럭엔0 포트를 수정하여 새로운 ram_ce 입력 포트에 연결합니다.

.clocken0(ram_ce),

  • defparam clock_enable_input/output_a/b 정의를 다음과 같이 수정합니다.

altsyncram_component.clock_enable_input_a = "NORMAL",
altsyncram_component.clock_enable_input_b = "NORMAL",
altsyncram_component.clock_enable_output_a = "NORMAL",
altsyncram_component.clock_enable_output_b = "NORMAL",

sv_xrbasic_lif_csr.sv 파일의 경우 다음을 수정합니다.

  • 논리 채널 주소를 제어하는 순차적 블록 을 찾습니다.  이 블록은 항상 위의 "// 논리 채널 레지스터"라는 주석으로 식별할 수 있습니다.  감도 목록에서 재설정 조건을 제거합니다.  수정되면 항상 블록의 시작은 다음과 같습니다.

논리 채널 레지스터
항상 @(reconfig_clk 포즈) 시작
경우(Reset == 1) 시작
...

  • 네이티브 재구성 주소 레지스터를 제어하는 순차적 블록 을 찾습니다.  이 블록은 항상 "// 네이티브 재구성 주소 레지스터, 채널 오프셋 주소 또는 물리적 주소로 해석될 수 있습니다"라는 주석으로 식별할 수 있습니다.  감도 목록에서 재설정 조건을 제거합니다.  수정되면 항상 블록의 시작은 다음과 같습니다.

네이티브 재구성 주소 레지스터, 채널 오프셋 주소 또는 실제 주소로 해석될 수 있습니다.
항상 @(포즈 reconfig_clk) 시작
경우(Reset == 1) 시작
...

sv_xcvr_reconfig_mif_avmm.sv 파일의 경우 트랜시버 재구성 컨트롤러 Megawizard GUI에서 채널 또는 PLL 재구성이 활성화된 경우에만 이 변경이 필요합니다.  다음을 수정하십시오.

  • 위에 "// Avalon 출력 및 내부 스토리지" 주석이 있는 순차적 블록 을 찾아 감도 목록에서 재설정 상태를 제거합니다.  수정되면 항상 블록의 시작은 다음과 같습니다.

Avalon 출력 및 내부 스토리지
항상 @(posedge clk)
시작
(재설정) 시작하는 경우
...

이러한 모든 변경 사항이 변경되면 설계를 다시 컴파일해야 합니다.

관련 제품

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

Stratix® V GX FPGA
Arria® V GZ FPGA

1

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