vivado -mode tcl和vivado -mode batch有什么區別?
同樣的Tcl腳本,我們可以采用Vivado Tcl模式運行,也可以采用Vivado Batch模式運行,如下所示:
vivado-mode tcl -source user.tcl
vivado-mode batch -source user.tcl
從Tcl角度而言,兩者并沒有本質的差別,只有一些細微差別。細微差別如下:
-mode tcl會打開Vivado tcl shell,運行結束后仍然在Vivado tcl shell下;
-mode batch也會打開Vivado tcl shell,但運行結束后會返回native shell下;
-mode batch模式下可以通過選項-tclargs設置參數,例如:
vivado -mode batch -sourcescript.tcl -tclargs "FPGA=115-2"
同時,batch模式下未知命令不會被送給OS去執行。
如何導出更詳細的資源利用率報告?
在Vivado圖形界面下,我們可以通過命令report_utilization生成資源利用率報告。在這個報告里可以看到每個模塊的資源利用率,如下圖所示。有時我們需要將報告導出來,此時可以在下圖所示界面點擊鼠標右鍵,選擇“Exportto Spreadsheet”就會生成一個Excel文件,該文件里會詳細顯示每個模塊的資源利用率信息。
此外,我們還可以通過選項-spreadsheet_depth管理需要查看到的層次,最頂層算1,如下圖所示。使用-spreadsheet_file時需要和-name一起使用。
如果只是看總體資源利用率,那么就可以直接用report_utilization添加-file選項。
如何獲取被復制的寄存器?
降低扇出的一種方法就是復制寄存器。通常,工具會根據時序需求對驅動高扇出net的寄存器進行復制,新生成的寄存器名字中會包含關鍵字rep,如下圖所示。如果我們設計中存在由原始寄存器作為起始單元的時序例外約束,那么就要確保該約束同樣作用于新生成的復制寄存器。盡管我們可以通過關鍵字rep來鎖定這些復制的寄存器,但這種方法仍然過于繁瑣。好在命令get_cells本身就提供了選項-include_replicated_objects,這樣添加該選項即可獲得原始寄存器外加新生成的復制寄存器。
如何限定約束的作用域?
假定有這樣一個場景:模塊A內部包含一些多周期約束的路徑,同時模塊A本身在設計中被多次實例化。如果把模塊A當作頂層描述其中的多周期路徑約束將非常方便,這樣避免了設計層次的干擾。而實際情形是模塊A并非頂層,如果針對模塊A的實例化逐一添加該約束,那么這個過程將會較為繁瑣且容易出錯。有沒有其他辦法呢?想想Vivado自帶的IP,很多IP都自帶約束,同一個IP無論實例化多少次,我們只會看到一份約束文件。這是因為這些約束文件都被限制了作用域。如下圖所示,顯示了IPFIFO生成的約束文件的作用域,這個作用域是通過屬性SCOPED_TO_CELLS和SCOPE_TO_REF來指定。通過其一就可指定作用域。這里SCOPE_TO_REF值為模塊A本身的名字,而SCOPED_TO_CELL的值為模塊A實例化的名字,注意兩者含義的差別。采用此方法我們就可以將用戶約束文件限定其作用域為指定模塊。需要注意的是有些約束依賴于外部時鐘,比如多周期路徑約束,set_multicycle_path跟的數值為時鐘周期個數,工具要將其轉換為絕對時間ns,就要知道時鐘周期具體數值,因此還要指定該約束文件的處理順序,這可通過屬性PROCESSING_ORDER指定,將其值設置為LATE即可。
launch_runs時的jobs和thread有什么區別?
Launch Runs時會彈出如下圖所示的對話框,其中可以讓用戶選擇“Number of jobs”,其含義是指當同時執行多個Run時可使用的本地CPU核的個數。而thread線程數,則需要通過Tcl腳本設定,
set_paramgeneral.maxThreads 4
-
寄存器
+關注
關注
31文章
5336瀏覽量
120230 -
命令
+關注
關注
5文章
683瀏覽量
22011 -
腳本
+關注
關注
1文章
389瀏覽量
14858 -
Vivado
+關注
關注
19文章
812瀏覽量
66470
原文標題:幾個常見問題
文章出處:【微信號:Lauren_FPGA,微信公眾號:FPGA技術驛站】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論