如果您在專案中使用模組化 Logic Lock 區域設計流程,您可以選擇在模組虛擬 I/O 針腳中製造所有的 I/O 針腳,以輕鬆將模組導入頂級設計中。此外,如果您想要編譯 IP 核心,以查看它使用多少資源,但它使用太多針腳給目標裝置,使針腳虛擬化可能讓核心適合。
以下簡單的程式可使設計虛擬 I/O 針腳中的所有針腳。首先,將設計進行合成,以確定哪些節點為針腳。接下來,名稱 ID 集合設定為對應設計中的針腳,然後每個針腳會套用VIRTUAL_PIN作業。最後 ,export_assignments 命令將所有新任務寫入專案的 Quartus II 設定檔案 (.qsf)。
範例使用get_names和get_name_info指令,可在 Quartus II 軟體的 4.0 版本(Quartus:quartus::p roject套件版本 2.0)中開始提供。請參閱此頁面上的最後一個範例,瞭解從 Quartus II 軟體版本 3.0 開始運作且具有更進階功能的程式碼。
load_package Flow proc make_all_pins_virtual {execute_module────────工具地圖 集 name_ids[get_names-filter * -node_type針腳 ]foreach_in_collection name_id $name pin_name[get_name_info────info full_path $name_id] post_message「將VIRTUAL_PIN分配給$pin_name」set_instance_assignment-$pin_name-name-name VIRTUAL_PIN ON export_assignments[
改善範例代碼
樣品代碼有多種可改進的方法。
移除現有的VIRTUAL_PIN分配
您可以在程式的開頭新增下列命令,以移除所有現有的VIRTUAL_PIN作業。這是確保作業處於已知狀態的實用步驟。在 execute_module 命令之前加入此命令。
remove_all_instance_assignments──名稱 VIRTUAL_PIN
手動排除某些針腳,例如頻率
Quartus II 軟體若要在符合設計時執行計時優化,時鐘必須連接到目標裝置的頂級 I/O 針腳,而時鐘必須套用頻率設定。即使設計中的所有其他針腳都是虛擬 I/O 針腳,也確實如此。因此,上述基本範例使 Quartus II 軟體無法在編譯期間優化時間,因為所有針腳(包括頻率)都套用了VIRTUAL_PIN作業。
您可以在接受訊號清單的程式中新增參數,以排除VIRTUAL_PIN作業。此清單通常是您設計中的頻率針腳名稱。下列範例可接受要排除的名稱清單。它也包含移除上述任何現有VIRTUAL_PIN作業的命令。
load_package流程 套件需要 cmdline proc make_all_pins_virtual { args { 設定選項 {\"排除.arg" 「「要排除的訊號清單」 \ \ 陣列設定 opts [:cmdline::getoptions quartus (args) $options] remove_all_instance_assignments VIRTUAL_PIN────pin_name[get_name_info execute_module foreach_in_collection name_id $name node_type get_names name_ids────[get_name_info─info full_path $name_id] 如果 { -1 =[lsearch -exact $opts(排除)$pin_name]] { { { post_message「將VIRTUAL_PIN分配給$pin_name」set_instance_assignment───$pin_name-name VIRTUAL_PIN ON = 其他 { post_message「跳槽VIRTUAL_PIN作業至$pin_name」export_assignments。
您可以使用此命令呼叫程式。這個範例假設您的設計中有兩個頻率,分別是clk_a和clk_b。
make_all_pins_virtual -排除 { clk_a clk_b \
自動識別並處理頻率
排除某些訊號的前一個範例有必須由手輸入的缺點。可以使用 :quartus::advanced_timing 套件中的指令來判斷頻率訊號。此套件僅可用於載入 quartus_tan 可執行檔,因此您必須使用 quartus_tan 使用下列範例執行腳本。從 Quartus II 軟體的版本 3.0 開始,全都支援此範例中的命令。
自動識別頻率的優勢在於可讓您將USE_CLK_FOR_VIRTUAL_PIN分配的應用程式自動化。您可以結合VIRTUAL_PIN作業使用USE_CLK_FOR_VIRTUAL_PIN作業,將頻率設定與設計中的頻率聯繫在一起。當您使用虛擬 I/O 針腳編譯設計時,這能為 Quartus II Fitter 提供關於計時需求的準確資訊。如需此作業的詳細資訊,請參閱 Quartus II 說明中的 虛擬針腳頻率邏輯選項 主題。
以下範例程式使設計虛擬 I/O 針腳中的所有 I/O 針腳。它也會在適當的時候進行虛擬針腳頻率設定作業。
範例代碼會先將您的設計合成。然後,它會嘗試刪除任何現有的計時網路清單,然後再建立新的計時網路清單。 get_timing_nodes 指令從計時網路清單中建立兩個節點集合:pin_ids與clk_ids。這兩個系列均為專屬;clk_ids系列中的節點位於pin_ids系列中,儘管頻率可能位於 I/O 針腳上。
第一 個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-工具地圖 擷擷delete_timing_netlist \ create_timing_netlist -post_map 集 pin_ids [get_timing_nodes-type pin] 設定 clk_ids [get_timing_nodes -type clk] # 使VIRTUAL_PIN作業到每個針腳設計 foreach_in_collection pin_id $pin_ids { 設定pin_name [get_timing_node_info -資訊名稱 $pin_id] post_message「VIRTUAL_PIN分配給 $pin_name」set_instance_assignment-$pin_name-name VIRTUAL_PIN ON® # 針對設計中的每一個頻率,檢查是否有 對應的CLOCK_SETTINGS作業。 foreach_in_collection clk_id $clk_ids { 設定clk_name [get_timing_node_info -資訊名稱 $clk_id] 集 clk_stgs [get_instance_assignment-到 $clk_name -name \ CLOCK_SETTINGS]# 如果這個頻率有時鐘設定 USE_CLK_FOR_VIRTUAL_PIN, 則如果 {!字串等於「」$clk_stgs] { { post_message「進行 USE_CLK_FOR_VIRTUAL_PIN作業\ 至具有價值$clk_stgs 的$clk_name」set_instance_assignment─── 至 $clk_name \ -name USE_CLK_FOR_VIRTUAL_PIN $clk_stgs \ = export_assignments 。