当前位置: 首页 > news >正文

新手入门Makefile:FPGA项目实战教程(二)

新手入门 Makefile:FPGA 项目实战教程(二)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


系列文章目录

1、VMware Workstation Pro安装指南:详细步骤与配置选项说明
2、VMware 下 Ubuntu 操作系统下载与安装指南
3、基于 Ubuntu 的 Linux 系统中 Vivado 2020.1 下载安装教程
4、利用 Makefile 高效启动 VIVADO 软件:深入解析与实践
5、新手入门 Makefile:FPGA 项目实战教程(一)

引言

在上一篇5、新手入门 Makefile:FPGA 项目实战教程(一)文章中,介绍了大概的项目结构和基础知识内容,接下来这一章我们将结合实际的工程。


文章目录

  • 新手入门 Makefile:FPGA 项目实战教程(二)
  • 系列文章目录
    • 引言
    • 四、Makefile 在 FPGA 项目中的基本应用
      • 4.1 简单的 FPGA 项目 Makefile 示例
      • 4.2 Tcl 脚本在 Vivado 中的作用
        • 4.2.1 项目管理命令
        • 4.2.2 文件管理命令
        • 4.2.3 综合命令
        • 4.2.4 实现命令
      • 4.3 完整的 Tcl 脚本示例
      • 4.3 执行 Makefile 命令
      • 4.4 并行执行和性能优化
    • 未完待续。。。。


四、Makefile 在 FPGA 项目中的基本应用

4.1 简单的 FPGA 项目 Makefile 示例

下面是一个简单的 Makefile 示例,用于编译一个 LED 闪烁的 FPGA 项目:

# 定义项目参数
PROJECT_NAME = led_blink
FPGA_PART = xc7a100tfgg484-2
SRC_DIR = ./src/rtl
CONSTRAINTS_DIR = ./src/constraints
TCL_SCRIPT = ./scripts/build_project.tcl
OUTPUT_DIR = ./output# 默认目标,执行所有步骤
all: create_project add_files synth impl bitstream# 创建Vivado项目
create_project:@echo "Creating project..."vivado $(VIVADO_OPTS) -source $(TCL_SCRIPT) -tclargs create_project $(PROJECT_NAME) $(FPGA_PART)# 添加源文件和约束文件
add_files:@echo "Adding files..."vivado $(VIVADO_OPTS) -source $(TCL_SCRIPT) -tclargs add_files $(SRC_DIR) $(CONSTRAINTS_DIR)# 综合设计
synth:@echo "Synthesizing design..."vivado $(VIVADO_OPTS) -source $(TCL_SCRIPT) -tclargs synth# 实现设计
impl:@echo "Implementing design..."vivado $(VIVADO_OPTS) -source $(TCL_SCRIPT) -tclargs impl# 生成比特流
bitstream:@echo "Generating bitstream..."vivado $(VIVADO_OPTS) -source $(TCL_SCRIPT) -tclargs bitstream# 清理生成的文件
clean:@echo "Cleaning project..."rm -rf $(PROJECT_NAME).xprrm -rf $(OUTPUT_DIR)rm -rf reports

这个 Makefile 定义了几个基本目标:

  • all:执行所有步骤,从创建项目到生成比特流

  • create_project:创建新的 Vivado 项目

  • add_files:向项目中添加源文件和约束文件

  • synth:综合设计

  • impl:实现设计(包括布局布线)

  • bitstream:生成比特流文件

  • clean:清理生成的文件和目录

这个 Makefile 定义了从项目创建到比特流生成的完整流程,每个步骤都对应一个独立的目标,你可以单独执行其中的任何一个步骤。

4.2 Tcl 脚本在 Vivado 中的作用

Tcl(Tool Command Language)是 Vivado 中使用的脚本语言,用于自动化各种设计流程。通过编写 Tcl 脚本,可以实现从项目创建到比特流生成的全流程自动化(58)。

Vivado 提供了两种执行 Tcl 脚本的方式:

  1. 交互式模式:在 Vivado GUI 的 Tcl 控制台中逐行输入命令。

  2. 批处理模式:通过命令行执行完整的 Tcl 脚本。

在 Makefile 中,我们主要使用批处理模式来执行 Tcl 脚本,以实现完全自动化的构建过程(59)。

以下是一些常用的 Vivado Tcl 命令,用于自动化设计流程:

4.2.1 项目管理命令
# 创建新项目
create_project -force $project_name $project_dir -part $part# 打开现有项目
open_project $project_path/$project_name.xpr# 保存项目
save_project# 关闭项目
close_project
4.2.2 文件管理命令
# 添加单个Verilog源文件
add_files -fileset sources_1 [list $src_file]# 递归添加目录下的所有文件
add_files -fileset sources_1 -recursive $src_dir# 添加约束文件
add_files -fileset constrs_1 $xdc_file# 设置顶层模块
set_property top $top_module [current_fileset]
4.2.3 综合命令
\# 综合设计synth\_design -top \$top\_module -part \$part\# 查看综合结果open\_run synth\_1report\_utilization -hierarchy -file \$report\_dir/utilization\_report.rpt
4.2.4 实现命令
# 优化设计
opt_design# 布局
place_design# 布线
route_design# 生成比特流
write_bitstream -file $output_dir/$project_name.bit

4.3 完整的 Tcl 脚本示例

下面是一个完整的 Tcl 脚本示例,用于实现从项目创建到比特流生成的全流程:

# 解析命令行参数
set args [argv]
set command [lindex $args 0]
set project_path [lindex $args 1]
set part [lindex $args 2]
set src_dir [lindex $args 3]
set constraints_dir [lindex $args 4]
set ip_dir [lindex $args 5]switch -- $command {"create_project" {# 创建项目create_project -force my_project $project_path -part $partset_property target_language Verilog [current_project]}"add_files" {# 添加源文件add_files -fileset sources_1 -recursive $src_diradd_files -fileset constrs_1 -recursive $constraints_diradd_files -fileset sources_1 -recursive $ip_dir# 设置顶层模块set_property top top_module [current_fileset]}"synth" {# 综合设计synth_design -top top_module -part $partreport_utilization -file $project_path/reports/utilization.rpt}"impl" {# 实现设计opt_designplace_designroute_designreport_timing_summary -file $project_path/reports/timing.rpt}"bitstream" {# 生成比特流write_bitstream -file $project_path/output/my_project.bit}default {puts "Unknown command: $command"exit 1}
}# 保存项目
save_project

这个脚本可以通过命令行参数接受不同的命令,实现灵活的流程控制(58)。

4.3 执行 Makefile 命令

要执行 Makefile 中的不同目标,可以使用以下命令:

# 执行所有步骤(从项目创建到生成比特流)
make all# 仅创建项目
make create_project# 仅添加文件
make add_files# 仅综合设计
make synth# 仅实现设计
make impl# 仅生成比特流
make bitstream# 清理项目
make clean
  • 仅创建项目
    make create_project
    在这里插入图片描述
    在这里插入图片描述

  • 仅综合设计
    make synth
    在这里插入图片描述

  • 仅实现设计
    make impl
    在这里插入图片描述

  • 综合过程中资源的使用
    在这里插入图片描述

  • 运行过程中生成的日志报告:
    在这里插入图片描述

  • 时序报告:在这里插入图片描述

  • 资源占用率报告:
    在这里插入图片描述

这些命令将自动调用相应的 Tcl 脚本,实现全流程自动化。

4.4 并行执行和性能优化

为了加快综合和实现过程,可以使用 Vivado 的并行处理功能。在 Makefile 中,可以通过设置-jobs选项来指定使用的并行任务数:

# 综合设计(使用4个并行任务)
synth:@echo "Synthesizing design..."$(VIVADO) -mode batch -source $(TCL_SCRIPT) synth -jobs 4# 实现设计(使用8个并行任务)
impl:@echo "Implementing design..."$(VIVADO) -mode batch -source $(TCL_SCRIPT) impl -jobs 8

根据你的系统配置,可以适当调整并行任务数,以获得最佳性能(58)。

未完待续。。。。

在这里插入图片描述

http://www.xdnf.cn/news/1300843.html

相关文章:

  • 【CV 目标检测】②R-CNN模型
  • 【Redis】分布式系统的演化过程
  • MyBatis的基本用法和配置方式
  • Highcharts Dashboards | 打造企业级数据仪表板:从图表到数据驾驶舱
  • 全球电商业财一体化:让出海品牌实现“看得见的增长“
  • demo 通讯录 + 城市选择器 (字母索引左右联动 ListItemGroup+AlphabetIndexer)笔记
  • Nginx反向代理与缓存实现
  • 人工智能与社会治理:从工具到生态的范式重构
  • Kafka生产者——提高生产者吞吐量
  • 切换VSCODE 中的默认 shell
  • GitHub 上 Star 数量前 18 的开源 AI Agent 项目
  • 制造装配、仓储搬运、快递装卸皆适配!MinkTec 弯曲形变传感器助力,让人体工学改变劳动生活
  • Vue3从入门到精通: 4.5 数据持久化与同步策略深度解析
  • Elasticsearch 深分页问题
  • 计算图的力量:从 PyTorch 动态图到 TensorFlow 静态图的全景与实战
  • Nginx蜘蛛请求智能分流:精准识别爬虫并转发SEO渲染服务
  • 【Java EE进阶 --- SpringBoot】初识Spring(创建SpringBoot项目)
  • iceberg 底层存储HDFS与juiceFS的区别
  • nflsoi 8.14 题解
  • 集成电路学习:什么是Video Processing视频处理
  • 《量子雷达》第4章 量子雷达的检测与估计 预习2025.8.14
  • ATAM:基于场景的软件架构权衡分析法
  • 解剖HashMap的put <三> JDK1.8
  • Linux入门指南:基础开发工具---yum/apt
  • MacOS 系统计算机专业好用工具安装
  • P5967 [POI 2016] Korale 题解
  • Java 8 新特性介绍
  • 【Docker】安装kafka案例
  • 【深度学习】深度学习的四个核心步骤:从房价预测看机器学习本质
  • 《Leetcode》-面试题-hot100-动态规划