在Vivado下利用Tcl实现IP的高效管理

news2024/11/19 21:21:22

在Vivado下利用Tcl实现IP的高效管理https://cloud.tencent.com/developer/article/1736645
在Vivado下,有两种方式管理IP。一种是创建FPGA工程之后,在当前工程中选中IP Catalog,生成所需IP,这时相应的IP会被自动添加到当前工程中;另一种是利用Manage IP,创建独立的IP工程,缺省情况下,IP工程的名字为magaged_ip_project。在这个工程中生成所需要的IP,之后把IP添加到FPGA工程中。Xilinx推荐使用第二种方法,尤其是设计中调用的IP较多时或者采用团队设计时。Tcl作为脚本语言,在FPGA设计中被越来越广泛地使用。借助Tcl可以完成很多图形界面操作所不能完成的工作,从而,可提高设计效率和设计自动化程度。Vivado对Tcl具有很好的支持,专门设置了Tcl Shell(纯脚本模式)和Tcl Console(图形界面模式)用于Tcl脚本的输入和执行。本文介绍了如何利用Tcl脚本在Manage IP方式下实现对IP的高效管理。

Manage IP的特点:

(1)Vivado在Manage IP模式下只显示IP Catalog,便于直观地定制IP;

(2)IP工程目录独立于FPGA工程目录,可独立管理并便于IP复用;

(3)对IP采用OOC(Out-of-Context)的综合方式,生成相应的DCP文件,添加到FPGA工程中,无需再次综合;

与ISE Core Generator的不同之处:

  1. ISE Core Generator不同IP的生成文件会在同一目录下,而Vivado下每个IP有独立的文件夹,该文件夹下包含了IP所有相关文件,这为IP复用提供了便利;
  2. ISE Core Generator生成的IP定制文件为.xco,Vivado生成IP的定制文件为.xci;
  3. ISE Core Generator生成的网表文件为.ngc,Vivado生成的网表文件为.dcp,DCP不仅包含网表文件还包含约束文件;
  4. ISE Core Generator不支持Tcl脚本,Vivado则支持Tcl脚本;

Vivado下IP生成文件:

(1)用于综合的RTL文件和约束文件;

(2)实例化模板文件;

(3)行为级仿真文件;

(4)综合后的网表文件DCP;

(5)用于第三方综合工具的Stub文件;

(6)例子工程;

生成文件是可以定制的,这可通过generate_target命令完成,同时,生成的文件也可以通过reset_target被清除掉,如Tcl脚本 1所示。

在这里插入图片描述
Vivado下每个对象都有自己的属性,这些属性可通过report_property显示。managed_ip_project的属性如图 1所示。图中绿色线条标记了该工程所在目录;红色方框MANAGED_IP属性值为1,表明该工程为IP工程;蓝色方框是我们创建或修改IP工程设置时最常用的一些属性。Tcl脚本 2中第1行语句用于显示IP工程属性,第2~4行语句用于设置仿真工具、目标语言和芯片型号。set_property命令的第一个参数为属性名,第二个参数为属性值,第三个参数为属性所属对象。

在这里插入图片描述
采用Vivado Manage IP创建IP工程后,可能会遇到以下情况:(1)软件版本升级,例如Vivado由2013.4升级至2014.2;(2)芯片型号改变,例如芯片型号由XC7K325TFFG676-2变为XC7K160TFFG676-2;(3)A项目中的一些IP在B项目中也被使用,且这些IP参数配置完全相同。上述三种情况均可通过Tcl命令完成。

第一种情况:软件版本升级

假如用Vivado 2013.4创建的IP工程,当软件版本升级至2014.2时,需要将IP重新生成。此时,若用Vivado 2014.2打开该工程会弹出如图 2所示的对话框。选择图中蓝色方框标记的选项打开工程,通过report_ip_status命令显示当前IP状况,如图 3所示。

在这里插入图片描述
图 3中蓝色方框显示了IP处于锁定状态,可通过get_property查看IS_LOCKED属性确定;红色方框显示了IP当前版本号和建议升级到的新版本号。相应的Tcl脚本如Tcl脚本 3所示。对处于锁定状态的IP可选择升级,这可通过Tcl脚本 4完成指定IP的升级。Tcl脚本 4可内嵌到Vivado中作为用户常用命令。

在这里插入图片描述

第二种情况:芯片型号改变

若芯片型号改变,首先要对旧型号芯片对应的工程做备份处理,这可通过archive_project命令完成;然后修改芯片型号。相应的Tcl脚本如Tcl脚本 5所示。完成这些操作之后,会发现IP处于锁定状态,此时可通过Tcl脚本 4对IP升级。

在这里插入图片描述

第三种情况:A项目中的一些IP在B项目中也被使用,且这些IP参数配置完全相同

在这种情况下,可将A项目中的IP导入到B项目的IP工程中,这可通过import_ip命令完成,如Tcl脚本 6所示。Import_ip的第一个参数为原始IP所在目录,第二个参数为该IP的新名字,缺省情况下与原始IP名一致。导入之后,可通过Tcl脚本 4重新生成IP。

如前所述,Vivado下生成的IP都有独立的文件目录,在添加IP到Vivado FPGA工程中时,若采用图形界面方式就需要一个一个地浏览到IP所在文件目录,找到.xci文件,然后添加到工程中,如果调用的IP较多,显然这种方式不够高效。此时可用Tcl脚本 7所示的Tcl命令找到所有IP相关文件,文件类型可以是xci或dcp。该命令会返回完整的文件路径,如Tcl脚本 6中的文件路径。然后通过add_files命令将其添加到当前工程中。

在这里插入图片描述
此外,有些IP会有例子工程,这些例子工程带有完整的测试激励,可对IP进行仿真,以理解IP的输入/输出时序,也可单独生成bit文件。可通过open_example_project命令打开例子工程,如Tcl脚本 8所示。

与ISE Core Generator相比,Vivado Manage IP对IP的管理更加便捷,加之Vivado对Tcl脚本的支持,利用Tcl脚本可实现对IP更高效的管理,进一步加强FPGA设计自动化的程度。

参考文献:

[1] Xilinx. Ug896 (V2014.1) Designing with IP.

[2] Xilinx. Ug835 (V2014.2) Vivado Design Suite Tcl Command Reference Guide

[3] http://m.elecfans.com/article/581796.html


节省编译时间系列 5:为多个 Vivado 工程复用远程 IP 高速缓存

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1375507.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FineBI实战项目一(18):每小时上架商品个数分析开发

点击新建组件,创建每小时上架商品个数组件。 选择线图,拖拽cnt(总数)到纵轴,拖拽hourStr到横轴。 修改横轴和纵轴的文字。 调节连线样式。 添加组件到仪表板。

vue知识-05

聊天室案例(django接口) # chat.hetm<<script src"/static/axios.js"></script><script src"/static/vue.js"></script><body> <div id"app"><h1>聊天室</h1><button click"handleS…

【无标题】用好Java 8的日期时间类

在 Java 8 之前&#xff0c;我们处理日期时间需求时&#xff0c;使用 Date、Calender 和 SimpleDateFormat&#xff0c;来声明时间戳、使用日历处理日期和格式化解析日期时间。但是&#xff0c;这些类的 API 的缺点比较明显&#xff0c;比如可读性差、易用性差、使用起来冗余繁…

竞赛保研 基于深度学习的行人重识别(person reid)

文章目录 0 前言1 技术背景2 技术介绍3 重识别技术实现3.1 数据集3.2 Person REID3.2.1 算法原理3.2.2 算法流程图 4 实现效果5 部分代码6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的行人重识别 该项目较为新颖&#xff0c;适合…

SpringBoot中使用LocalDateTime踩坑记录

文章目录 前言一、为什么推荐使用java.time包的LocalDateTime而不是java.util的Date&#xff1f;二、使用LocalDateTime和LocalDate时遇到了哪些坑&#xff1f;2.1 Redis序列化报错2.1.1 问题现象2.1.2 问题分析2.1.3 解决方案 2.2 LocalDateTime和LocalDate类型的属性返回给前…

Redis主从复制、哨兵及集群

主从复制 主从复制是高可用Redis的基础&#xff0c;哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份&#xff0c;以及对于读操作的负载均衡和简单的故障恢复。缺陷&#xff1a;故障恢复无法自动化&#xff1b;写操作无法负载均衡&#xff1b;存…

关于httpClient 使用的注意事项

关于httpClient 使用的注意事项 用例 PoolingHttpClientConnectionManager connectionManager new PoolingHttpClientConnectionManager();// 最大连接数-不设置默认20connectionManager.setMaxTotal(200);// 每个路由最大连接数-不设置默认2connectionManager.setDefaultMax…

nginx本地打开vue打包项目

1&#xff0c;首先下载nginx包&#xff0c;然后修改下载的包中的nginx.conf配置文件 其中location后面接的是要增加的域名字段(perbank8)&#xff0c;配置项 index index.html 代表入口文件是index.html 这个在vue项目中也要在nginx配置文件中也要配置同样的路径 在vue项目里…

Fluids —— Up-ressing simulations

目录 Low-res setup Hi-res setup 想象需要一个波浪特写镜头&#xff0c;撞击岩石并产生飞溅&#xff1b;通常会模拟大部分周围海洋&#xff0c;以获得波浪运动&#xff1b;最后&#xff0c;可能只需要模拟tank的20%左右&#xff1b; 通常工作流是测试低粒子数的模拟&#xf…

【一文详解】知识分享:(C#开发学习快速入门)

面向对象(OOP) c语言是面向过程。 c是面向过程面向对象。 c#是纯粹的面向对象: 核心思想是以人的思维习惯来分析和解决问题。万物皆对象。 面向对象开发步骤: 分析对象 特征行为关系(对象关系/类关系) 写代码: 特征–>成员变量 方法–>成员方法 实例化–具体对象 …

JS中垃圾数据是如何自动回收的

JS中垃圾数据是如何自动回收的 背景垃圾回收机制调用栈中的数据回收堆空间中数据回收垃圾回收器的工作流程副垃圾回收器主垃圾回收器 全停顿 背景 在JS栈和堆&#xff1a;数据是如何存储的一文中提到了 JavaScript 中的数据是如何存储的&#xff0c;并通过示例代码分析了原始数…

基于Java SSM框架实现雁门关风景区宣传网站项目【项目源码】

基于java的SSM框架实现雁门关风景区宣传网站演示 Java技术 Java技术它是一个容易让人学会和使用的一门服务器语言。它在编程的过程当中只需要很少的知识就能建立起一个真正的交互站点。对于这个教程来说它并不需要你完全去了解这种语言&#xff0c;只要能快速融入web站点就可以…

盘点2023年我用过的AI大模型,国内也能免费用

大家好&#xff0c;这里是程序员晚枫&#xff0c;今天给大家分享3个我用过的AI工具。 国外的工具这里就不推荐了&#xff0c;推荐了你也不能用。今天只推荐几个国内也能用的。 这些工具的下载链接&#xff0c;我都整理好了&#xff0c;需要的朋友可以在评论区告诉我哟~ 百度…

tailwindcss真的好用吗?

写在前面 今天写一篇关于tailwindcss 的文章&#xff0c;其实这个css技术已经出现很久了&#xff0c;在一些大型项目很多人也已经在用了&#xff0c;虽然不是说必须要会吧&#xff0c;但是没听说过肯定是不行的&#xff0c;他的操作逻辑应该是和unocss差不多&#xff0c;但是今…

MySQL:DML数据操作语言(添加,删除,修改),DDL数据查询语言(条件查询,分组查询,排序查询,分页查询)

目录 1.DML&#xff08;数据操作语言&#xff09;1.添加数据2.修改数据3.删除数据 2.DQL(数据查询语言)1.DQL-语法2.基本查询3.条件查询(WHERE)1.语法&#xff1a;2.条件&#xff1a;3.案例: 4.聚合函数1.介绍2.常见聚合函数3.语法4.案例 5.分组查询&#xff08;GROUP BY&#…

VS2019 C++安装最基本的组件

我是C初学者&#xff0c; 我只想用最基本的C编写程序&#xff0c;不需要MFC。 所以下载了一个离线安装版本放在这里&#xff0c;我自己用的现成的文件。 使用以下命令行创建&#xff1a; 1.C基本组件 不含MFC, 带ATL库 共(1.96G) vs2019.exe --layout d:\vs2019 --lang zh-CN …

C#用string.Replace方法批量替换某一类字符串

目录 一、关于字符串及其操作常识 二、String.Replace 方法 1.重载 2.Replace(Char, Char) 3.Replace(String, String) &#xff08;1&#xff09;实例&#xff1a; &#xff08;2&#xff09;生成结果&#xff1a; 4.Replace(String, String, StringComparison) 5.…

matlab绘图修改坐标轴数字字体大小及坐标轴自定义间隔设置

一、背景 在matlab使用plot函数绘图后&#xff0c;生成的图片坐标轴数字字体大小及间隔可能并不符合我们的要求&#xff0c;因此需要自定义修改&#xff0c;具体方法如下 二、修改坐标轴数字字体大小 只需添加以下命令即可&#xff1a; set(gca,FontName,Times New Roman,F…

DAPP和APP的区别在哪?

随着科技的飞速发展&#xff0c;我们每天都在与各种应用程序打交道。然而&#xff0c;你是否真正了解DAPP和APP之间的区别呢&#xff1f;本文将为你揭示这两者的核心差异&#xff0c;让你在自媒体平台上脱颖而出。 一、定义与起源 APP&#xff0c;即应用程序&#xff0c;通常指…

C++并发编程实战第2版笔记

文章目录 p19 某个线程只可以join()一次p22 只有当joinable()返回true时才能调用detach()P21 在std::thread对象析构前&#xff0c;必须明确是等待还是分离线程P25 移动语义P25 将类的成员函数设定为线程函数p41 std::mutex和类模板std::lock_guard<> p19 某个线程只可以…