当前位置:   article > 正文

源码修改可以连接所有ip_【正点原子FPGA连载】第十章IP封装与接口定义实验--摘自达芬奇之Microblaze 开发指南...

hdmi vivado的使用ip

1)实验平台:正点原子达芬奇FPGA开发板

2) 摘自【正点原子】达芬奇之Microblaze 开发指南

3)购买链接:https://detail.tmall.com/item.htm?id=624335496505

4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/fpga/zdyz_dafenqi.html

5) 正点原子官方B站:https://space.bilibili.com/394620890

6)对正点原子FPGA感兴趣的同学可以加群讨论:905624739

第十章IP封装与接口定义实验

在前面的实验中,我们通过调用各种功能的IP核,可以快速地搭建Block Design。除了调用Vivado IP库中的IP核,我们还可以创建或封装自己的IP核。在本章我们将学习如何把HDL实现的功能模块封装成IP核,以及如何定义新的接口类型。
本章包括以下几个部分:
1010.1 简介
10.2 实验任务
10.3 硬件设计
10.4 软件设计
10.5 下载验证

10.1简介

Vivado开发工具集成了大量Xilinx官方IP核以及第三方厂商提供的IP核,如图 10.1.1所示。这些IP核可以实现不同类型的功能,通过调用IP核可以大大加速我们的设计流程。我们也可以创建或封装自己的IP核,并将之添加到Vivado的IP库中,以方便模块的重复调用,或者在团队开发过程中进行IP的共用。

f6edfacb9cf405c96607cc0b45aead01.png

图 10.1.1 Vivado IP核目录

在搭建Block Design的过程中,我们通过连线将各IP核相同类型的接口连接起来。IP核通过接口与外部模块进行信号传递,在Vivado的IP库中包含各种不同类型的接口定义,如图 10.1.2所示:

c2acee97ae6ca82b18afbca9422180d3.png

图 10.1.2 Vivado接口目录

IP核的接口(Interfaces)由一个或者多个端口(Ports)组成,不同类型的信号需要通过不同类型的接口进行传递。需要注意的是,这里的“信号”可以由一根信号线传递,如时钟信号,此时时钟接口仅包含一个端口。有的信号则需要通过多根信号线进行传递,比如视频信号,它包含像素数据、行同步信号和场同步信号等,那么视频接口就由多个端口组成,各个端口分别由独立的信号线连接。

例如,图 10.1.3是AXI GPIO IP核的模块框图,从图中可以看出该IP核有四个接口。其中由两个红色箭头指示的加号表示这两个接口由多个端口组成,另外两个接口则只包含一个端口。

82215e895a440ecef4e7007832c1b3e7.png

图 10.1.3 AXI GPIO IP核

点击上图中红色箭头所指示的加号可以将该接口展开,如下图所示:

e83671be81c5cf238f08e4358d39ebe8.png

图 10.1.4 端口

从图 10.1.4中可以看出,S_AXI接口共包含17个端口,端口名均以“s_axi_”开头。GPIO接口共包含3个端口,端口名均以“gpio_io_”开头。

在创建自定义IP核的过程中,为了方便IP核之间的信号连接,我们可以把模块中同类性质或者属于同一组信号的多个端口定义成一个接口。如果在Vivado的IP库中找不到所需要的接口类型,我们也可以重新创建一个新的接口定义。

10.2实验任务

本章的实验任务是将《达芬奇之FPGA开发指南》中“HDMI彩条显示实验”的部分代码文件修改后封装成一个IP核。

10.3硬件设计

由于本实验只是利用现有代码文件封装IP核,所以没有涉及硬件系统的设计,IP核封装完成后可在后续的工程设计中直接调用该IP核来搭建硬件系统。

10.4软件设计

(1)创建IP目录

首先我们新建一个文件夹HDMI_COLORBAR_TOP,HDMI_COLORBAR_TOP就是我们要封装的IP核所在位置。这个目录可以与平时创建Vivado工程的路径一致,也可以选择其他路径,但是要求路径名只能由英文字母、数字和下划线组成,不能包含中文、空格或者特殊字符。

接下来,在HDMI_COLORBAR_TOP文件夹中另外新建两个文件夹:ip和if。其中ip用于存放封装的IP核,if用于存放我们定义的接口(if是interface的缩写)。创建完成后如下图所示:

1ee9734a8dcf7b2f223ad26d5d82ae7b.png

图 10.4.1 IP核与接口文件目录

接着在ip文件夹中新建一个名为“src”的文件夹,并将《达芬奇之FPGA开发指南》的“HDMI彩条显示实验”中6个源文件拷贝到src文件夹中,拷贝完成后如下图所示:

8ab5f21095ca49627383b0f8295615e2.png

图 10.4.2 IP封装使用的源文件

为了方便大家能够快速地找到这几个源文件,源文件所在位置截图如下所示:

a5bfeebe3f7156d0932ac81c016f3853.png

图 10.4.3 HDMI彩条显示实验源文件

由上图可知,本次实验没有用到video_display.v文件,原因是为了封装完成后的IP核能在第十二章“HDMI彩条显示实验”中直接被调用,显示数据由MicroBlaze产生而不是由FPGA产生,所以不需要video_display.v文件。当然了,封装时也可以包含video_display.v文件,这样封装完成的IP核则可以在《达芬奇之FPGA开发指南》中“HDMI彩条显示实验”中直接调用,但不能用在基于MicroBlaze的工程之中。

为了方便后续工程直接调用封装后的IP核,顺便验证IP核的正确性,所以上述几个模块文件需要稍作改动,以便在后续的“HDMI彩条显示实验”中调用。

a)hdmi_colorbar_top修改

模块修改前,端口如下图所示:

b84788681c8dfb07a89e02dc7b56cf99.png

图 10.4.4 修改前端口

模块修改后,端口如下图示所示:

40aec524fe07b70b907c0258ceedc636.png

图 10.4.5 修改后端口

以上两图对比可知,系统时钟改为像素时钟pixel_clk和pixel_clk_5x;新增DDR3初始化完成端口ddr_init_done;新增一组彩条显示数据端口data_req和data_in(16位的RGB565格式数据);新增一组HDMI输出接口,两路均可输出HDMI数据;一组分辨率传递参数。其中像素时钟在硬件搭建时由时钟管理单元产生,不需要在此模块内产生;彩条显示数据端口用来与FIFO连接,从而获取数据;分辨率传递参数方便在调用IP核时对分辨率进行配置(在本实验中工程默认分辨率为640*480)。

本实验新增接口涉及子模块具体修改详见hdmi_colorbar_top模块。

b)video_driver修改

模块修改前,端口如下图示所示:

1f2d7cc648f9d28053e30ad3d4f0037b.png

图 10.4.6 修改前端口

模块修改后,端口如下图示所示:

9ddf98972357334f96249a2de1cff2c1.png

图 10.4.7 修改后端口

由上两图对比可知,分辨率参数传递到了video_driver模块中;输入16位RGB565格式的彩条显示数据转换为了24位RGB888格式的数据输出;数据请求信号data_req引出了模块。转换代码如下图所示:

5ecf3ac91c61fed37b13fc8d4116f068.png

图 10.4.8 RGB格式转换

c)dvi_transmitter_top修改

模块修改前,端口如下图示所示:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/807805
推荐阅读
相关标签
  

闽ICP备14008679号