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

ZYNQ笔记(十七):IP核封装与接口定义

版本:Vivado2020.2(Vitis)

任务:将“HDMI彩条显示实验”(正点原子 ZYNQ FPGA 开发视频)中所实现的 RGB2DVI 模块封装成一个 IP 核。

目录

一、介绍

(1)IP核

(2)IP核接口

二、创建与封装 IP

(1)创建

(2)封装

(3)接口定义


一、介绍

(1)IP核

        IP核(Intellectual Property Core)是预设计、可复用的硬件功能模块(如FFT、DDR控制器、PCIe等),以封装形式(.xci或.xcix文件)集成到 Vivado设计中,简化开发流程。

  • 类型

    • 软核(Soft IP):用HDL描述,可综合到不同器件(如Vivado自带的AXI GPIO)。

    • 硬核(Hard IP):物理固化在芯片中(如UltraScale+的PCIe硬核)。

(2)IP核接口

        接口(Interface) 定义了IP核与外部系统的通信规则,包括信号类型、时序和协议(如AXI、APB、UART、自定义接口等);端口(Port) 则是接口在硬件上的具体实现,即实际的输入/输出引脚(如clkdatavalid等)。

        本次例程即封装一个带自定义接口的软IP核。

二、创建与封装 IP

        流程和之前的自定义AXI IP核有一定区别,是创建封装一个无 AXI 接口的 IP核,注意区分:ZYNQ笔记(六):自定义IP核-LED呼吸灯

(1)创建

(1.1)新建一个IP管理工程(或任意打开一个vivado工程),点击Tools — Create and Package New lP 创建与封装一个新IP核。

(1.2)选择打包到一个指定目录:(上面两个选项是打包当前工程和BD设计工程,因为我是在IP管理工程开始新建IP的,所以没有可用的设计工程可打包,所以不可选),IP核没用到AXI接口,不勾选创建AXI外设。

(1.3)源文件路径选择  DVI_TX/ip :

        DVI_TX 文件夹是提前建好了的,ip文件夹内的src用于存放设计源文件,我已经拷贝了所需要打包为IP的.v设计文件(之后再添加也是一样的);if 文件夹后面用于存放接口定义相关的文件。

(1.4)接下来是IP核的存放路径,就默认放在我的自定义IP文件夹目录下,命名为DVI_TX_ip:

(2)封装

(2.1) 检查设计源文件无误后,开始设置 IP 封装:将界面切换至 Package IP,如果关闭的话,可以通过 IP-XACT 界面下的 component.xml 重新打开。并根据需求修改IP信息:名称、版本、显示名、描述。

(2.2)第二栏兼容设置,选择IP支持芯片型号,点击 Family 一栏下的“+”图标,选择“Add Family Explicitly”这里勾选 “Artix7” 和 “zynq(zynq-7000)” ,因为源文件设计用到了Artix7的原语。

(2.3)在文件组(File Groups)中列出了 IP 核所使用到的源文件,如果修改了文件他不会显示 “绿色打勾” 的状态,点击界面上的“Merge Changes from Gile Groups Wizard”更新一下即可,如下图所示:

(2.4)在 Customization Parameters 栏中做同样操作进行更新,由于在 RGB2DVI 模块中没有定义 parameter 变量,因此在 Customization Parameters 页面工具没有识别 到任何变量,也看不到、并不会显示 “绿色打勾” 的状态。

(3)接口定义

(3.1)设置端口和接口:上面一步更新后可能会报错,是因为顶层模块的端口识别出错(顶层模块一开始是 serializer 10 to 1 是错的,是后来修改为DVI_transmitter_top的,这里没有更新过来),可以看到IP核的名字不是顶层模块 DVI_transmitter_top,识别到他的子模块 serializer 10 to 1去了。

        解决办法是将多出来的端口右键移除出接口即可(多出来的 reset、paralell_clk 端口是子模块里面的,不是顶层模块的):

        同时 tmds_clk_n 和 tmds_clk_p 这两个端口错误识别成了两个时钟接口,也需要将这两个接口移除,之后再次更新就没有警告报错了。

(3.2)将剩余的端口定义成四类端口,IP 核端口与接口界面如下图所示:其中复位接口已经由工具识别到复位信号 reset_n 后自动创建,而其他三个类型的接口需要手动添加。除此之外,tmds_oen 信号没有划分到 TMDS 接口中,而是作为 IP 核独立的端口。

        选中对应的端口右键“Add Bus interface”,设置接口定义、名称、模式、端口映射:

1.pclk接口定义选择已有的 clock_rtl 、同时命名设置模式、完成端口映射(pclk_x5同理)

2.video_in接口定义选择已有的 vid_io_rtl 、同时命名设置模式、完成端口映射

3. tmds 接口需要自定义,因为 Vivado 的 IP 库中并没有这个 TMDS 的接口定义,就自己创建一个,在当前工程中的菜单栏点击“Tools”,然后选择“Create Interface Definition”,选择创建一个新的接口定义、命名为“MY_TMDS”,在弹出来的界面点击加号添加端口定义:

都是差分信号,p和n的参数设置都是一样的,最后的端口定义如图所示,点击Save进行保存。接着再回到封装向导界面对进行tmds的端口进行接口定义即可:

最后端口接口如图所示,到此封装结束,点击最后一栏,点击“打包IP”,完成封装。

GUI视图如图所示:

三、使用 IP

        设计工程需要使用IP核时,需要添加封装IP的保存路径,这样在IP目录才找到,同时确保芯片型号核IP需要兼容。

相关文章:

  • Java抽象类与接口详解
  • 关于string类的构造函数
  • 基于 jQuery 实现灵活可配置的输入框验证功能
  • 效整理文件信息!一键生成文件夹目录的工具
  • 简单理解MCP:AI如何使用工具
  • 开元类双端互动组件部署实战全流程教程(第1部分:环境与搭建)
  • 网络:cookie和session
  • 使用汇率查询API帮你实时查询汇率,促进货币交流
  • GPU性能加速的隐藏魔法:Dual-Issue Warp Schedule全解析
  • 游戏开发的TypeScript(5)TypeScript的类型转换
  • ciscn_2019_c_1
  • 2025 年 408 真题及答案
  • wordperss AI插件:AI图文+视频+长尾关键词自动生成,已内置deepseek、kimi全模型,支持简单一键接入更多自定义API
  • 数据集-目标检测系列- 牙刷 检测数据集 toothbrush >> DataBall
  • Cadence高速系统设计流程及工具使用
  • WidowX-250s 机械臂的简单数字孪生案例
  • 2025.5.4总结
  • 【信息系统项目管理师-论文真题】2007下半年论文详解(包括解题思路和写作要点)
  • 【信息系统项目管理师-论文真题】2008上半年论文详解(包括解题思路和写作要点)
  • TS 交叉类型
  • 世界羽联主席巴达玛:中国组织赛事的能力无与伦比
  • “穿越看洪武”,明太祖及其皇后像台北故宫博物院南院展出
  • 美权威人士批“特朗普对进口电影征关税”:将杀死美电影产业
  • 张求会谈陈寅恪的生前身后事
  • 大众、学术和政治三重框架下的“汉末之变”
  • 商务部:外贸优品中华行活动采购意向超167亿元