0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于Project模式Vivado GUI使用的配置文件自动化生成管理

454398 来源:Xilinx工程师 作者:卢昊 2020-11-13 12:48 次阅读

BY 卢昊

曾就职于上海贝尔(阿尔卡特朗讯),任FPGA工程师。目前从事FPGA加速计算方面的工作。有多年使用FPGA开发和应用的经历,熟悉Xilinx FPGA的体系结构。

Vivado相比与上一代开发工具ISE,一个巨大的提升就是全面支持Tcl脚本语言。由于全面支持Tcl脚本,所以可以利用Tcl来做一些好玩的事情。这里抛砖引玉,分享一点关于Vivado Tcl的使用小心得。

通常的工程中,直接生成的文件是bit文件(如果需要调试,可能还需要ltx文件)。而量产项目中,bit文件的内容通常需要放在flash中(除了早年的Spartan-3AN,Xilinx目前还没有在售的内置Flash的FPGA产品),这个时候常见的操作是将bit文件转为mcs文件或者bin文件,利用Vivado或者第三方工具烧入到Flash中。

在ISE时代,有个很好用的工具iMPACT来完成bit到mcs/bin文件的转换。到了Vivado时代,由于可以使用Tcl脚本,所以通常建议使用Tcl脚本来生成mcs/bin文件,具体命令是write_cfgmem。

不过每次生成bit文件之后需要手动输入命令来生成一次,这样的操作是比较麻烦的。这里提供一个方法来自动实现生成mcs/bin文件的功能,在此基础上还能完善更多的细节功能。

注意,如果使用non-project模式,或者即使是project模式也使用全脚本模式,那么则直接写入Tcl脚本即可。本文论述的方法是基于Project模式Vivado GUI使用的。

Vivado在每一步操作的设置中,有两个选项可以使用。

其中,tcl.pre和tcl.post是添加tcl文件的路径。tcl.pre表示这一步之前运行添加的tcl文件,tcl.post表示这一步之后运行添加的tcl文件。综合,实现和bit文件的生成这些步骤都有这两个设置可以使用。

所以基本思路就是,将需要的操作以Tcl脚本的形式写在Tcl文件中,然后添加到Bitstream Settings中的tcl.post中,这样生成bit文件之后,Vivado就会自动运行相关的Tcl文件来实现需要的功能。

1. 首先需要注意的问题是,Tcl文件运行路径。当Tcl文件设置到Bitstream Settings中的tcl.post中之后,在运行时,运行的路径就是最后生成bit文件所在路径,而与所添加的Tcl文件存放的路径无关。获取当前路径的Tcl命令:pwd。这一步通常是最令人困惑的,经常会因为路径不正确而无法正确的运行。

2. 知道路径之后,下一步是需要知道bit文件名,这里就有一个需要注意的地方。通常,在生成bit文件的路径下只会有一个bit文件,文件名是固定的,每次生成新的bit文件会覆盖掉旧文件。但是有时候会出现有多个bit文件的情况,例如:会将bit文件改名但是依然保存在当前路径下;用于备份、调试时临时放置了多个bit文件等。虽然这些情况并不被推荐,但是如果一旦存在,会导致Tcl脚本无法知道应该处理哪个文件。一个简单可用的方法是,遍历出所有的bit文件,并取修改时间最新的一个。由于刚生成bit文件之后就运行Tcl脚本,所以最新的文件自然就是刚刚生成的bit文件。

对应的Tcl脚本如下

set pro_path "[pwd]//"
set bit_file_list [glob -path "$pro_path" "*.bit"]
set file_time  0
foreach file $bit_file_list {
    set ftime [file mtime $file]
    if {$ftime  == 0} {
        puts "Error File!"
    }
    if { $ftime > $file_time} {
        set file_time $ftime 
        set file_name $file
    }
}

上述代码中,glob是用来查找bit文件的,file mtime是用来获取文件的更新时间,用来对比。第一行用pwd获取的路径是绝对路径, 后面加上“//”是用来作为一个目录路径,便于glob搜索并合成出新的文件名。为了防止出问题,如果文件的修改时间查到是0,则认为该文件不正确,会打印信息做提示。

3. 获取文件之后,就可以生成mcs文件了。此时bit文件的文件名以完整的绝对路径存储在file_name变量中,最简单的做法是直接将文件的后缀“.bit”替换为“.mcs”即可。

Tcl代码: set mcs_file "[file rootname $file_name].mcs" file rootname会获取除了文件后缀之外的文件名全部信息,后面加上”.mcs”即可使用。如果要生成bin文件,修改mcs为bin即可。

4. 生成mcs文件。这里使用write cfgmem命令。具体格式依据需要进行调整即可。最好加上-force来实现覆盖旧文件。下面时write cfgmem的一个使用范例。

write_cfgmem -format MCS -size 256 -interface BPIx16 -loadbit "up 0x0 $file_name" -file $mcs_file -force

需要注意的是,这条指令中flash的容量及支持的接口模式需要用户根据自己的开发板进行配置。另外,Zynq及Zynq Ultrascale+系列器件不是很适合用本文的方法来生成mcs文件。

到次,Tcl文件已经完成自动生成mcs文件的工作。每次生成好bit文件之后,就会在bit文件的路径下自动生成mcs文件。

不过,通常的项目开发,对配置文件的需求还不止于此。这种每次生成的bit文件都放在工程默认目录下的操作,并不利于文件/版本的管理,也不利于发送/提交。较为常见的做法是将bit文件作为原始文件,附上烧录Flash用的mcs文件、调试用的ltx文件等,一起转存到其他路径(例如公司的内部私有网盘)进行备份/分发,便于各个工程师按需所取。而这一步转存,也可以集成在这个Tcl文件中。

首先,上文已经点明,Tcl文件运行的路径和Tcl文件本身的路径无关,所以这个Tcl文件可以放在任意路径下。如果需要将bit文件和mcs文件放置于某个固定路径下保存,可以将该Tcl文件放于这个路径下。然后运行时,从Tcl脚本中获取Tcl文件所在路径即可。

Tcl文件获取文件本身路径的命令 set dest_path "[ file dirname [ info script ] ]"

这样Tcl文件的绝对路径就存储在dest_path这个变量中了,后续如果需要复制/移动文件,可以以这个路径作为基础进行相关修改。

复制文件的相关Tcl命令:

file copy -force $file_name "$dest_path/bitfile/"
file copy -force $mcs_file  "$dest_path/mcsfile/"

需要注意的是,目的路径需要确实存在,比如上面的bitfile子文件夹和mcsfile子文件夹。如果不存在的话,可以添加相关命令,生成子文件夹之后再进行复制。

编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • project
    +关注

    关注

    0

    文章

    35

    浏览量

    13184
  • Vivado
    +关注

    关注

    18

    文章

    787

    浏览量

    65090
收藏 人收藏

    评论

    相关推荐

    Vivado工程模式和非工程模式的比较

    01. Vivado的两种工作模式 Vivado设计有工程和非工程两种模式: 1. 工程模式: 工程模式
    的头像 发表于 11-09 17:15 3950次阅读
    <b class='flag-5'>Vivado</b>工程<b class='flag-5'>模式</b>和非工程<b class='flag-5'>模式</b>的比较

    FPGA的AS编程模式下的配置文件

    FPGA的AS编程模式下的配置文件的大小与所写的程序有关吗?配置文件的大小怎么看啊?
    发表于 03-31 11:03

    善用Vivado工程配置文件xpr快速工程创建

    善用Vivado工程配置文件xpr快速工程创建对于第一次新建工程,没啥捷径,建议大家规规矩矩的使用VivadoGUI创建工程。完成工程创建后,我们找到这个新建工程下的.xpr
    发表于 10-19 18:05

    VIVADO从此开始高亚军编著

    Non-Project模式下应用增量实现 / 873.4 实现后的设计分析 / 883.4.1 资源利用率分析 / 883.4.2 时序分析 / 883.5 生成配置文件 / 903
    发表于 10-21 18:24

    Zybo Board开发记录: 让 Vivado有Zybo Board的配置文件

    下载配置文件 我们可以透过 git 或是直接下载 Digilentinc 位于 GitHub 的 配置文件 ,这边采用 wget 进行下载。 coldnew@gentoo ~ $ wget https://github.com/Digilent/
    发表于 02-08 01:15 376次阅读

    Vivado调试模式下,如何保存波形配置文件

    什么办法把之前配置好的波形显示属性保存下来,重复利用? 上述案例是实际调试中经常会碰到的问题,回答是可以的。 方法如下: 打开file->Save Waveform Configuration As...菜单,保存修改好的波形配置文件
    发表于 02-08 08:38 1377次阅读
    在<b class='flag-5'>Vivado</b>调试<b class='flag-5'>模式</b>下,如何保存波形<b class='flag-5'>配置文件</b>?

    ICD配置文件的详细介绍和配置内容的详细概述

    配置文件配置文件是利用SCL语言描述变电站设备对象模型后生成文件,用于在不同厂商的配置工具之间交换配置
    的头像 发表于 06-02 11:16 1.7w次阅读
    ICD<b class='flag-5'>配置文件</b>的详细介绍和<b class='flag-5'>配置</b>内容的详细概述

    Vivado生成、固化烧录文件

    Vivado生成、固化烧录文件方法说明。
    发表于 04-21 11:08 49次下载

    关于Vivado non-project模式

    vivadoproject模式和non-project模式project
    的头像 发表于 10-17 10:09 2128次阅读

    用于工业自动化的IEC/IEEE 60802 TSN配置文件的单一测试计划

      Avnu 联盟、CC-Link 合作伙伴协会、ODVA、OPC 基金会和普罗菲布斯国际公司联手为用于工业自动化的 IEEE/IEC 60802 时间敏感网络 (TSN) 配置文件制定了单一的符合性测试计划。  
    的头像 发表于 10-19 11:00 852次阅读

    springboot的全局配置文件有几种

    Spring Boot是一种快速开发框架,其通过提供配置文件来实现对应用程序的配置。全局配置文件在Spring Boot中起着非常重要的作用,可以用于配置各种不同的属性,包括数据库连接
    的头像 发表于 12-03 15:28 460次阅读

    php的配置文件是什么

    中,配置文件的名称默认为php.ini。该文件通常位于PHP安装目录下的conf文件夹中。当PHP解释器启动时,会自动加载php.ini文件
    的头像 发表于 12-04 15:55 770次阅读

    oracle配置文件类型关联

    Oracle是一种业界领先的关系型数据库管理系统,它在大型企业中被广泛使用。Oracle的配置文件对于数据库的稳定运行和性能优化至关重要。在这篇文章中,我们将详细讨论Oracle的一些重要配置文件
    的头像 发表于 12-06 10:17 215次阅读

    labview的opc生成配置文件

    的数据交互和通信。在 LabVIEW 中生成 OPC 配置文件有助于实现与其他设备的数据传输和共享,本文将详细介绍如何生成 OPC 配置文件。 首先,在 LabVIEW 中
    的头像 发表于 12-26 17:57 553次阅读

    labview生成exe文件如何配置文件

    可执行文件之前,您需要确保正确配置文件,以便应用程序能够在不同计算机上正确运行。 下面是一个详尽、详实、细致的步骤指南,告诉您如何配置LabVIEW生成的可执行
    的头像 发表于 12-27 16:28 589次阅读