文章目录

    • Basics
    • 定制IP的参数
    • Enablement Expression
    • 封装IP时使用了绝对路径
    • 封装IP时设置Address Map Addr
    • 相关tcl
    • 修正警告
      • Bus Interface 'clk': ASSOCIATED_BUSIF bus parameter is missing.
      • rst识别成低有效复位
      • Bus Interface 'up_axi': FREQ_HZ bus parameter missing from AXI interface when interface is not associated to a clock.
    • 打开IP-XACT来管理IP
    • Package as a library core
    • 自定义IP包含xilinx ip时的选项
    • 自定义IP时设置logo
    • 封装IP时生成自定义总线接口
    • 使用vivado自定义总线接口
    • 在BD中添加RTL Module时使用自定义总线接口
    • 将旧版vivado IP添加到新版vivado IP仓库中
    • 将HDL源码(含网表文件)封为IP
    • 将MicroBlaze/MCS的bd文件(含elf)封装为IP
    • AR
      • AR66292 - Vivado IP Flows - Sub-core reference is not updated for migrated project even though the parent IP core was upgraded
      • AR75421 - Using Packaged IP library core and referencing as VHDL library
      • AR65277 封装IP时,设置动态端口
    • 其他
  • ttcl

Basics

  • Vivado IP 封装器可以自动 推断IP的 时钟和复位接口, 这样有助于在 IPI验证BD文件中验证封装IP的时钟、复位信号
  • 对于自定义的IP,可以在IP Catlog中出现多个版本
  • 可以在封装IP时,设置parameter的类型、范围;并提供启用表达式,实现一些定制功能

定制IP的参数

参数分为两类,一类显示在GUI界面中(可以由用户设置)可以在GUI界面中;另一类则不显示在GUI界面中(不能由用户设置,其参数值通常是由GUI 中显示的参数来确定的)。

  • 添加参数时,只能添加在自定义 GUI 中使用的参数
  • 删除参数后,IP则会使用相应参数的默认值

Enablement Expression

封装IP时使用了绝对路径

Is it possible in Vivado to package a custom IP with relative paths for all rtl


看这段描述是说,如果封装IP时引用了IP所在目录之外的文件,则这些引用文件会使用绝对路径。这时,在确保路径正确的情况下,手动修改component.xml中的绝对路径为相对路径即可。

封装IP时设置Address Map Addr

IP Packager “Addressing and Memory” customizations?

封装了一个IP,使用了AXI接口,因此需要进行地址映射的分配。进行了如下三种尝试,

case 1:封装IP时,base address设为0x10000000,此时在BD中两个IP自动分配的地址相同,修改它们的基地址时出错

case 2:封装IP时,base address设为0x10000000,此时在BD中两个IP自动分配的地址不同,但修改它们的基地址时出错

case 3:封装IP时,base address设为0,此时在BD中两个IP自动分配的地址不同,可以修改它们的基地址

相关tcl

help ipx::*

修正警告

Bus Interface ‘clk’: ASSOCIATED_BUSIF bus parameter is missing.

The IP Packager checks for the ASSOCIATED_BUSIF parameter for all clock interfaces.The reason for the warning is that IP Integrator works best with interfaces, and it was expected that user would typically be using AXI interfaces. If you do not have any bus interfaces in your design, you can safely ignore this warning.

IP Packager 会检查所有时钟接口的 ASSOCIATED_BUSIF 参数。发出警告的原因是 IP Integrator 最适用于接口,并且预计用户通常会使用 AXI 接口。 如果您的设计中没有任何总线接口,您可以放心地忽略此警告。

rst识别成低有效复位

For reset signals that end with n such as resetn and aresetn which implies an active-Low signal, the interface automatically sets the POLARITY parameter to active_Low. This parameter is used in the Vivado IP integrator to determine if the reset is properly connected when the block diagram is generated. For all other reset interfaces, the POLARITY parameter is not set, and is determined through the parameter propagation feature of IP integrator.

对于以 n 结尾的复位信号,例如 resetn 和 aresetn,这意味着低电平有效信号,接口会自动将 POLARITY 参数设置为 active_Low。 该参数用于 Vivado IP 集成器中,用于在生成框图时确定复位是否正确连接。 对于所有其他复位接口,不设置 POLARITY 参数,通过 IP 集成器的参数传播特性确定

Bus Interface ‘up_axi’: FREQ_HZ bus parameter missing from AXI interface when interface is not associated to a clock.

IP_Flow 19-3158 - FREQ_HZ bus parameter missing from AXI interface when interface is not associated to a clock


2018.2 Vivado IP Flows - Generate RTL kernel gives three parameter warnings related to an RTL kernel wizard IP block

打开IP-XACT来管理IP

Package as a library core

自定义IP包含xilinx ip时的选项


自定义IP时设置logo

添加Utility XIT/TTCL的group,并添加logo图片,将Type从image修改成logo

为方便计,将常用的tcl命令写成脚本,直接通过custom tcl命令执行,

封装IP时生成自定义总线接口

打开IP封装界面,选择需要封到总线里的端口,选择"Create Interface Definition",

此时,会弹出界面,来设置生成总线的存储位置,此处选择存放在封装IP的目录中,

生成总线的各个信号名称,是和端口名称一致的,可以直接使用,也可以重新修改,

如果总线的信号名称有修改,需要进行port的映射,如下

之后封装IP,并添加到IP路径中,会发现vivado能扫描到封装的IP以及相应的总线接口,在bd文件中添加IP后,会发现各个端口集成在总线接口中

使用vivado自定义总线接口

在BD中添加RTL Module时使用自定义总线接口

在封装IP自定义总线接口时,能看到生成了如下的xml文件,其中包含了总线接口的定义,

在VHDL文件中,使用attribute进行总线接口的映射,如下

library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;entity test_1 is
port (clk      : in  std_logic;data_0   : in  std_logic_vector(3 downto 0);data_1   : in  std_logic_vector(3 downto 0);data_2   : in  std_logic_vector(3 downto 0);data_3   : in  std_logic_vector(3 downto 0);ctrl_0   : out std_logic_vector(3 downto 0);ctrl_1   : out std_logic_vector(3 downto 0)
);
end test_1;architecture Behavioral of test_1 issignal data : unsigned(5 downto 0);attribute X_INTERFACE_INFO : string;attribute X_INTERFACE_INFO of data_0 : signal is "xilinx.com:user:DATA_CTRL_BUS:1.0 DATA_CTRL_BUS data_A";attribute X_INTERFACE_INFO of data_1 : signal is "xilinx.com:user:DATA_CTRL_BUS:1.0 DATA_CTRL_BUS data_B";attribute X_INTERFACE_INFO of data_2 : signal is "xilinx.com:user:DATA_CTRL_BUS:1.0 DATA_CTRL_BUS data_C";attribute X_INTERFACE_INFO of data_3 : signal is "xilinx.com:user:DATA_CTRL_BUS:1.0 DATA_CTRL_BUS data_D";attribute X_INTERFACE_INFO of ctrl_0 : signal is "xilinx.com:user:DATA_CTRL_BUS:1.0 DATA_CTRL_BUS ctrl_A";attribute X_INTERFACE_INFO of ctrl_1 : signal is "xilinx.com:user:DATA_CTRL_BUS:1.0 DATA_CTRL_BUS ctrl_B";beginprocess(clk)beginif rising_edge(clk) then    data   <= resize(unsigned(data_0),6) + resize(unsigned(data_1),6) + resize(unsigned(data_2),6) + resize(unsigned(data_3),6);ctrl_0 <= std_logic_vector(data(3 downto 0));ctrl_1 <= std_logic_vector(data(5 downto 2));end if;end process;
end Behavioral;
--------------------------------------------------------------------------
library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;
entity test_2 is
port (clk      : in  std_logic;data_0   : out std_logic_vector(3 downto 0);data_1   : out std_logic_vector(3 downto 0);data_2   : out std_logic_vector(3 downto 0);data_3   : out std_logic_vector(3 downto 0);ctrl_0   : in  std_logic_vector(3 downto 0);ctrl_1   : in  std_logic_vector(3 downto 0);dout     : out std_logic_vector(7 downto 0)
);
end test_2;architecture Behavioral of test_2 isattribute X_INTERFACE_INFO : string;attribute X_INTERFACE_INFO of data_0 : signal is "xilinx.com:user:DATA_CTRL_BUS:1.0 DATA_CTRL_BUS data_A";attribute X_INTERFACE_INFO of data_1 : signal is "xilinx.com:user:DATA_CTRL_BUS:1.0 DATA_CTRL_BUS data_B";attribute X_INTERFACE_INFO of data_2 : signal is "xilinx.com:user:DATA_CTRL_BUS:1.0 DATA_CTRL_BUS data_C";attribute X_INTERFACE_INFO of data_3 : signal is "xilinx.com:user:DATA_CTRL_BUS:1.0 DATA_CTRL_BUS data_D";attribute X_INTERFACE_INFO of ctrl_0 : signal is "xilinx.com:user:DATA_CTRL_BUS:1.0 DATA_CTRL_BUS ctrl_A";attribute X_INTERFACE_INFO of ctrl_1 : signal is "xilinx.com:user:DATA_CTRL_BUS:1.0 DATA_CTRL_BUS ctrl_B";beginprocess(clk)beginif rising_edge(clk) then    data_0 <= X"0";data_1 <= X"1";data_2 <= X"2";data_3 <= X"3";dout   <= ctrl_0 & ctrl_1;end if;end process;
end Behavioral;

在BD中使用add module添加RTL文件,效果如下,

将旧版vivado IP添加到新版vivado IP仓库中

在vivado的安装路径的IP文件夹下,其实存在多个版本的IP,但是通过IP Catlog使用IP时,却只能使用最新版本的IP;如果将旧版IP拷贝到别处,手动添加到IP仓库中后,则旧版IP可用,但vivado会提示同一IP出现两次,IP仓库中的IP会处于active状态。

这一发现提示我们,可用将旧版vivado的IP放到新版vivado的IP仓库中,这一的话,在使用新版本vivado打开旧版工程时,就不用升级IP了。

将HDL源码(含网表文件)封为IP

实测了一下,

  • 当网表文件为dcp时,不能封装IP
  • 当网表文件为edif时,能够封装IP
  • 如果一个HDL模块中例化了dcp或edif网表,则在BD文件中,不能通过Add RTL Module的方式加入该HDL模块

目前来看,如果想将网表封装在IP中,或者在BD文件中使用,则一个比较好的方式是,将网表通过write_verilog或write_vhdl的方式转换成HDL网表。

将MicroBlaze/MCS的bd文件(含elf)封装为IP

在工程中,将elf关联到综合、仿真中,然后在封装IP时选择封装BD设计即可。不过,有一点要注意,一般含MicroBlaz的BD,复位信号都是低有效,这个复位信号的有效电平最好不要修改。如果复位改为高有效,则单独使用BD文件时没什么问题,但如果使用封装的IP,则会发现复位依然是低电平有效。

AR

AR66292 - Vivado IP Flows - Sub-core reference is not updated for migrated project even though the parent IP core was upgraded

AR75421 - Using Packaged IP library core and referencing as VHDL library

AR65277 封装IP时,设置动态端口

其他

xilinx的一些IP,如axi_lite_ipif、axi_master_burst等,在IP Catlog中不显示,原因是在component.xml中,ishidden属性设置成了true,可以修改成false。

ttcl

TemplaTcl: a Tcl template engine

使用vivado封装IP相关推荐

  1. [IP_Flow 19-4964] n has core container option enabled. This is not supported for packag vivado封装IP报

    去掉划线处选项

  2. Vivado中RTL封装IP流程

    Vivado中RTL封装IP流程 前言 本文记录自己将RTL代码封装成IP的流程,以供之后查阅使用.最近一个月在做一个数据仲裁与转发的项目,已经完成功能仿真,准备将其封装成IP在Block Desig ...

  3. VIVADO 自定义封装ip核(超详细)

    版本:vivado 2018.3 vivado 自定义封装ip核,可以将ip核封装成带AXI总线,也可将ip核封装成不带AXI总线. 本次设计介绍,如何将当前工程封装成ip核(不带AXI总线) 目录 ...

  4. 弟中弟级,基于Vivado的IP核封装以及仿真调用,FPGA入门小玩

    弟中弟级,基于Vivado的IP核封装以及仿真调用,FPGA入门小玩 IP核:知识产权核,指某一方提供的.形式为逻辑单元的可重用模块.IP核通常已经通过了设计验证,设计人员以IP核为基础进行设计,可以 ...

  5. 基于vivado DDS ip核的DDS信号发生器(可调频调相)

    基于Vivado DDS ip核的DDS信号发生器: 在Vivado软件中调出DDS ip核进行设置,很多参数可以参考xilinx官方手册,比较重要的是System Clock系统时钟和Phase W ...

  6. Vivado中IP核生成文件

    正像我之前所说的,较XPS的IP核而言,Vivado IP核在创建.打包.使用等各方面都更加简单便捷,同样的Vivado IP核抛弃了以往复杂的IP核文件组织模式,仅使用一个component.xml ...

  7. cordic ip核 vivado_Xilinx Vivado CORDIC IP求解atan 反正切

    赛灵思官方提供了cordic(coordinate rotational digital computer) ip核实现直角坐标极坐标变化,三角函数的操作.我介绍下它进行反正切求解的使用: 新建个简单 ...

  8. 利用Vivado封装DCP文件基本流程

    1.1 利用Vivado封装DCP文件基本流程 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)利用Vivado封装DCP文件基本流程: 5)结束语. 1.1.2 本节引 ...

  9. Vivado FIFO IP核接口信号介绍

    1.1 Vivado FIFO IP核接口信号介绍 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)Vivado FIFO IP核接口信号介绍: 5)结束语. 1.1.2 ...

最新文章

  1. QT各种版本第三方下载地址
  2. 关于sendmail报错“did not issue MAIL/EXPN/VRFY/ETRN during connection to
  3. 1.gloox开发环境搭建
  4. WPF、WCF、WF打造Hello World程序
  5. python字典用法大全
  6. Python 日期计算:计算某日期前几天,后几天的日期,也可以计算小时,分钟之后的日期时间
  7. 服务器经过交换机传递文件丢失,H3C交换机bin文件丢失后补救方案
  8. Python实现温度转换
  9. 洛谷P2347 砝码称重 [2017年4月计划 动态规划01]
  10. 浅谈Web网站的架构演变过程
  11. Python Str字符串 字符串常用方法 定义 创建 拆分 成分判断 大小写调整 格式化 填充 替换 访问 查找
  12. poi操作word替换模板向指定位置添加图表
  13. 参考文献正确格式 如何直接得到
  14. Linux如何设置网络唤醒
  15. zephir-安装和初体验
  16. Android 阿里云仓库代理配置
  17. 小程序有哪些低成本获客手段——案例解析
  18. 多元时间序列分析 —— 因果检验
  19. PerfDog性能测试工具调研报告
  20. 如何快速查看unicode、gbk的编码内容

热门文章

  1. wamp虚拟主机配置
  2. 如何加速打开Axure分享的链接
  3. 真北鸡精:如何化被动为主动?
  4. 城域网条件下网络信息安全策略探讨
  5. 给出一个大于或等于3的正整数,判断它是不是一个素数,编写C语言程序
  6. java毕业生设计专利查询与发布系统设计与实现计算机源码+系统+mysql+调试部署+lw
  7. 织梦dedecms源码安装方法
  8. 吉他弹唱精通——4321进行
  9. 转:教大家如何用HBuilder将web项目打包成apk
  10. 6-18位字母和数字的混合组成的正则表达式的js