Jika Anda menggunakan alur desain Wilayah Kunci Logika modular dalam proyek Anda, Anda dapat memilih untuk membuat semua pin I/O dalam pin I/O virtual modul sebagai cara untuk dengan mudah mengimpor modul dalam desain tingkat atas. Selain itu, jika Anda ingin mengkompirasi inti IP untuk melihat berapa banyak sumber daya yang digunakannya tetapi menggunakan terlalu banyak pin untuk perangkat target Anda, membuat pin virtual memungkinkan inti untuk menyesuaikannya.
Prosedur sederhana berikut membuat semua pin dalam pin I/O virtual desain Anda. Pertama, desain disintesis untuk menentukan node mana yang merupakan pin. Selanjutnya, kumpulan ID nama diatur sesuai dengan pin dalam desain, kemudian penugasan VIRTUAL_PIN diterapkan ke setiap pin. Terakhir, perintah export_assignments menulis semua tugas baru ke File Pengaturan Quartus II (.qsf) proyek.
Contoh menggunakan perintah get_names dan get_name_info, yang tersedia dimulai pada versi 4.0 perangkat lunak Quartus II (versi 2.0 dari paket ::quartus::p roject). Lihat contoh terakhir pada halaman ini untuk kode yang akan berfungsi dimulai dengan versi 3.0 dari perangkat lunak Quartus II, dan memiliki kemampuan yang lebih canggih.
load_package flow proc make_all_pins_virtual {} { execute_module -tool map set name_ids [get_names -filter * -node_type pin] foreach_in_collection name_id $name_ids { set pin_name [get_name_info -info full_path $name_id] post_message "Membuat penetapan VIRTUAL_PIN ke $pin_name" set_instance_assignment -to $pin_name -name VIRTUAL_PIN ON } export_assignments }
Meningkatkan Kode Sampel
Ada berbagai cara agar kode sampel dapat ditingkatkan.
Hapus Tugas VIRTUAL_PIN yang Ada
Anda dapat menambahkan perintah berikut ke awal prosedur untuk menghapus semua tugas VIRTUAL_PIN yang ada. Ini adalah langkah yang berguna untuk memastikan penugasan berada dalam kondisi yang diketahui. Tambahkan perintah ini sebelum perintah execute_module.
VIRTUAL_PIN -nama remove_all_instance_assignments
Kecualikan Pin Tertentu secara Manual, Seperti Clock
Agar perangkat lunak Quartus II melakukan optimisasi waktu sesuai desain, clock harus terhubung ke pin I/O tingkat atas di perangkat target, dan clock harus menerapkan pengaturan clock. Ini berlaku bahkan jika semua pin lain dalam desain adalah pin I/O virtual. Oleh karena itu, contoh dasar di atas mencegah perangkat lunak Quartus II mengoptimalkan waktu selama kompilasi karena semua pin, termasuk clock, menerapkan tugas VIRTUAL_PIN.
Anda dapat menambahkan parameter ke prosedur yang menerima daftar sinyal untuk dikurangi dari tugas VIRTUAL_PIN. Daftar ini biasanya merupakan nama pin clock dalam desain Anda. Contoh berikut menerima daftar nama yang akan dieksklusi. Ini juga mencakup perintah untuk menghapus tugas VIRTUAL_PIN yang ada, yang dibahas di atas.
paket aliran load_package memerlukan cmdline proc make_all_pins_virtual { args } { set options {\ { "exclude.arg" "" "Daftar sinyal yang akan dikecualikan" } \ } array set 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 pin] foreach_in_collection name_id $name_ids { set pin_name [get_name_info -info full_path $name_id] jika { -1 == [lsearch -$opts(excludes) $pin_name] } { post_message "Membuat penetapan VIRTUAL_PIN ke $pin_name" set_instance_assignment -to $pin_name -name VIRTUAL_PIN ON } else { post_message "Melewati VIRTUAL_PIN tugas ke $pin_name" } } export_assignments }
Anda dapat menghubungi prosedur dengan perintah ini. Contoh ini mengasumsikan Anda memiliki dua clock dalam desain Anda, dengan nama clk_a dan clk_b.
make_all_pins_virtual -exclude { clk_a clk_b }
Identifikasi Secara Otomatis & Tangani Clock
Contoh sebelumnya untuk mengecualikan sinyal tertentu memiliki kerugian yang harus dimasukkan dengan tangan. Dimungkinkan untuk menentukan sinyal clock dengan perintah dalam paket ::quartus::advanced_timing. Paket ini hanya tersedia untuk memuat quartus_tan yang dapat dieksekusi, jadi Anda harus menggunakan quartus_tan untuk menjalankan skrip dengan contoh berikut. Perintah dalam contoh ini semua didukung dimulai dengan versi 3.0 dari perangkat lunak Quartus II.
Secara otomatis mengidentifikasi clock memiliki keunggulan yang memungkinkan Anda untuk mengotomatiskan aplikasi dari penugasan USE_CLK_FOR_VIRTUAL_PIN. Anda dapat menggunakan tugas USE_CLK_FOR_VIRTUAL_PIN bersama dengan penugasan VIRTUAL_PIN untuk mengaitkan pengaturan clock dengan clock di desain Anda. Hal ini memberikan Quartus II Fitter dengan informasi yang akurat tentang persyaratan waktu saat Anda mengkompile desain dengan pin I/O virtual. Untuk informasi lebih lanjut tentang penugasan ini, lihat topik opsi logika Clock Pin Virtual di Bantuan Quartus II.
Contoh prosedur berikut membuat semua pin I/O dalam pin I/O virtual desain Anda. Hal ini juga membuat penetapan pengaturan clock pin virtual jika sesuai.
Contoh kode pertama mensintesis desain Anda. Kemudian ia mencoba untuk menghapus netlist timing yang ada sebelum membuat yang baru. Perintah get_timing_nodes membuat dua koleksi node dari netlist waktu: pin_ids dan clk_ids. Kedua koleksi tersebut bersifat eksklusif; node dalam koleksi clk_ids ada di koleksi pin_ids, meskipun clock mungkin berada di pin I/O.
Loop foreach_in_collection pertama mendapatkan nama setiap pin dalam desain (tidak termasuk pin clock) dan membuat penugasan VIRTUAL_PIN untuknya.
Loop foreach_in_collection kedua mendapatkan nama setiap clock dalam desain. Perintah get_instance_assignment mengambil pengaturan clock yang sesuai, jika ada. Jika pengaturan clock untuk clock tidak ada (string tidak kosong), skrip membuat USE_CLOCK_FOR_VIRTUAL_PIN penugasan ke nama clock dengan nilai nama pengaturan clock.
load_package flow load_package timing 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 delete_timing_netlist } create_timing_netlist -post_map set pin_ids [get_timing_nodes -type pin] set clk_ids [get_timing_nodes -type clk] # Buat VIRTUAL_PIN tugas ke setiap pin di design foreach_in_collection pin_id $pin_ids { set pin_name [get_timing_node_info -info name $pin_id] post_message "Membuat penugasan VIRTUAL_PIN ke $pin_name" set_instance_assignment -to $pin_name -name VIRTUAL_PIN ON } # Untuk setiap jam dalam desain, periksa apakah memiliki penugasan CLOCK_SETTINGS yang sesuai dengan #. foreach_in_collection clk_id $clk_ids { set clk_name [get_timing_node_info -info name $clk_id] clk_stgs [get_instance_assignment -to $clk_name -name \ CLOCK_SETTINGS] # Jika ada pengaturan clock untuk clock ini, buat penugasan # USE_CLK_FOR_VIRTUAL_PIN jika { ![ string sama dengan "" $clk_stgs] } { post_message "Membuat penetapan USE_CLK_FOR_VIRTUAL_PIN \ ke $clk_name dengan nilai $clk_stgs" set_instance_assignment -to $clk_name \ -name USE_CLK_FOR_VIRTUAL_PIN $clk_stgs } } export_assignments }