01signal.com

Quartus, 타이밍 클로저(timing closure): 간결한 멀티-코너 타이밍 경로 리포트 얻기

소개

FPGA 설계가 타이밍 제약 조건(timing constraints)을 달성하지 못하면, 자연스럽게 임계 경로(critical path)를 자세히 살펴보게 됩니다. 이 검토는 각 경로(path)를 따라 다양한 논리 소자가 일으키는 지연을 보여 주는 타이밍 리포트를 통해서 이루어집니다.

인텔 FPGA를 자주 사용하지 않는 사용자라면, 이 리포트를 어떻게 얻는지 알아내는 것이 그리 간단하지 않을 수 있습니다. 더 심각한 것은, 자신도 모르게 엉뚱한 리포트를 보고 있을 수도 있다는 점입니다.

먼저 정리해야 할 개념은 멀티-코너 타이밍 분석(multi-corner timing analysis)입니다. 일반적인 방법은 FPGA 타이밍의 유효성을 네 가지 경우에 대해 검증하는 것입니다. 즉 최소·최대 온도와 '느린(slow)' 타이밍 모델 및 '빠른(fast)' 타이밍 모델을 조합하여 타이밍 제약 조건(timing constraints)이 충족되는지 확인합니다. 따라서 분석은 네 가지 조합, 즉 네 개의 코너(corner)에 대해 수행됩니다.

그러므로 임계 경로를 검토할 때는 네 코너 모두에 대한 타이밍 리포트를 살펴보는 것이 중요합니다. 하지만 이러한 사실은 자주 간과됩니다. 예를 들어 TimeQuest 는 보통 단일 코너에 대한 타이밍 리포트만 생성합니다.

그래서 이 글에서는 실제로 의미 있는 리포트를 얻는 방법을 설명합니다. 예제는 Quartus Prime 17.1 Lite 를 기준으로 합니다.

관련이 있는 다른 두 글도 언급해 두겠습니다. 하나는 입력/출력 제약 조건과 타이밍 리포트의 관계를 살펴보는 글이고, 다른 하나는 TimeQuest 에서 Tcl 스크립트(script)를 약간 실험해 보는 글입니다.

중요: 이 페이지는 셋업(setup) 요건에 대한 타이밍 리포트를 얻는 방법을 설명합니다. 그런데 홀드(hold), 리커버리(recovery), 리무벌(removal)에 대한 타이밍 리포트도 따로 생성됩니다. 이 리포트들 역시 타이밍 제약 조건(timing constraints)을 달성하지 못한 경우를 드러낼 수 있습니다.

멀티-코너 리포트 생성: 스크립트로 빠르게

먼저 다음 Tcl 스크립트를 timing.tcl 같은 이름의 파일로 저장합니다.

create_timing_netlist
read_sdc
update_timing_netlist

foreach_in_collection op [get_available_operating_conditions] {
  set_operating_conditions $op

  report_timing -setup -npaths 20 -detail full_path -multi_corner \
    -panel_name "Critical paths"
}

타이밍 리포트가 셋업(setup)만 대상으로 한다는 점에 유의하세요.

'multi_corner' 플래그 때문에 혼동하지 마세요. report_timing 을 호출할 때마다 하나의 코너만 처리합니다. 이 플래그가 실제로 무언가를 하는지는 분명하지 않습니다.

그래서 이 스크립트는 foreach_in_collection 으로 네 가지 조건을 모두 반복하면서, 각 코너마다 별도의 리포트를 생성합니다.

이제 실제로 실행해 보겠습니다.

같은 항목 아래에 코너별로 네 개의 개별 리포트도 함께 나타납니다. 이전 버전의 Quartus 에서는 이 리포트들만 표시됩니다(즉, Multi-Corner Summary 는 나타나지 않습니다).

HTML / 텍스트 리포트만 생성하기

이 도구들은 깔끔한 HTML 리포트를 생성할 수 있는데, TimeQuest 자체 GUI 보다 읽기가 훨씬 편합니다. 하지만 안타깝게도 이 리포트들은 각각 하나의 코너만 다룹니다. 아래 스크립트는 코너마다 별도의 HTML 리포트 네 개를 생성합니다(파일이 아주 많습니다. JQuery 스크립트 파일, CSS 등 별것이 다 포함되죠. 화려하기는 하지만 멀티-코너 리포트는 아닙니다).

다음과 같은 스크립트를 timing-html.tcl 로 생각해 보겠습니다.

#project_open myproj
create_timing_netlist
read_sdc
update_timing_netlist

foreach_in_collection op [get_available_operating_conditions] {
  set_operating_conditions $op

  report_timing -setup -npaths 20 -detail full_path -multi_corner \
    -file "timing_paths_$op.html" \
    -panel_name "Critical paths for $op"
}

일반 텍스트 리포트가 필요하면 -file 플래그의 인자를 바꿔 확장자를 .html 대신 .rpt 또는 .txt 로 지정하면 됩니다.

스크립트 맨 위에 주석 처리된 'project_open' 명령에 유의하세요. 주석을 해제하고 'myproj'를 실제 프로젝트 이름으로 바꾸면, 다음과 같이 일반 셸 명령줄로 HTML 리포트를 생성할 수 있습니다.

$ /path/to/quartus/bin/quartus_sta -t timing-html.tcl

하지만 이렇게 해서 멀티-코너 리포트를 생성하는 방법은 찾지 못했습니다.

각 구현(implementation) 단계마다 이 리포트들이 생성되도록 하려면(권장합니다), QSF 파일에 다음과 같은 줄을 추가하세요.

set_global_assignment -name TIMEQUEST_REPORT_SCRIPT relative/path/to/timing-html.tcl

Tcl 스크립트를 이렇게 QSF 파일에 포함할 때는, 스크립트에서 project_open 을 사용하면 안 됩니다.

GUI 만 사용하는 방법

마우스 클릭만으로도 멀티-코너 리포트를 얻을 수 있습니다.

이 페이지는 영어 원문을 기계 번역한 것입니다. 의문이 드는 부분이 있으면 원문을 참조하시기 바랍니다.
Copyright © 2021-2026. All rights reserved. (dcc38493)