Quartus® II Tcl 예: 로직 보고서 수준

author-image

기준

설계를 최적화할 때는 레지스터 간 논리 수준에 대한 정보를 확인하는 것이 유용합니다. 다음 스크립트는 쉼표 분리 값(.)을 생성합니다. csv)파일은 설계에서 서로 다른 수준의 논리를 가진 경로 수를 포함합니다. 이 데이터를 차트로 작성하거나 Excel에서 로직 수준별 경로 분포를 보여주는 히스토그램을 만들 수 있습니다.

두 레지스터 사이에 여러 로직 경로가 있는 경우, 가장 많은 수준의 로직이 있는 경로만 이 스크립트에 의해 계산됩니다. 예를 들어, 4단계 경로 1개와 2단계 경로 1개가 있는 레지스터 2개가 4단계 경로 1개로 계산됩니다.

스크립트는< 개정 이름>.levels_of_logic.csv라는 CSV 파일을 생성합니다.

report_levels_of_logic.tcl이라는파일에 스크립트를 저장하면 다음 명령으로 스크립트를 실행할 수 있습니다.

quartus_tan -t report_levels_of_logic.tcl -project <프로젝트 이름> [개정 <비전 이름>] [-name_pattern < 일치하도록 요청>]

-name_pattern 옵션을 사용하여 설계의 특정 계층 구조로 경로 계산을 제한할 수 있습니다. 도구 명령 언어(Tcl) 와일드카드 일치와 일치하는 문자열을 지정합니다. -name_pattern 옵션에 대한 값을 지정하지 않으면 기본값이 *입니다. 예를 들어, mult:inst6|lpm_mult:lpm_mult_component 설계 계층 구조에서 레지스터 간의 논리 수준을 보고하려면 -name_pattern 옵션의 값에 대해 mult:inst6|lpm_mult:lpm_mult_component*를 지정합니다.

load_package advanced_timing
패키지에는 cmdline

세트 옵션 {\
    { "project.arg" "프로젝트 이름" } \
    {"revision.arg" "개정 이름" } \
    {"name_pattern.arg" "*" "이 패턴과 일치하는 등록 제한"}
} 배열 세트

옵트 [:cmdline:::getoptions quartus(args) $options]
배열 세트 num_levels [목록]

# 프로젝트를 열고
{[문자열이 ""$opts(개정)] }
    {project_open $opts(project) -current_revision
} {
    project_open $opts(프로젝트) -개정 $opts(개정) }
set rev [get_current_revision]

# {[catch { create_timing_netlist 경우 타이밍 넷리스트
준비; create_p2p_delays } res] } {
    post_message -type 오류 $res project_close
    qexit -error
} #

디자인의 모든 레지스터를 통해 반복
foreach_in_collection [get_timing_nodes -type reg] {

    # keepers 목록 가져오기(레지스터,  핀, 클럭)
    # 레지스터 노드에 피드되는
    delays_from_keepers [get_delays_from_keepers $dest]
    
    # 대상 레지스터 이름이 패턴과 일치하지 않는 경우
    # 단순히 다음 노드로 이동합니다.
    { 경우 dest_name [get_timing_node_info -info name
    $dest]을 설정합니다. [문자열 일치 $opts(name_pattern) $dest_name] } {
        계속 } # 레지스터 노드
    포리치 지연 $delays_from_keepers

        {set src [lindex $delay 0]

        # Keeper는 핀과 시계를 포함할 수 있으며  레지스터만 원합니다.
        { 경우 { ! [문자열 동일 "reg" [get_timing_node_info -info type $src]] } {
            계속 } # 소스 레지스터 이름이

        패턴과 일치하지 않는 경우 , { 경우
        # 단순히
        [get_timing_node_info -info name $src]src_name 다음 한
        세트로 이동합니다. [문자열 일치 $opts(name_pattern) $src_name] } {
            계속
        }

        #이 시점에서 소스와 대상 이름
        #이 패턴과 일치하며 등록 경로입니다.
        # get_delay_path 명령은 경로 #에 있는 노드 목록을
        반환합니다. 경로의 길이는 목록의 길이입니다.
        # 목록에는 소스 및 대상 레지스터가 포함되어 있습니다.
        # 레지스터 간 로직 수준은 -
  
  


2 세트 경로
        [get_delay_path-가장 긴 유형 -에서 $src -에서 $dest]
        세트 levels_of_logic [expr { [llength $path]- 2 } ]
        
        # 배열에 정보를 저장합니다.
        {[정보 num_levels($levels_of_logic)] } {
            incr num_levels($levels_of_logic)
        }
            {set num_levels($levels_of_logic) 1
        } }

project_close

#
{[catch {open ${rev}.levels_of_logic.csv w} fh] } { post_message
    -type 오류 $fh
} {# 파일에

    설명 헤더를 작성하면 파일에 정보를 적어
    $fh "프로젝트 $opts 논리 수준((). project) 개정 $rev"는
    $fh "Quartus® II $quartus(버전)가
        \[클럭 형식 [클럭 초]]에 "\n$opts(name_pattern)와
    일치하는 등록 이름에 대한 경로 등록 경로"를 $fh 넣습니다.
    {[catch { $fh "$level,$num_level($level)"} } {post_message -type 오류 $res 나누기 } } catch { $fh } } { $fh "로직 수준, 디자인

    번호" 포리치 수준 [lsort -integer [배열 이름

        num_levels]] { $fh
넣습니다.

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