利用 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…