로직 보고서 수준

author-image

기준

설계 타이밍을 닫을 때는 실패하는 경로에 얼마나 많은 수준의 논리가 있는지 아는 것이 종종 유용합니다. 타이밍 분석기는 경로에 대한 타이밍을 보고할 때 논리 수준 수를 표시하지만, 경로 집합에 대한 로직 수준 수를 나열하는 기본 보고서는 없습니다. 이 설계 예는 경로 집합에 대한 논리 수준 수를 보여주는 보고서를 만드는 데 사용할 수 있는 사용자 지정 절차를 정의합니다.

사용자 지정 절차는 report_timing 명령과 동일한 인수를 지원합니다. report_timing 명령을 사용하는 사용자 지정 절차와 동일한 옵션을 사용해야 합니다. 사용자 지정 절차는 -greater_than <value>, -less_than <value> 및 -file <report 파일> 등 세 가지 추가 옵션을 지원합니다. -greater_than 및 -less_than 옵션을 사용하여 지정된 논리 수준보다 크거나 적은 경로에 대한 보고를 제한할 수 있습니다. -file 옵션을 사용하여 보고서를 파일에 작성할 수 있습니다.

사용자 지정 절차는 최악의 타이밍 여유를 가진 경로에 대한 로직 수준 수를 표시합니다. 설계에 가장 많은 수의 로직이 있는 경로를 반드시 표시할 필요는 없습니다. 최악의 타이밍 여유를 가진 경로가 항상 가장 많은 수의 논리를 가진 경로는 아니지만 종종 사실입니다.

프로시저 작업

사용자 지정 절차는 다음 단계를 사용합니다.

  1. 보고 기준을 충족하는 경로 목록 보기
  2. 각 경로에 대한 논리 수준 가져오기
  3. 차트에 논리 및 경로 정보 수준 표시

1단계: 경로 목록 가져오기

사용자 지정 절차는 report_timing 명령과 동일한 인수를 지원하는 get_timing_paths 명령을 사용합니다. report_timing 모든 옵션을 사용하여 타이밍 분석을 제어할 수 있습니다. 예를 들어, 로직 레벨의 보고서를 특정 레지스터 이름으로 끝나는 경로로 제한할 수 있습니다. 다음 Tcl 코드는 절차 정의를 보여주고 모든 인수를 get_timing_paths 명령으로 전달합니다.

proc report_levels_of_logic { args }
    
    {# {[catch { eval get_timing_paths get_timing_paths $args
    } paths_col] } { post_message
        -type 오류 $paths_col
반환} }

2단계: 각 경로에 대한 논리 수준 가져오기

루프를 사용하여 paths_col 변수에서 경로 모음을 반복하고 각 경로의 논리 수준 수를 추출합니다. 결과를 인쇄하는 데 사용할 Tcl 매트릭스 데이터 구조의 경로에 대한 정보를 저장합니다. 저장된 정보는 논리 수준, 경로의 여유, 소스 및 대상 노드 이름입니다.

foreach_in_collection path_obj $paths_col {

        # 경로에 얼마나 많은 수준의 논리가 있습니까?
        설정 levels_of_logic [get_path_info -num_logic_levels $path_obj]
        
        # 매트릭스에 경로 정보를 추가합니다.
        $logic_level_matrix 추가 행 [목록 \
            $levels_of_logic \
            [get_path_info -slack $path_obj] \
            [get_node_info -name [get_path_info -from $path_obj]] \
            [get_node_info -name [get_path_info -to $path_obj]]
    } }

3단계: 차트에 경로 정보 표시

마지막으로 매트릭스 변수에 저장된 모든 경로 정보를 표시합니다. 이 예에서는 Tcl 보고서 패키지를 사용하여 매트릭스를 포맷하여 인쇄합니다. 다음 코드는 매트릭스에 제목 행을 추가하고, 보고서의 시각적 스타일을 정의하고, 셀 패딩을 설정하고, 보고서를 표시합니다.

# 헤더 행
        $logic_level_matrix 삽입 행 0
            \[목록 "논리 수준" "Slack" "From" "To"]
    
        # 결과 캐치의 테이블을 인쇄하기 위해 정의된 스타일이 필요합니다
        { ::report:rmstyle basicrpt }
        :::report::d efstyle basicrpt {{cap_rows 1}}
            { 데이터 세트        [분할 "[문자열 반복 "   [[열]]";]
            상단         세트 [분할 "[문자열 반복 "+ - "[열]]+"]
            하단 세트      [top get]
            topcapsep   세트 [top get]
            topdata     Set [data get] 상단 활성화
            topcapsep   활성화 하단 활성화
            tcaption    $cap_rows
        } # 보고서
        
        만들기, 열에 패딩 공간이 하나 있게 설정하고
        지정된
        형식의 catch {r destroy }
        ::report::report r 4 스타일 basicrpt로 매트릭스를 인쇄합니다.
        {set col 0 } {$col < [r 열]} { incr col } {
            r 패드 $col
        "} post_message
        "logic\n[r printmatrix $logic_level_matrix]"

사용자 지정 절차

아래에 나열된 사용자 지정 절차에 대한 코드에는 보고서를 파일에 작성하고 사용자가 지정한 값보다 큽니다 또는 그 이하의 로직 레벨이 없는 한 보고된 경로를 제한하는 옵션이 포함되어 있습니다.

사용자 지정 절차를 사용할 수 있는 몇 가지 예입니다.

  • report_levels_of_logic -setup-greater_than 10 -to [get_registers 데이터*] -npaths 1000
  • report_levels_of_logic -hold -from_clock core_50 -npaths 50 -file level.txt

사용자 지정 절차를 사용하려면 아래의 Tcl 코드를 report_levels_of_logic.tcl이라는 파일에 저장하십시오. 그런 다음 타이밍 분석기 Tcl 프롬프트에서 명령 소스 report_levels_of_logic.tcl을 사용합니다. 파일을 소싱하면 사용자 지정 절차가 정의됩니다. 그런 다음 타이밍 분석기를 종료할 때까지 새로 정의된 명령 report_levels_of_logic 사용할 수 있습니다.

패키지에는
cmdline 패키지가 필요합니다::Matrix
패키지에는 보고서

proc report_levels_of_logic { args } {

    세트 옵션 {
        {"less_than.arg" ""이 숫자 미만의 경로로 제한" }
        {"greater_than.arg" "" "이 숫자보다 큰 경로로 제한" }
        { "file.arg" "" "출력 파일 이름"
        
    } 배열 세트
    옵트 [:::cmdline::getKnownOptions args $options]

    # 프로시저가 일부 인수와
    함께 호출되었는지 확인합니다. {[문자열이 "" $opts(less_than)] &> [문자열이 "같음" $opts(greater_than)] } {
        post_message -type 경고 "-less_than 또는 -greater_than" 반환에 대해 숫자 값\을 지정해야 합니다
        } #
    {![ 문자열은 이중 $opts(less_than)] } {
        post_message -type 경고 "-less_than"반환을 위해 숫자 값\을 지정해야 합니다
        }
    {![ 문자열은 두 배 $opts(greater_than)] } {
        post_message -type 경고 "-greater_than" 반환에 대해 숫자 값\을 지정해야
    합니다} # logic_levels_matrix 설정된 실패한
    
    경로에 대한 정보를 보관할 매트릭스 만들기
    [::struct ::matrix]
    $logic_level_matrix 추가 열 4

    # {[catch { eval get_timing_paths get_timing_paths $args }
    paths_col] } { post_message
        -type 오류 $paths_col
    반환}
    
    # 타이밍 경로 목록을 훑어보며,
    #로직 수의
    수가 지정된 범위를
    
        벗어나지 않는 한 경로가 보고될 것으로 가정합니다. 로직 foreach_in_collection path_obj $paths_col { 레벨에 대한 정보 #를
        얻습니다.
        include_path 1
        
        # 경로에 얼마나 많은 수준의 논리가 있습니까?
        설정 levels_of_logic [get_path_info -num_logic_levels $path_obj]
        
        # 더 낮은 바운드를 지정한 경우,
        로직의 #레벨이 {의 경우 하한보다 크거나 같으면 경로를 보고하지
        않습니다. [문자열 동일 "" $opts(less_than)] }
            { $levels_of_logic >= $opts(less_than) }
                {세트 include_path 0
            } } # 상위
        
        바운드를 지정한 경우,
        로직의 #레벨이 위 경계보다 낮거나 같으면 경로를 보고하지
        않습니다. { [문자열 동일 "" $opts(greater_than)] }
            { {$levels_of_logic <= $opts(greater_than) }
                {설정 include_path 0 } } #
        
        경로에 범위 내에 있는 논리 수준이 있는 경우,
        {
        $include_path } {
        
            $logic_level_matrix가 행을 추가하는 경우 # 보고서 [목록 \
                $levels_of_logic \
                [get_path_info -slack $path_obj] \
                [get_node_info -name [get_path_info -from $path_obj]] \
                [get_node_info -name [get_path_info -에서 $path_obj]] }
    }
    #
    
    매트릭스에 행이 있으면 경로가 기준과 일치하는 get_timing_paths # 모든 경로를 통과합니다.
    # 해당 정보를 사용하여 테이블을 인쇄해야 합니다.
    {0 == [$logic_level_matrix row] } {
    
        # 경로가 기준을 충족하지 않는 경우 #
        "논리 수준을 보고하는 기준을 충족하는 경로가 없습니다"post_message 빠른 메시지를 인쇄합니다
        
        . 파일을 여는 오류가 있는 경우 # 그 를 말하는 메시지를
        인쇄하십시오. 그렇지 않으면 { 경우 기준을 충족하는 경로가 없다고 가정해
        봅시다. [문자열 동일 "" $opts(파일)] }
            { 경우 { [catch { 열기 $opts(파일) w } }
                {post_message -type 오류 "파일 열 수 없음: $fh"
            } 다른
                {는 "논리 수준을 보고하는 기준을 충족하는 경로가 없습니다"
                catch {닫기 $fh 넣습니다. $fh
            } }
    
    }} 다른 { # 헤더
    
        행
        $logic_level_matrix 삽입 행 0 \
            [목록 "논리 수준" "Slack" "From" "To"]
    
        # 결과 캐치의 테이블을 인쇄하기 위해 정의된 스타일이 필요합니다
        { :: 보고서::rmstyle basicrpt }
        :::report::d efstyle basicrpt {{cap_rows 1}}
            { 데이터 세트        [분할 "[문자열 반복 "   [[열]];]
            상단         세트 [분할 "[문자열 반복 "+ - "[열]]+"]
            하단 세트      [top get]
            topcapsep   세트 [top get]
            topdata     Set [data get] 상단 활성화
            topcapsep   활성화 하단 활성화
            tcaption    $cap_rows
        } # 보고서
        
        만들기, 열에 패딩 공간이 하나 있게 설정하고
        지정된
        형식의 catch {r destroy }
        ::report::report r 4 스타일 basicrpt로 매트릭스를 인쇄합니다.
        {set col 0 } {$col < [r 열]} { incr col } {
            r 패드 $col " } post_message
        "logic\n[r printmatrix $logic_level_matrix]"
        
        # 파일 이름이 지정되어 있는 경우 파일에 보고서를
        저장합니다. { [문자열이 "" $opts(파일)] }
            { 경우 { [catch {open $opts(파일) w } }
                {post_message -type 오류 "파일 열 수 없음: $fh"
            } 다른 { $fh
                "논리 수준"
                r printmatrix2channel $logic_level_matrix $fh
                {닫기 $fh
            } } }
}

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