Quartus® II Tcl 예: 타임그룹의 정교한 노드

author-image

기준

시간 그룹은 타이밍 할당을 효율적으로 수행하는 방법입니다. 그룹의 패턴과 일치하는 노드를 포함하는 와일드카드를 지정하고 그룹에서 패턴과 일치하는 노드를 제외하는 와일드카드를 지정할 수 있습니다. 올바른 와일드카드 패턴을 지정했는지 확인하려면 시간 그룹에 있는 모든 노드 목록을 확인해야 할 수도 있습니다.

이 스크립트는 설계의 시간 그룹에 있는 노드를 정교하게 설명합니다. 스크립트는 설계의 모든 타이밍 노드를 반복하여 타이밍 노드의 이름을 각 시간 그룹 포함 패턴과 비교한 다음 각 시간 그룹 제외 패턴을 비교합니다.

이 스크립트에는 제한이 있습니다. 중첩된 시간 그룹을 처리하지 않습니다. 시간 그룹을 다른 시간 그룹의 요소로 포함 또는 제외하는 것은 유효하지만 이 스크립트에서 지원하지는 않습니다.

시간 그룹에 버스의 모든 비트를 포함하려면 Quartus II 소프트웨어의 버전 4.2 이하의 버스 이름 뒤에 별표 를 사용하십시오. 버전 5.0부터 별표 없이 버스 이름을 지정할 수 있습니다. 스크립트에는 소프트웨어 버전 번호를 기준으로 이 동작에 대한 확인이 포함되어 있습니다.

전역 quartus
load_package advanced_timing
load_package 프로젝트

# 스크립트가 4.2 및 이전,
#또는 5.0 이상에서 실행되는지 여부를 결정합니다. 5.0 이상은 <bus 이름> 유효한 시간 그룹 항목으로 인식하고 
4.2 및 그 전에는
#<bus 이름>*을 타임그룹 항목으로 인식합니다.
regexp {^Version(\d)} $quartus(버전) 일치
qver($qver < 5}
    {need_asterisk 1}
기타
    {설정 need_asterisk 0
}

project_open [lindex $quartus(args) 0]

create_timing_netlist 세트 tg_name

[lind]ex $quartus(args) 1] post_message

"다음 노드는 시간 그룹 $tg_name:"

세트 tg_name [escape_brackets $tg_name] 세트 tg_members
[timegroup -get_members $tg_name]
세트 tg_exceptions [timegroup-get_exceptions $tg_ 이름]

# 이 루프는 설계 foreach_in_collection node_id 모든 타이밍 노드를 통과합니다[get_timing_nodes 
-type all] {

    세트 node_name [get_timing_node_info -info name $node_id] # 노드 이름이

    버스에 없는 경우 bus_name 지웁니다.
    #그렇지 않으면 설정합니다.
    { 경우 { ! [regexp {(.*?) \[\d+\]} $node_name match bus_name] } {
        bus_name "" }
    
    # 이제 노드 이름이 있습니다. {[문자열 일치  
    $esc_name $node_name] } {세트 일치 1 } elseif { 경우 지정된 시간 그룹 세트의 패턴이 0 foreach_in_collection 멤버

        $tg_Members {esc_name [escape_brackets [lindex $member 2]와 일치하는지
        확인하십시오. { 세트 일치
            1 }
        elseif { ! $need_asterisk & \
            [문자열 일치 $esc_name $bus_name] } {
            세트는 1
        } } # $matches 여기에

    1인 경우 시간 그룹에서 멤버 이름 #을 일치  
    했습니다. 그러나 여전히 예외와 일치할 수 있습니다.  
    # 여기에서 확인하십시오.
    {$matches }
        
        {foreach_in_collection 예외 $tg_exception
            
            {esc_name [escape_brackets [lindex $exception 2]]
            {[문자열 일치 $esc_name $node_name] } {
                세트 일치 일치 0 }
            elseif { $need_asterisk && \
                [문자열 일치 $esc_name $bus_name] } {
                세트 일치 0
            } } } } # 모든

    예외를 살펴보았습니다. $matches 여전히 1인 경우
    노드 이름은 멤버 패턴과 일치하며 예외 패턴과 일치하지 않으므로
    노드 이름을 인쇄하십시오.
    {$matches }
        {post_message $node_name}
    }

project_close

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