1. 程式人生 > >Vivado使用技巧(1):使用Tcl在Shell中進行FPGA開發

Vivado使用技巧(1):使用Tcl在Shell中進行FPGA開發

概述

  通常我們使用的是Vivado IDE進行FPGA的開發,IDE提供了圖形化的介面和自動化管理方案,我們只需要點選幾個按鈕就會得到結果。有時候還會用到另外一種開發方式:在Vivado Tcl Shell中使用Tcl命令的方式控制開發設計流程。使用Tcl的好處是每一個命令都有一個具體的操作,我們可以詳細的控制設計過程中的每一步,設計更加靈活,也更有效率。
  通常的情況下都會根據需求事先編輯好一個完整的Tcl指令碼,直接執行即可得到想要的結果。本文將會保留一個設計過程的每一步(實際使用時不會用到這麼多的步驟)。以下Tcl命令對於所有的Vivado版本都是通用的。進行操作前需要準備好已經設計好的Verilog檔案和約束XDC檔案,並放在一個固定目錄下。本文參考了Xilinx官方文件與《Xilinx FPGA權威設計指南》這本書中的內容。

一.準備

  1.1 在開始選單的Xilinx工具集中找到“Vivado xxxx.x Tcl Shell”,xxxx.x代表安裝的Vivado版本號。在Shell中先將當前環境指向設計原始檔的目錄(注意路徑中斜線方向是左斜槓):

Vivado% cd C:/Users/GodWa/Desktop/SDK_Test/gate

  1.2 指定一個設計檔案的輸出路徑,所有生成的報告、結果檔案等都將存放在該路徑資料夾下

Vivado% set outputDir ./gate/gate_Created_Data/top_output

  1.3 生成輸出路徑的目標資料夾

Vivado% file mkdir
$outputDir

  1.4 讀取設計的Verilog原始檔和XDC約束檔案

Vivado% read_verilog top.v
Vivado% read_xdc test.xdc

二.綜合

  2.1 對設計進行綜合,需要指定目標FPGA器件型號。接下來的每一步都會反饋一個結果,如果發生錯誤會有警告、錯誤提示,可以根據提示修改原始檔的程式。

Vivado% synth_design -top top -part xc7a100tcsg324-1

  2.2 綜合後寫入一個檢查點。

Vivado% write_checkpoint -force $outputDir
/post_synth

  2.3 生成綜合後的時序報告。

Vivado% report_timing_summary -file $outputDir/post_synth_timing_summary.rpt

  2.4 生成綜合後的功耗報告。

Vivado% report_power -file $outputDir/post_synth_power.rpt

  2.5 對設計進行優化,優化操作一般都需要指定一些引數。

Vivado% opt_design

  2.6 對功耗進行優化。

Vivado% power_opt_design

三.實現

  3.1 對設計進行佈局。

Vivado% place_design

  3.2 對佈局後的設計進行邏輯物理優化。

Vivado% phys_opt_design

  3.3佈局後寫入一個設計檢查點。

Vivado% write_checkpoint -force $outputDir/post_place

  3.4生成佈局後的時序總結報告

Vivado% report_timing_summary -file $outputDir/post_place_timing_summary.rpt

  3.5對設計進行佈線。

Vivado% route_design

  3.6佈線後寫入一個檢查點。

Vivado% write_checkpoint -force $outputDir/post_route

  3.7 生成佈線後的時序總結報告。

Vivado% report_timing_summary -file $outputDir/post_route_timing_summary.rpt

  3.8 生成佈線後的時序報告。

Vivado% report_timming -sort_by group -max_paths 100 -path_type summary -file $outputDir/post_route_timing.rpt

  3.9 生成佈線後的利用率報告。

Vivado% report_clock_utilization -file $outputDir/post_route_util.rpt

  3.10 生成佈線後的功耗報告。

Vivado% report_power -file $outputDir/post_imp_drc.rpt

  3.11 生成佈線後的drc報告。

Vivado% report_drc -file $outputDir/post_impl_drc.rpt

  3.12 寫Verilog檔案。

Vivado% write_verilog -force $outputDir/top_impl_netlist.v

  3.13 寫xdc檔案。

Vivado% write_xdc -no_fixed_only -force $outputDir/top_impl.xdc

四.下載

  4.1 生成bit流檔案。

Vivado% write_bitstream -force $outputDir/top.bit

  4.2 開啟硬體管理器。

Vivado% open_hw

  4.3 連線硬體。

Vivado% connect_hw_server

  4.4 開啟硬體目標。

Vivado% open_hw_target

  4.5 分配程式設計檔案。

Vivado% set_property PROGRAM.FILE{bit檔案地址} [lindex [get_hw_devices]0]

  4.6 下載。

program_hw_devices [lindex[get_hw_devices]0]

  觀察就會發現與設計步驟相關的命令都會有一個“design”字尾,與生成報告相關的命令都會有一個“report”字首。文字在使用Tcl命令時幾乎沒有加任何的屬性和引數,其實使用Tcl進行FPGA開發的好處就是可以通過新增和修改屬性的方式控制設計過程中的每一步。
  本文使用的Tcl命令只是Shell中的命令。在Vivado IDE中的Tcl控制檯,還可以使用一些與圖形化介面配套的命令,這些命令是無法在Shell中使用的。在IDE介面中使用Tcl命令時軟體會對命令做出比較詳細的補全和提示工作,使用起來也不會感覺到困難。
  開啟生成檔案的資料夾,將看到設計過程中的所有檔案,這些檔案是可以用Vivado IDE開啟檢視的:


  Tcl作為一種指令碼語言而網上目前可以找到的學習資料很少。與Vivado操作有關的Tcl其實都分佈在Xilinx介紹Vivado的官方文件中。