Quartus® II Tcl 範例:讓所有針腳都虛擬

author-image

作者

如果您在專案中使用模組化 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
。

這個頁面的內容綜合了英文原始內容的人工翻譯譯文與機器翻譯譯文。本內容是基於一般資訊目的,方便您參考而提供,不應視同完整或準確的內容。如果這個頁面的英文版與譯文之間發生任何牴觸,將受英文版規範及管轄。 查看這個頁面的英文版。