Quartus® II Tcl 예: 모든 핀을 가상으로 만들기

author-image

기준

프로젝트에서 모듈식 로직 잠금 지역 설계 흐름을 사용하는 경우 모듈을 최상위 설계로 쉽게 가져올 수 있는 방법으로 모듈 가상 I/O 핀의 모든 I/O 핀을 선택할 수 있습니다. 또한 IP 코어를 컴파일하여 얼마나 많은 리소스를 사용하지만 대상 장치에 너무 많은 핀을 사용하는지 확인하려면 핀을 가상으로 만들면 코어가 맞을 수 있습니다.

다음 간단한 절차를 통해 설계의 모든 핀을 가상 I/O 핀으로 만듭니다. 먼저 설계를 합성하여 핀인 노드를 결정합니다. 다음으로, 이름 ID 모음이 설계의 핀에 해당하도록 설정된 다음 모든 핀에 VIRTUAL_PIN 할당이 적용됩니다. 마지막으로, export_assignments 명령은 프로젝트의 Quartus II 설정 파일(.qsf)에 모든 새 할당을 기록합니다.

이 예에서는 Quartus II 소프트웨어의 버전 4.0(:quartus::p roject 패키지의 버전 2.0)에서 시작되는 get_names 및 get_name_info 명령을 사용합니다. Quartus II 소프트웨어의 버전 3.0부터 시작하여 고급 기능을 제공하는 코드는 이 페이지의 마지막 예를 참조하십시오.

load_package 플로우

프록 make_all_pins_virtual {} {

    execute_module -tool map

    세트 name_ids [get_names -filter * -node_type 핀]

    foreach_in_collection name_id $name_id {
        pin_name [get_name_info -info full_path $name_id]
        post_message VIRTUAL_PIN "$pin_name"set_instance_assignment
        $pin_name -name VIRTUAL_PIN VIRTUAL_PIN }export_assignments
}

샘플 코드 개선

샘플 코드를 개선할 수 있는 방법은 여러 가지가 있습니다.

기존 VIRTUAL_PIN 할당 제거

절차 시작 부분에 다음 명령을 추가하여 기존 VIRTUAL_PIN 할당을 모두 제거할 수 있습니다. 이 단계는 할당이 알려진 상태에 있는지 확인하는 유용한 단계입니다. execute_module 명령 앞에 이 명령을 추가합니다.

remove_all_instance_assignments -name VIRTUAL_PIN

시계와 같은 특정 핀을 수동으로 제외

Quartus II 소프트웨어가 설계에 맞는 타이밍 최적화를 수행하려면 클럭을 대상 장치의 최상위 I/O 핀에 연결해야 하며 클럭에는 클럭 설정이 적용되어 있어야 합니다. 디자인의 다른 모든 핀이 가상 I/O 핀인 경우에도 마찬가지입니다. 따라서 위의 기본 예는 클럭을 포함한 모든 핀에 VIRTUAL_PIN 할당이 적용되어 있기 때문에 Quartus II 소프트웨어가 컴파일 중 타이밍을 최적화하는 것을 방지합니다.

VIRTUAL_PIN 할당에서 제외할 신호 목록을 수락하는 절차에 매개변수를 추가할 수 있습니다. 이 목록은 일반적으로 디자인의 클럭 핀 이름입니다. 다음 예에서는 제외할 이름 목록을 받아들입니다. 또한 위에서 설명한 기존 VIRTUAL_PIN 할당을 제거하는 명령도 포함됩니다.

load_package 흐름
패키지에는 cmdline

proc make_all_pins_virtual { args } {

    설정 옵션 {\
        {\ "exclude.arg" "제외할 신호 목록" } \
    } 배열 세트
    opts [::cmdline::getoptions quartus(args)) $options]

    remove_all_instance_assignments -name VIRTUAL_PIN execute_module
    -tool map set name_ids
    [get_names -filter * -node_type 핀]

    foreach_in_collection name_id $name_id
        {pin_name 설정 [get_name_info -info full_path $name_id]

        {-1 == [lsearch -exact $opts(제외) $pin_name] }
            {post_message "$pin_name에 VIRTUAL_PIN 할당하기"
            set_instance_assignment -$pin_name VIRTUAL_PIN
        ON}로 post_message
            {$pin_name에 VIRTUAL_PIN 할당 건너뛰기"
        } export_assignments
}

이 명령으로 프로시저를 호출할 수 있습니다. 이 예에서는 디자인에 clk_a 및 clk_b 두 개의 클럭이 있다고 가정합니다.

make_all_pins_virtual -exclude { clk_a clk_b }

시계 자동 식별 및 처리

특정 신호를 제외하는 이전 예는 손으로 입력해야 한다는 단점이 있습니다. ::quartus::advanced_timing 패키지에서 명령이 포함된 클럭 신호를 확인할 수 있습니다. 이 패키지는 quartus_tan 실행 파일에서만 로드할 수 있으므로 quartus_tan 사용하여 다음 예제와 함께 스크립트를 실행해야 합니다. 이 예의 명령은 모두 Quartus II 소프트웨어 버전 3.0부터 지원됩니다.

클럭을 자동으로 식별하면 USE_CLK_FOR_VIRTUAL_PIN 할당의 응용 프로그램을 자동화할 수 있는 이점이 있습니다. USE_CLK_FOR_VIRTUAL_PIN 할당을 VIRTUAL_PIN 할당과 함께 사용하여 클럭 설정을 디자인의 클럭과 연결할 수 있습니다. 이를 통해 Quartus II Fitter는 가상 I/O 핀으로 디자인을 컴파일할 때 타이밍 요구 사항에 대한 정확한 정보를 제공합니다. 이 할당에 대한 자세한 내용은 Quartus II 도움말의 가상 핀 클럭 로직 옵션 주제를 참조하십시오.

다음 예시 절차는 설계 가상 I/O 핀의 모든 I/O 핀을 만듭니다. 또한 적절한 경우 가상 핀 클럭 설정 할당을 수행합니다.

예제 코드는 먼저 디자인을 합성합니다. 그런 다음 새 넷리스트를 만들기 전에 기존 타이밍 넷리스트를 삭제하려고 시도합니다. get_timing_nodes 명령은 타이밍 넷리스트에서 pin_ids 및 clk_ids 두 개의 노드 컬렉션을 만듭니다. 두 컬렉션은 배타적입니다. 시계가 I/O 핀에 있을 수 있더라도 clk_ids 컬렉션의 노드가 pin_ids 컬렉션에 없습니다.

첫 번째 foreach_in_collection 루프는 설계에서 각 핀의 이름(클럭 핀 제외)을 가져오고 VIRTUAL_PIN 할당합니다.

두 번째 foreach_in_collection 루프는 디자인에서 각 클럭의 이름을 가져옵니다. get_instance_assignment 명령이 존재하는 경우 해당 클럭 설정을 검색합니다. 클럭에 대한 클럭 설정이 있는 경우(문자열이 비어 있지 않음) 스크립트는 클럭 설정 이름의 값을 사용하여 클럭 이름에 USE_CLOCK_FOR_VIRTUAL_PIN 할당합니다.

load_package 흐름
load_package 타이밍
load_package advanced_timing

proc make_all_pins_virtual {} {

    {remove_all_instance_assignments -name VIRTUAL_PIN
    remove_all_instance_assignments -name USE_CLK_FOR_VIRTUAL_PIN

    execute_module -tool map catch {
    delete_timing_netlist } create_timing_netlist
    -post_map 세트 pin_ids
    
    [get_timing_nodes-유형 핀]
    세트 clk_ids [get_timing_nodes -type clk] # VIRTUAL_PIN
    
    할당을 모든 핀에 배치합니다. design
    foreach_in_collection pin_id $pin_ids

        {pin_name [get_timing_node_info -info name $pin_id]post_message
        "$pin_name으로 VIRTUAL_PIN 할당하기"
        set_instance_assignment -to $pin_name VIRTUAL_PIN ON
    }

    디자인의 각 시계에 대해 해당 CLOCK_SETTINGS 할당이 있는지 
    확인합니다.
    foreach_in_collection clk_id $clk_ids

        {세트 clk_name [get_timing_node_info -info name $clk_id] 세트 clk_stgs
        [get_instance_assignment -to $clk_name 
           \CLOCK_SETTINGS]

        # 이 클럭에 대한 클럭 설정이 있는
        경우 USE_CLK_FOR_VIRTUAL_PIN {
        ![ 문자열 동등한 "" $clk_stgs] }
            {post_message "USE_CLK_FOR_VIRTUAL_PIN 할당 만들기 \
                값 $clk_stgs를 가진
            $clk_이름" set_instance_assignment -에서 $clk_name \
                -name USE_CLK_FOR_VIRTUAL_PIN $clk_stgs}
        } export_assignments
}

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