利用 Makefile 高效啟動 VIVADO 軟件:深入解析與實踐
系列文章目錄
1、VMware Workstation Pro安裝指南:詳細步驟與配置選項說明
2、VMware 下 Ubuntu 操作系統下載與安裝指南
3.基于 Ubuntu 的 Linux 系統中 Vivado 2020.1 下載安裝教程
文章目錄
- 利用 Makefile 高效啟動 VIVADO 軟件:深入解析與實踐
- 系列文章目錄
- 引言
- 依賴庫的加載
- 克隆 FPGA GitHub 存儲庫
- Makefile 基礎原理
- 配置環境
- 操作系統與 VIVADO 版本
- 安裝相關依賴工具
- 編寫 Makefile 啟動 VIVADO
- 簡單啟動 VIVADO GUI
- 結合 TCL 腳本啟動并執行特定操作
- 構建復雜的 VIVADO 操作流程
- 實際案例:Red Pitaya FPGA/SoC Makefile 分析
- 高級技巧與注意事項
- 變量與參數傳遞
- 錯誤處理
- 跨平臺兼容性
- 總結
- 后續將進一步擴展到TCL腳本。
引言
在上一篇博文中3.基于 Ubuntu 的 Linux 系統中 Vivado 2020.1 下載安裝教程,我們安裝了vivado2020.1。
在 FPGA 開發領域,Xilinx 的 VIVADO 軟件是一款功能強大且應用廣泛的集成開發環境(IDE)。然而,頻繁通過圖形界面手動操作 VIVADO 啟動項目、執行綜合、實現等流程,效率較低且易出錯。Makefile 作為一種構建自動化工具,能夠顯著簡化這一過程,通過編寫一系列規則和命令,讓開發者只需一條指令,就能自動完成復雜的 VIVADO 操作,大幅提升開發效率。
本文將深入探討如何運用 Makefile 啟動 VIVADO 軟件,并結合實際案例詳細闡述其原理與實踐步驟。
依賴庫的加載
安裝 Vivado 后,通過在終端中運行以下命令來安裝其他庫。
sudo apt-get install libxft2 libxft2:i386
克隆 FPGA GitHub 存儲庫
前往 Red Pitaya FPGA Github 站點并下載該項目的 ZIP 文件夾。
或者,如果您使用的是 Linux 或 WSL,您可以先安裝 git,然后移動到所需位置并克隆 Red Pitaya Git 存儲庫:
sudo apt-get install git
git clone https://github.com/RedPitaya/RedPitaya-FPGA.git
但是該方法有坑,下載的有時候不對,無法運行makefile。
轉到下載的 Red Pitaya FPGA Repository ZIP 位置,并將其解壓到計算機上的文件夾/目錄中。
在該目錄下打開終端,并運行以下指令:
cd Downloads/
cd RedPitaya-FPGA/
make project PRJ=v0.94 MODEL=Z10
開啟vivado的gui界面:
vivado的tcl控制臺輸出內容為:
Makefile 基礎原理
Makefile 本質上是一個文本文件,其中定義了一系列規則(rule)。每個規則包含一個目標(target)、該目標所依賴的文件(prerequisites)以及為了生成該目標需要執行的命令(commands)。例如:
target: prerequisite1 prerequisite2command1command2
在 VIVADO 開發情境中,目標可以是啟動 VIVADO 軟件、生成比特流文件(.bit)、綜合設計等;依賴文件則是項目源文件、TCL 腳本等;命令就是調用 VIVADO 相關命令行工具執行特定操作的指令。
配置環境
在使用 Makefile 啟動 VIVADO 之前,需確保系統環境正確配置。
操作系統與 VIVADO 版本
不同操作系統(如 Windows、Linux)對 VIVADO 的支持略有差異。以 Linux 系統為例,確保已安裝合適版本的 VIVADO,并且其安裝路徑已添加到系統環境變量PATH
中。可通過編輯.bashrc
或.bash_profile
文件,添加類似如下語句(假設 VIVADO 安裝在/opt/Xilinx/Vivado/2020.1
目錄下):
source <path to Xilinx installation directory>/Xilinx/Vivado/2020.1/settings64.sh
source <path to Xilinx installation directory>/Xilinx/SDK/2020.1/settings64.sh
修改完成后,執行source ~/.bashrc
(或source ~/.bash_profile
)使設置生效。在 Windows 系統中,同樣需將 VIVADO 安裝目錄下的bin
文件夾路徑添加到系統環境變量中。
安裝相關依賴工具
除 VIVADO 本身外,Makefile 運行可能還需要一些其他工具支持,如make
工具本身以及 TCL 解釋器(因為 VIVADO 支持 TCL 腳本編程)。在 Linux 系統中,可通過包管理器安裝這些工具。例如,在基于 Debian 或 Ubuntu 的系統中,執行以下命令安裝make
和 TCL 相關包:
sudo apt-get updatesudo apt-get install make tcl
在 CentOS 或 Red Hat 系統中,使用以下命令:
sudo yum install make tcl
編寫 Makefile 啟動 VIVADO
簡單啟動 VIVADO GUI
創建一個名為Makefile
的文件(注意文件名必須為Makefile
,首字母大寫),在其中添加如下規則,用于啟動 VIVADO 圖形界面:
vivado_gui:vivado
在命令行中進入包含該Makefile
的目錄,執行make vivado_gui
命令,即可啟動 VIVADO 圖形界面。這里vivado
是系統環境變量中配置好的 VIVADO 啟動命令,vivado_gui
是自定義的目標名稱,可根據喜好修改。
結合 TCL 腳本啟動并執行特定操作
通常在開發中,不僅需要啟動 VIVADO,還希望執行一些初始化操作,如打開特定項目、運行 TCL 腳本進行綜合等。假設已有一個用于初始化項目的 TCL 腳本init_project.tcl
,可編寫如下 Makefile 規則:
init_project:vivado -mode tcl -source init\_project.tcl
上述規則中,-mode tcl
參數指示 VIVADO 以 TCL 腳本模式運行,-source init_project.tcl
指定要執行的 TCL 腳本文件。通過執行make init_project
,VIVADO 將啟動并執行init_project.tcl
腳本中的命令,可能包括創建項目、添加源文件、設置項目屬性等操作。
構建復雜的 VIVADO 操作流程
實際項目開發中,可能需要一系列連貫的 VIVADO 操作,如綜合、實現、生成比特流等。通過合理編寫 Makefile,可以將這些操作整合起來,形成自動化構建流程。
實際案例:Red Pitaya FPGA/SoC Makefile 分析
以下是 Red Pitaya 項目中用于 FPGA/SoC 開發的 Makefile 實例,該文件實現了從項目構建到生成多種輸出文件(如 FPGA 比特流、FSBL 二進制文件等)的完整流程,充分體現了 Makefile 在 VIVADO 自動化操作中的應用:
#
# Authors: Matej Oblak, Iztok Jeras
# (C) Red Pitaya 2013-2015
#
# Red Pitaya FPGA/SoC Makefile
#
# Produces:
# 3. FPGA bit file.
# 1. FSBL (First stage bootloader) ELF binary.
# 2. Memtest (stand alone memory test) ELF binary.
# 4. Linux device tree source (dts).PRJ ?= logic
MODEL ?= Z10
HWID ?= ""
DEFINES ?= ""
DTS_VER ?= 2017.2# build artefacts
FPGA_BIT = prj/$(PRJ)/out/red_pitaya.bit
FPGA_BIN = prj/$(PRJ)/out/red_pitaya.bit.bin
FSBL_ELF = prj/$(PRJ)/sdk/fsbl/executable.elf
MEMTEST_ELF = prj/$(PRJ)/sdk/dram_test/executable.elf
DEVICE_TREE = prj/$(PRJ)/sdk/dts/system.dts# Vivado from Xilinx provides IP handling, FPGA compilation
# hsi (hardware software interface) provides software integration
# both tools are run in batch mode with an option to avoid log/journal files
VIVADO = vivado -nojournal -mode batch
HSI = hsi -nolog -nojournal -mode batch
BOOTGEN= bootgen -image prj/$(PRJ)/out/red_pitaya.bif -arch zynq -process_bitstream bin
#HSI = hsi -nolog -mode batch.PHONY: all clean project simall: $(FPGA_BIT) $(FSBL_ELF) $(DEVICE_TREE) $(FPGA_BIN)# TODO: clean should go into each project
clean:rm -rf out .Xil .srcs sdk project simrm -rf prj/$(PRJ)/out prj/$(PRJ)/.Xil prj/$(PRJ)/.srcs prj/$(PRJ)/sdk prj/$(PRJ)/projectsim: vivado -source red_pitaya_vivado_sim.tcl -tclargs $(PRJ) $(MODEL) $(DEFINES)project:
ifneq ($(HWID),"")vivado -source red_pitaya_vivado_project_$(MODEL).tcl -tclargs $(PRJ) $(DEFINES) HWID=$(HWID)
elsevivado -source red_pitaya_vivado_project_$(MODEL).tcl -tclargs $(PRJ) $(DEFINES)
endif$(FPGA_BIT):
ifneq ($(HWID),"")$(VIVADO) -source red_pitaya_vivado_$(MODEL).tcl -tclargs $(PRJ) $(DEFINES) HWID=$(HWID)
else$(VIVADO) -source red_pitaya_vivado_$(MODEL).tcl -tclargs $(PRJ) $(DEFINES)
endif./synCheck.sh$(FSBL_ELF): $(FPGA_BIT)xsct red_pitaya_hsi_fsbl.tcl $(PRJ)$(DEVICE_TREE): $(FPGA_BIT)xsct red_pitaya_hsi_dts.tcl $(PRJ) DTS_VER=$(DTS_VER)$(FPGA_BIN): $(FPGA_BIT)@echo all:{$(FPGA_BIT)} > prj/$(PRJ)/out/red_pitaya.bif$(BOOTGEN)
該 Makefile 具有以下特點,可作為復雜項目中使用 Makefile 啟動和控制 VIVADO 操作的典型參考:
-
變量定義與參數傳遞:通過
PRJ
、MODEL
、HWID
等變量定義項目名稱、硬件模型、硬件 ID 等關鍵參數,支持在命令行中靈活修改,如make project PRJ=my_project MODEL=Z7
。同時,使用?=
賦值方式為變量設置默認值,增強了腳本的靈活性。 -
目標與依賴關系設計:
-
核心目標
all
依賴于$(FPGA_BIT)
(FPGA 比特流)、$(FSBL_ELF)
(第一階段啟動加載程序)、$(DEVICE_TREE)
(設備樹源文件)和$(FPGA_BIN)
(二進制比特流),確保這些文件按順序生成。 -
$(FPGA_BIT)
作為基礎目標,其生成依賴于 VIVADO 執行特定的 TCL 腳本(red_pitaya_vivado_$(MODEL).tcl
),并根據HWID
參數是否存在執行不同命令,體現了條件判斷在 Makefile 中的應用。 -
其他目標如
$(FSBL_ELF)
和$(DEVICE_TREE)
均依賴于$(FPGA_BIT)
,確保在 FPGA 比特流生成后才進行后續的軟件集成操作,符合開發流程的邏輯順序。
-
VIVADO 工具調用優化:定義
VIVADO = vivado -nojournal -mode batch
,指定以批處理模式運行 VIVADO 并禁用日志和 journal 文件,減少冗余輸出,提高運行效率。在project
和$(FPGA_BIT)
目標中,通過-source
參數調用不同的 TCL 腳本,并傳遞$(PRJ)
、$(DEFINES)
等參數,實現了項目創建、綜合、實現等操作的自動化。 -
輔助目標設計:
-
sim
目標用于啟動 VIVADO 仿真,通過執行red_pitaya_vivado_sim.tcl
腳本實現仿真環境的自動化配置。 -
clean
目標用于清理項目生成的中間文件和結果文件,保持項目目錄整潔,避免舊文件對新構建過程的干擾。
執行make all
命令,該 Makefile 會按照依賴關系依次執行項目構建、FPGA 比特流生成、FSBL 編譯、設備樹生成等操作,極大簡化了手動操作流程,充分展示了 Makefile 在復雜 FPGA 項目開發中的強大作用。
高級技巧與注意事項
變量與參數傳遞
在 Makefile 中使用變量可以提高代碼的可維護性和復用性。如上述 Red Pitaya 案例中定義的PROJECT_NAME
和TCL_DIR
變量。還可以通過命令行傳遞參數給 Makefile。例如,定義一個變量THREADS
用于指定 VIVADO 執行時使用的線程數,可在 Makefile 中這樣使用:
\# 定義默認線程數THREADS ?= 4synthesize:vivado -mode batch -source \$(TCL\_DIR)/synthesize.tcl -tclargs \$(PROJECT\_NAME) -tclargs \$(THREADS)
在命令行執行時,可通過make synthesize THREADS=8
來指定使用 8 個線程進行綜合操作,若不指定,則使用默認值 4。
錯誤處理
在 Makefile 執行過程中,若某個 VIVADO 命令執行失敗,默認情況下 Makefile 會繼續執行后續命令,這可能導致錯誤累積。為避免這種情況,可在 Makefile 中添加錯誤處理機制。例如,使用-e
選項使 Makefile 在遇到錯誤時立即停止執行:
.PHONY: allall:set -evivado -mode batch -source $(TCL_DIR)/synthesize.tcl -tclargs $(PROJECT_NAME)vivado -mode batch -source $(TCL_DIR)/implement.tcl -tclargs $(PROJECT_NAME)vivado -mode batch -source $(TCL_DIR)/generate_bitstream.tcl -tclargs $(PROJECT_NAME)
上述代碼中,.PHONY
表示all
目標不是一個真實的文件,而是一個偽目標。set -e
命令使腳本在遇到任何命令返回非零退出狀態時立即停止執行,從而及時發現并處理錯誤。
跨平臺兼容性
由于 Windows 和 Linux 系統在命令語法、路徑表示等方面存在差異,編寫 Makefile 時要考慮跨平臺兼容性。例如,路徑分隔符在 Windows 中是反斜杠\
,而在 Linux 中是正斜杠/
。可以通過定義一些平臺相關的變量來解決這個問題:
ifdef Windows_NTPATH_SEP = \\
elsePATH_SEP = /
endifTCL_DIR = scripts$(PATH_SEP)
這樣在不同系統下,TCL_DIR
變量會根據系統類型正確設置路徑分隔符。
總結
通過合理運用 Makefile,開發者能夠高效地啟動 VIVADO 軟件并執行一系列復雜的開發操作,實現開發流程的自動化。從基礎的 VIVADO 圖形界面啟動,到結合 TCL 腳本完成項目初始化、綜合、實現等全流程操作,Makefile 展現出強大的靈活性和便捷性。Red Pitaya 的案例進一步說明,在實際項目中,通過精心設計變量、目標依賴關系和工具調用方式,Makefile 能夠顯著提升 FPGA 開發的效率和可靠性。同時,掌握變量與參數傳遞、錯誤處理、跨平臺兼容性等高級技巧,能進一步優化 Makefile 的編寫,為復雜 FPGA 項目開發提供有力支持。