문서 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

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