문서 ID: 000076343 콘텐츠 형태: 문제 해결 마지막 검토일: 2015-10-05

시뮬레이션에서 네이티브 고정 소수점 DSP 블록이 예기치 않은 지연을 보이는 이유는 무엇입니까?

환경

  • 인텔® Quartus® II 구독 에디션
  • DSP
  • 시뮬레이션
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    설명

    매개변수, 시뮬레이터 및 RTL 코딩 스타일의 일부 조합의 경우 시뮬레이션에서 이 블록의 대기 시간은 , - 1 클럭만큼 예상 대기 시간에서 벗어납니다. 실제 하드웨어는 예상 대기 시간을 나타냅니다.

    예를 들어, DSP 블록을 구동하는 클럭이 입력 데이터를 생성하는 클럭의 지연된 버전인 경우, 따라서 입력 데이터보다 입력 클럭에 대해 더 많은 시뮬레이션 지연이 발생하는 경우 이러한 동작이 나타날 수 있습니다.

    해결 방법

    이 문제를 해결하려면 DSP 블록에 입력 데이터를 생성하는 클럭과 DSP 블록의 입력 클럭 사이의 지연이 입력 데이터의 지연으로 균형을 이루는지 확인해야 합니다. 또는 입력 데이터가 DSP 블록의 입력 클럭과 비교하여 나중에 절대 시간 또는 나중에 시뮬레이션 델타 지연 시간에 도착하는지 확인합니다.

    클럭 경로와 데이터 경로에 더 많은 할당 문이 있으면 해당 경로 간에 시뮬레이션 델타 지연 차이가 발생합니다.

    이렇게 하려면 테스트벤치를 다음과 같이 수정합니다.

    1. Native DSP 블록에 대한 클럭 생성 입력이 Native DSP 블록에 대한 클럭 입력과 정확히 동일한 신호인지 확인합니다.
    2. #1이 실현 가능하지 않은 경우 클럭을 기준으로 입력 데이터를 지연 시킵니다.

    예를 들어, 다음과 같은 원래 RTL 코드를 고려하십시오.

    오리지널 RTL:

    clk_gen: 프로세스
    시작
    clk_orig <= \'0\';
    5ns를 기다립니다.
    clk_orig <= \'1\';
    5ns를 기다립니다.
    최종 프로세스;

    ...

    (rising_edge(clk_orig))이면
    도끼 <= 도끼 1;
    ay <= ay - 1;
    다음과 같은 경우 끝납니다.

    mac_test_bad_style: mult_acc
    포트 맵(
    ...
    도끼 => std_logic_vector(도끼), -- [인]
    ay => std_logic_vector(ay), -- [in]
    clk => ("00" & clk_orig), -- [in]
    resulta => resulta2, -- [out]
    ...
    );

    resultA2는 예상보다 대기 시간이 한 클럭 적습니다. 승수의 clk 포트 할당에서 "00 & clk"의 연결은 입력 데이터를 생성하는 "clk_orig"에서 시뮬레이션 델타 지연을 추가합니다.

    가능한 해결 방법은 다음과 같습니다.

    예제 1, 권장 사항: 전체에서 3비트 클록 사용

    승수의 3 비트 클럭을 직접 생성하고 활성 비트를 사용하여 입력 데이터를 클럭 할 수 있습니다.

    clk_gen: 프로세스
    시작
    clk3비트 <= \'000\';
    5ns를 기다립니다.
    clk3비트 <= \'001\';
    5ns를 기다립니다.
    최종 프로세스;

    ...

    (rising_edge(clk3bit(0)))이면
    도끼 <= 도끼 1;
    ay <= ay - 1;
    다음과 같은 경우 끝납니다.

    mac_test_bad_style: mult_acc
    포트 맵(
    ...
    도끼 => std_logic_vector(도끼), -- [인]
    ay => std_logic_vector(ay), -- [in]
    clk => (clk_3bit), -- [in]
    resulta => resulta2, -- [out]
    ...
    );

    예제 2, 대체 권장 사항: 입력 데이터에 해당 지연 추가

    \'clk => ("00" & clk_orig)\' 문은 \'clk' 포트가 데이터를 구동하는 \'clk_orig\'에서 추가 시뮬레이션 델타 지연을 갖도록 합니다. 이를 극복하기 위해 원래 clk_gen 프로세스를 사용하고 대입문을 사용하여 데이터에 시뮬레이션 델타 지연을 추가할 수 있습니다.

    clk_gen : 프로세스 (원본과 동일)

    ax_del <= 도끼;
    ay_del<=ay;

    mac_test_bad_style: mult_acc
    포트 맵(
    ...
    도끼 => std_logic_vector(ax_del), -- [in]
    ay => std_logic_vector(ay_del), -- [in]
    clk => ("00" & clk_orig), -- [in]
    resulta => resulta2, -- [out]
    ...
    );

    관련 제품

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

    인텔® Arria® 10 GX FPGA

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