当前位置: 首页 > 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.dtcms.com/a/333161.html

相关文章:

  • 达梦数据库使用控制台disql执行脚本
  • 【uni-app】根据角色/身份切换显示不同的 自定义 tabbar
  • 用Qt自带工具windeployqt快速打包程序
  • python自学笔记9 Seaborn可视化
  • ​​金仓数据库KingbaseES V9R1C10安装教程 - Windows版详细指南​
  • AXI4-Stream Switch IP核的用法
  • PyQt6实例_50个流通领域重要生产资料市场价格查看工具
  • Web 安全之 Cookie Bomb 攻击详解
  • Mac(一)常用的快捷键整理
  • 学习寻找自己感兴趣的事情--心理学入门的书籍
  • 「iOS」————UITableView性能优化
  • SpatialVLM和SpatialRGPT论文解读
  • OpenTelemetry WebSocket 监控终极方案:打通最后一公里
  • 【完整源码+数据集+部署教程】小鼠行为识别系统源码和数据集:改进yolo11-RFAConv
  • 区块链技术原理(11)-以太坊交易
  • 数据结构:N个节点的二叉树有多少种(Number of Binary Trees Using N Nodes)
  • Nacos-5--Nacos2.x版本的通信原理
  • 什么是KVM切换器?详解KVM切换器
  • 电子电气架构 --- 线束设计一些事宜
  • 电子电气架构 --- 探索软件定义汽车(SDV)的技术革新
  • 硬件实现webrtc的编解码
  • 【DDIA】第三部分:衍生数据
  • 《Effective Java》第1条:用静态工厂方法代替构造器
  • 扩展卡尔曼滤波EKF、自适应扩展卡尔曼滤波AEKF、HIF/H∞、粒子滤波PF、卡尔曼粒子滤波EKPF在BJDST动态工况下的SOC估计效果
  • TDengine IDMP 高级功能(2. 事件模板)
  • Stability AI技术浅析(二):LDM
  • 【国内电子数据取证厂商龙信科技】如何识别与查杀木马程序
  • 音视频面试题集锦第 23 期
  • 应急救援智能接处警系统——科技赋能应急,筑牢安全防线
  • Day60--图论--94. 城市间货物运输 I(卡码网),95. 城市间货物运输 II(卡码网),96. 城市间货物运输 III(卡码网)