프로젝트에서 모듈식 로직 잠금 지역 설계 흐름을 사용하는 경우 모듈을 최상위 설계로 쉽게 가져올 수 있는 방법으로 모듈 가상 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 }