利用 Makefile 高效啟動 VIVADO 軟件:深入解析與實踐

利用 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 操作的典型參考:

  1. 變量定義與參數傳遞:通過PRJMODELHWID等變量定義項目名稱、硬件模型、硬件 ID 等關鍵參數,支持在命令行中靈活修改,如make project PRJ=my_project MODEL=Z7。同時,使用?=賦值方式為變量設置默認值,增強了腳本的靈活性。

  2. 目標與依賴關系設計

  • 核心目標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 比特流生成后才進行后續的軟件集成操作,符合開發流程的邏輯順序。

  1. VIVADO 工具調用優化:定義VIVADO = vivado -nojournal -mode batch,指定以批處理模式運行 VIVADO 并禁用日志和 journal 文件,減少冗余輸出,提高運行效率。在project$(FPGA_BIT)目標中,通過-source參數調用不同的 TCL 腳本,并傳遞$(PRJ)$(DEFINES)等參數,實現了項目創建、綜合、實現等操作的自動化。

  2. 輔助目標設計

  • sim目標用于啟動 VIVADO 仿真,通過執行red_pitaya_vivado_sim.tcl腳本實現仿真環境的自動化配置。

  • clean目標用于清理項目生成的中間文件和結果文件,保持項目目錄整潔,避免舊文件對新構建過程的干擾。

執行make all命令,該 Makefile 會按照依賴關系依次執行項目構建、FPGA 比特流生成、FSBL 編譯、設備樹生成等操作,極大簡化了手動操作流程,充分展示了 Makefile 在復雜 FPGA 項目開發中的強大作用。

高級技巧與注意事項

變量與參數傳遞

在 Makefile 中使用變量可以提高代碼的可維護性和復用性。如上述 Red Pitaya 案例中定義的PROJECT_NAMETCL_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 項目開發提供有力支持。

后續將進一步擴展到TCL腳本。

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/95392.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/95392.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/95392.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[前端算法]排序算法

默認情況下&#xff0c;sort() 會將元素轉換為字符串&#xff0c;然后按照 Unicode 編碼的順序進行排序&#xff1a; const fruits [apple, banana, cherry, date]; fruits.sort(); console.log(fruits); // 輸出: ["apple", "banana", "cherry"…

C#標簽批量打印程序開發

C#標簽批量打印程序開發&#xff08;集成Bartender解決方案&#xff09;一、系統架構設計 1. 核心模塊劃分 public class LabelPrintingSystem {private IDataLoader _dataLoader; // 數據加載器private ITemplateEngine _templateEngine; // 模板引擎private IPrintControl…

ECC的原理、背景、工作機制和數學基礎

ECC的原理、背景、工作機制和數學基礎摘要&#xff1a;本文首先詳細介紹ECC&#xff08;Error-Correcting Code&#xff0c;糾錯碼&#xff09;的原理&#xff0c;包括背景、工作機制和數學基礎。然后&#xff0c;解釋ECC在SRAM&#xff08;Static Random-Access Memory&#x…

計算機網絡2-2:物理層下面的傳輸媒體

目錄 導引型傳輸媒體 同軸電纜 雙絞線 光纖 電力線 非導引型傳輸媒體 無線電波 微波 紅外線 可見光 無線電頻譜管理機構 導引型傳輸媒體 同軸電纜 雙絞線 光纖 光在光纖中傳播的基本原理 電力線 非導引型傳輸媒體 無線電波 微波 紅外線 可見光 LiFi(可見光通信) …

Dify 從入門到精通(第 32/100 篇):Dify 的日志分析與監控

Dify 從入門到精通&#xff08;第 32/100 篇&#xff09;&#xff1a;Dify 的日志分析與監控 Dify 入門到精通系列文章目錄 第一篇《Dify 究竟是什么&#xff1f;真能開啟低代碼 AI 應用開發的未來&#xff1f;》介紹了 Dify 的定位與優勢第二篇《Dify 的核心組件&#xff1a…

【IntelliJ IDEA】修改堆內存

idea卡頓&#xff0c;鼠標漂移修改idea文件打開 idea 安裝路徑&#xff0c;【bin】目錄下【idea64.exe.vmoptions】文件修改【-Xms】最小內存【-Xmx】最大內存-Xms2048m -Xmx9216midea更改內存設置工具欄幫助更改內存設置設置堆大小上限為 文件 設置的最大內存保存并重啟Leslie…

Docker與Docker Compose:容器世界的“單兵作戰”與“軍團指揮官”

在容器化技術的浪潮中&#xff0c;Docker和Docker Compose如同“雙子星”&#xff0c;一個專注于單兵作戰&#xff0c;一個擅長軍團指揮。它們看似相似&#xff0c;卻各司其職。對于開發者來說&#xff0c;理解它們的區別不僅能讓代碼部署事半功倍&#xff0c;更能避免踩坑。本…

進階向:Python編寫自動化郵件發送程序

Python編寫自動化郵件發送程序&#xff1a;從零開始詳解在數字化時代&#xff0c;自動化郵件發送功能已成為企業和個人提升工作效率的重要工具。據統計&#xff0c;全球每天發送的商業郵件超過30億封&#xff0c;其中約40%是通過自動化系統發送的。這種功能被廣泛應用于多種場景…

ChatGpt 5系列文章1——編碼與智能體

人工智能技術正在以驚人的速度發展&#xff0c;重新定義著開發人員的工作方式。2025年8月&#xff0c;OpenAI正式發布了面向開發人員的GPT-5 一、GPT-5的編碼能力突破 GPT-5在關鍵編碼基準測試中創造了行業新紀錄(SOTA)&#xff0c;在SWE-bench Verified測試中得分74.9%&…

力扣top100(day02-05)--二叉樹 02

102. 二叉樹的層序遍歷 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right)…

開疆智能Ethernet轉ModbusTCP網關連接發那科機器人與三菱PLC配置案例

本案例是三菱FX5U PLC通過ethernet/IP轉ModbusTCP網關對發那科機器人進行控制的配置案例。PLC端主要配置以太網端口設置在通信測試中&#xff0c;PLC作為主站&#xff0c;在PLC設置中選擇“以太網端口”非常關鍵&#xff0c;以確保通信測試的正常進行。1、首先&#xff0c;在PL…

VUE+SPRINGBOOT從0-1打造前后端-前后臺系統-系統首頁

在現代Web應用開發中&#xff0c;管理后臺是幾乎所有企業級應用不可或缺的部分。一個優秀的后臺首頁不僅需要提供清晰的信息展示&#xff0c;還需要具備良好的用戶體驗和視覺效果。本文將詳細介紹如何使用Vue.js框架配合Element UI組件庫和ECharts圖表庫&#xff0c;構建一個功…

第6節 torch.nn介紹

6.1 torch.nn.Module介紹 torch.nn.Module是 PyTorch 中構建神經網絡的基礎類&#xff0c;所有的神經網絡模塊都應該繼承這個類。它提供了一種便捷的方式來組織和管理網絡中的各個組件&#xff0c;包括層、參數等&#xff0c;同時還內置了許多用于模型訓練和推理的功能。 官網…

python自學筆記7 可視化初步

圖像的組成工具庫 Matplotlib&#xff1a;繪制靜態圖 Plotly: 可以繪制交互式圖片 圖像的繪制&#xff08;Matplotlib&#xff09; 創建圖形&#xff0c;軸對象 創造等差數列 # 包含后端點 arr np.linspace(0, 1, num11) # 不包含后端點 arr_no_endpoint np.linspace(0, 1, n…

GIS 常用的矢量與柵格分析工具

矢量處理工具作用典型應用緩沖區分析Buffer環境影響區域&#xff0c;空間鄰近度分析等&#xff0c;例如道路周圍一公里內的學校&#xff0c;噪音污染影響的范圍裁剪Clip例如使用A市圖層裁剪全國道路數據&#xff0c;獲取A市道路數據交集Intersect識別與LUCC、分區洪水區、基礎設…

http與https協議區別;vue3本地連接https地址接口報500

文章目錄問題解決方案一、問題原因分析二、解決方案詳解1. 保持當前配置&#xff08;推薦臨時方案&#xff09;2. 更安全的方案&#xff08;推薦&#xff09;3. 環境區分配置&#xff08;最佳實踐&#xff09;三、為什么開發環境不用配置&#xff1f;問題 問題&#xff1a;本地…

C語言——深入理解指針(三)

C語言——深入理解指針&#xff08;三&#xff09; 1.回調函數是什么&#xff1f; 首先我們來回顧一下函數的直接調用&#xff1a;而回調函數就是通過函數指針調用的函數。我們將函數的指針&#xff08;地址&#xff09;作為參數傳遞給另一個函數&#xff0c;當這個指針被用來調…

kettle 8.2 ETL項目【四、加載數據】

一、dim_store表結構,數據來源于業務表,且隨時間會有增加,屬于緩慢變化維(SCD)類型二 轉換步驟如下 詳細步驟如下

【測試報告】SoundWave(Java+Selenium+Jmeter自動化測試)

一、項目背景 隨著數字音樂內容的爆炸式增長&#xff0c;用戶對于便捷、高效的音樂管理與播放需求日益增強。傳統的本地音樂管理方式已無法滿足多設備同步、在線分享與個性化推薦等現代需求。為此&#xff0c;我們設計并開發了一款基于Spring Boot框架的SoundWave&#xff0c;旨…

C++ 類和對象詳解(1)

類和對象是 C 面向對象編程的核心概念&#xff0c;它們為代碼提供了更好的封裝性、可讀性和可維護性。本文將從類的定義開始&#xff0c;逐步講解訪問限定符、類域、實例化、對象大小計算、this 指針等關鍵知識&#xff0c;并對比 C 語言與 C 在實現數據結構時的差異&#xff0…