搜索
bottom↓
回复: 0

【正点原子FPGA连载】第十章IP封装与接口定义实验--摘自【正点原子】达芬奇之Microblaze 开发指南

[复制链接]

出0入234汤圆

发表于 2020-10-17 10:49:29 | 显示全部楼层 |阅读模式
本帖最后由 正点原子 于 2020-10-17 10:49 编辑

1)实验平台:正点原子达芬奇FPGA开发板
2)购买链接:https://detail.tmall.com/item.htm?id=624335496505
3)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/fpga/zdyz_dafenqi.html
4) 正点原子官方B站:https://space.bilibili.com/394620890
5)对正点原子FPGA感兴趣的同学可以加群讨论:876744900 点击加入:
QQ群头像.png   

100846rel79a9p4uelap24.jpg

100846f1ce1fg14zbg0va4.png

第十章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的共用。
阿莫论坛发帖达芬奇专用1384.png

图 10.1.1 Vivado IP核目录

在搭建Block Design的过程中,我们通过连线将各IP核相同类型的接口连接起来。IP核通过接口与外部模块进行信号传递,在Vivado的IP库中包含各种不同类型的接口定义,如图 10.1.2所示:
阿莫论坛发帖达芬奇专用1576.png

图 10.1.2 Vivado接口目录

IP核的接口(Interfaces)由一个或者多个端口(Ports)组成,不同类型的信号需要通过不同类型的接口进行传递。需要注意的是,这里的“信号”可以由一根信号线传递,如时钟信号,此时时钟接口仅包含一个端口。有的信号则需要通过多根信号线进行传递,比如视频信号,它包含像素数据、行同步信号和场同步信号等,那么视频接口就由多个端口组成,各个端口分别由独立的信号线连接。
例如,图 10.1.3是AXI GPIO IP核的模块框图,从图中可以看出该IP核有四个接口。其中由两个红色箭头指示的加号表示这两个接口由多个端口组成,另外两个接口则只包含一个端口。
阿莫论坛发帖达芬奇专用1941.png

图 10.1.3 AXI GPIO IP核

点击上图中红色箭头所指示的加号可以将该接口展开,如下图所示:
阿莫论坛发帖达芬奇专用11039.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的缩写)。创建完成后如下图所示:
阿莫论坛发帖达芬奇专用11697.png

图 10.4.1 IP核与接口文件目录

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

图 10.4.2 IP封装使用的源文件

为了方便大家能够快速地找到这几个源文件,源文件所在位置截图如下所示:
阿莫论坛发帖达芬奇专用11945.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修改
模块修改前,端口如下图所示:
阿莫论坛发帖达芬奇专用12343.png

图 10.4.4 修改前端口

模块修改后,端口如下图示所示:
阿莫论坛发帖达芬奇专用12419.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修改
模块修改前,端口如下图示所示:
阿莫论坛发帖达芬奇专用12805.png

图 10.4.6 修改前端口

模块修改后,端口如下图示所示:
阿莫论坛发帖达芬奇专用12881.png

图 10.4.7 修改后端口

由上两图对比可知,分辨率参数传递到了video_driver模块中;输入16位RGB565格式的彩条显示数据转换为了24位RGB888格式的数据输出;数据请求信号data_req引出了模块。转换代码如下图所示:
阿莫论坛发帖达芬奇专用13047.png

图 10.4.8 RGB格式转换

c)dvi_transmitter_top修改
模块修改前,端口如下图示所示:
阿莫论坛发帖达芬奇专用13147.png

图 10.4.9 修改前端口

模块修改后,端口如下图示所示:
阿莫论坛发帖达芬奇专用13223.png

图 10.4.10 修改后端口

由上两图对比可知,模块新增了一组TMDS接口,所以板子上的两个HDMI接口均可输出显示彩条数据。接口涉及代码修改详见dvi_transmitter_top模块。
几个模块经过修改后,最后封装完成的IP核可直接被调用在原始显示数据为RGB565格式而最终输出显示数据为RGB888格式的基于MicroBlazed的工程内,且显示分辨率可根据具体需求灵活配置。接下来介绍IP核的具体封装步骤。(注意:为保证后续封装IP的可行性,防止因为修改代码文件错误或者遗漏而导致封装失败,建议大家直接使用例程中提供的修改后的代码文件)
(2)创建Vivado工程
在文件夹目录和源文件准备好之后,接下来创建一个Vivado工程,用于管理IP核。
首先打开Vivado软件,软件启动后在Tasks一栏选择“Manage IP”,然后点击“New IP Location…”,如下图所示:
阿莫论坛发帖达芬奇专用13669.png

图 10.4.11 新建IP路径

在弹出的对话框中点击“Next”,如下图所示:
阿莫论坛发帖达芬奇专用13755.png

图 10.4.12 创建自定义IP路径向导

在IP设置界面器件类型选择板载芯片“xc7a35tfgg484-2”;创建一个文件夹“ip_repo”,并指定工程所在目录为ip_repo,然后点击“Finish”,如下图所示:
阿莫论坛发帖达芬奇专用13912.png

图 10.4.13 管理IP工程设置

需要注意的是,在图 10.4.13中,IP location一栏中的路径是Vivado工程所在的路径,与我们要封装的IP核所在的路径(即前面我们新建的HDMI_COLORBAR_TOP文件夹)无关。
点击“Finish”之后,Vivado会新建一个名为“Manage IP”的工程,如下图所示:
阿莫论坛发帖达芬奇专用14148.png

图 10.4.14 Manage IP工程

方便起见,我们将之前准备的vitis_pro下的HDMI_COLORBAR_TOP文件夹拷贝到ip_repo下(后面会指定要封装的IP核源文件在此目录之下)。拷贝文件夹后如下图所示:
阿莫论坛发帖达芬奇专用14307.png

图 10.4.15 ip_repo工程目录

(3)创建和封装IP
接下来,在当前工程中创建和封装新的IP核。
在菜单栏中点击“Tools”,然后在下拉列表中选择“Create and Package New IP”,如下图所示:
阿莫论坛发帖达芬奇专用14467.png

图 10.4.16 创建和封装IP

在弹出的对话框中点击“Next”,如下图所示:
阿莫论坛发帖达芬奇专用14554.png

图 10.4.17 创建和封装IP

在下一个界面中选择“Package a specified directory”,选择一个目录作为源来创建一个新的IP定义,点击“Next”,如下图所示:

阿莫论坛发帖达芬奇专用14695.png

图 10.4.18 选择封装一个指定的目录

接着在下图所示界面中,指定要封装的IP核源文件所在的目录,即我们前面拷贝到ip_repo下的HDMI_COLORBAR_TOP文件夹中的ip目录。然后点击“Next”,如下图所示:
阿莫论坛发帖达芬奇专用14853.png

图 10.4.19 选择源文件所在目录

在下一个界面中提示将会重新打开一个工程,我们将在此工程中对IP核进行编辑。工程的名称和路径已经自动添加,我们直接点击“Next”,如下图所示:
阿莫论坛发帖达芬奇专用14990.png

图 10.4.20 IP核封装工程名

最后点击“Finish”,如下图所示:
阿莫论坛发帖达芬奇专用15074.png

图 10.4.21 新IP创建

在点击“Finish”之后,Vivado会打开一个新工程用于编辑IP核,如下图所示:
阿莫论坛发帖达芬奇专用15178.png

图 10.4.22 编辑IP工程

在上图中右侧的Sources栏可以看到需要进行封装的IP核源文件。注意,箭头指示的模块video_driver前有品字形的标识,表明该模块被识别成顶层模块,但顶层模块实际上是hdmi_colorbar_top模块,因此我们需要在红标hdmi_colorbar_top上右击鼠标,然后选择“Set as top”,将其设置成顶层模块,如下图所示:
阿莫论坛发帖达芬奇专用15413.png

图 10.4.23 设置顶层模块

在设置顶层模块之后,接着点击左侧红标2处“IP Catalog”下的“Edit Package IP”,对IP核进行设置和编辑。
(4)设置IP信息
在主界面Package IP页中,点击“Packaging Steps”一栏中的“Identification”。然后修改右侧的选项,括厂商(Vendor)、IP核名称(Name)、IP核显示名称(Display name)以及对IP核的描述(Description)等信息。修改后的IP核信息如下图所示:
阿莫论坛发帖达芬奇专用15704.png

图 10.4.24 IP核信息

从上图中下方红色方框所标识的内容可以看出,IP核的根目录是工程目录下的HDMI_COLORBAR_TOP/ip文件夹。
(5)设置IP兼容性
点击左侧“Packaging Steps”一栏中的“Compatibility”,在右侧设置IP核兼容性,如下图所示:
阿莫论坛发帖达芬奇专用15896.png

图 10.4.25 IP核兼容性

IP核兼容性是指我们封装的IP核可用于哪些型号的器件。由于我们封装的hdmi_colorbar_top模块在设计时用到了器件的原语,其功能与器件底层的硬件结构有一定的关联,因此并不适用于Xilinx所有型号的器件。我们在IP核兼容性中只保留artix7和zynq这两个系列(ZYNQ7010/7020的PL部分等同于Artix7系列的FPGA,也可以不保留zynq)。然后将其他所有型号的器件选中后,点击上图中箭头所指示的减号将其删除。
删除多余的器件型号后,IP核兼容性设置如下图所示:
阿莫论坛发帖达芬奇专用16203.png

图 10.4.26 IP核兼容性设置

(6)设置文件组
然后点击左侧“Packaging Steps”一栏中的文件组“File Groups”,文件组中列出了IP核所使用到的源文件。由于我们前面修改了顶层模块,因此我们需要点击箭头所指示的位置,将改动更新到文件组向导界面。如下图所示:
阿莫论坛发帖达芬奇专用16391.png

图 10.4.27 IP核文件组

(7)设置变量
接下来点击左侧“Packaging Steps”一栏中的“Customization Parameters”,点击箭头所指示的位置,将改动更新到定制变量(Customization Parameters)向导界面中。如下图所示:
阿莫论坛发帖达芬奇专用16576.png

图 10.4.28 IP核定制变量

由于在hdmi_colorbar_top模块中我们定义了10个parameter变量(分辨率参数),因此在“Customization Parameters”页面会识别到这些变量,由于之前在video_driver模块中将显示分辨率参数进行了修改(640*480),所以这些参数值会“Value”栏中被识别并以16进制显示,如下图所示:
阿莫论坛发帖达芬奇专用16808.png

图 10.4.29 分辨率参数

(8)设置端口和接口
接着点击左侧“Packaging Steps”一栏中的“Ports and Interfaces”,如下图所示:
阿莫论坛发帖达芬奇专用16937.png

图 10.4.30 IP核端口和接口

我们将在上图所示的界面中设置IP核的端口和接口。在该界面中已经列出了顶层模块所有的输入和输出端口,同时工具自动识别出了复位sys_rst_n、时钟pixel_clk等接口。但是工具自动识别出来的接口并不完全正确,需要我们根据各端口的定义重新进行修改。
工具错误地将tmds_clk_n和tmds_clk_p这两个端口识别成了两个时钟端口,因此需要将这两个端口移除,如下图所示:
阿莫论坛发帖达芬奇专用17190.png

图 10.4.31 移除错误接口

移除错误的时钟端口后,IP核端口与接口界面如下图所示:
阿莫论坛发帖达芬奇专用17280.png

图 10.4.32 IP核端口与接口

我们将该IP核的输入输出端口分成了四种接口类型:复位接口、时钟接口、其他接口和TMDS接口。其中复位接口已经由工具识别到复位信号sys_rst_n后自动创建,而其他三个类型的接口需要我们手动添加。复位接口如下图所示:
阿莫论坛发帖达芬奇专用17453.png

图 10.4.33 复位接口


时钟接口如下图所示:
阿莫论坛发帖达芬奇专用17525.png

图 10.4.34 时钟接口

TMDS接口如下图所示:
阿莫论坛发帖达芬奇专用17598.png

图 10.4.35 TMDS接口

除此之外,由于TMDS连接中仅包含三个数据通道和一个时钟通道(通道解释详见HDMI彩条显示实验),因此tmds_oen信号没有划分到TMDS接口中,而是作为IP核独立的端口。
其他接口包括DDR初始化完成、彩条显示数据和彩条数据数据请求信号,如下图所示:
阿莫论坛发帖达芬奇专用17788.png

图 10.4.36 其他接口

(9)添加时钟接口
接下来我们首先添加时钟接口,由于每个时钟接口只包含一路时钟信号,因此我们需要为pixel_clk和pixel_clk_x5各添加一个时钟接口。
选中端口pixel_clk并右击鼠标,然后选择“Add Bus Interface”,如下图所示:
阿莫论坛发帖达芬奇专用17980.png

图 10.4.37 添加总线接口

在弹出的对话框中选择General页面。首先要指定添加的接口类型,默认的接口类型是aximm_rtl,点击箭头所指示的按钮“…”,如下图所示:
阿莫论坛发帖达芬奇专用18114.png

图 10.4.38 添加接口

在弹出的接口选择界面中点击放大镜图标,由于需要添加时钟接口,所以在“Search”栏输入“clock”进行搜索。然后展开下面的“Signal”,选中“clock_rtl”,在其右侧可以看到对该接口的描述为“Xilinx时钟信号接口”,最后点击“OK”,如下图所示:
阿莫论坛发帖达芬奇专用18307.png

图 10.4.39 选择接口类型

返回“General”界面后,输入该时钟接口的名称为“pixel_clk”;设置模式为“slave”,如下图所示:
阿莫论坛发帖达芬奇专用18427.png

图 10.4.40 指定接口名称与模式

当模式设置为“slave”时,表示该时钟接口是一个输入接口;如果设置为“master”,则表示它是一个输出接口。在hdmi_colorbar_top模块中,两个时钟信号均为输入信号,因此都需要设置为“slave”。
接下来点击进入“Port Mapping”页面,将接口的逻辑端口与IP的物理端口映射起来,如下图所示:
阿莫论坛发帖达芬奇专用18652.png

图 10.4.41 IP端口映射

上图中,左侧的Interface’s Logical Ports指的是我们添加的接口由哪些端口组成,比如时钟接口就只有一个名为“CLK”的时钟端口;而在右侧的IP’s Physical Ports一栏中列出了IP核顶层模块所有的输入输出端口。我们需要在Port Mapping页面中将二者映射起来,也就是为我们模块的输入输出端口指定信号类型。
在左侧红标1处点击选中逻辑端口“CLK”,然后在右侧红标2处选中物理端口“pixel_clk”,最后点击箭头所指示的按钮“Map Ports”即可完成pixel_clk的端口映射。映射之后的端口会在下方Mapped Ports Summary栏中列出,最后点击“OK”,如下图所示:
阿莫论坛发帖达芬奇专用19028.png

图 10.4.42 端口映射列表

接着就会返回上一个界面,下图红框内箭头指示的是我们为IP核手动添加的时钟接口,名为pixel_clk,该时钟接口只包含一个端口,即顶层模块的输入端口pixel_clk。
阿莫论坛发帖达芬奇专用19175.png

图 10.4.43 端口映射成功

接下来采用同样的方法,为IP核顶层模另一个输入时钟pixel_clk_x5也添加一个时钟接口。该过程与添加pclk时钟接口的步骤是相同的,只需要在接口命名时修改为pixel_clk_x5,具体过程不再赘述。添加完成之后如下图所示:
阿莫论坛发帖达芬奇专用19353.png

图 10.4.44 端口映射成功

(10)添加其他接口
依据上面的介绍,选中端口“data_in”并右击鼠标,然后选择“Add Bus Interface”,接口类型选择data_rtl,命名为“data_in”,模式选择“sleave”,如下图所示:
阿莫论坛发帖达芬奇专用19525.png

图 10.4.45 ddr_init_done端口

接着进行映射,过程不再赘述,映射完成后点击“OK”,如下图所示:
阿莫论坛发帖达芬奇专用19629.png

图 10.4.46 data_in端口映射

其他接口中的data_req和ddr_init_done端口不必映射,保持默认,作为IP核独立的端口即可。
接下来我们要添加TMDS接口,由于在Vivado的IP库中并没有这个TMDS的接口定义,因此我们需要先定义一个TMDS接口。
(11)创建TMDS接口定义
在当前工程中的菜单栏点击“Tools”,然后选择“Create Interface Definition”,如下图所示:
阿莫论坛发帖达芬奇专用19889.png

图 10.4.47 创建接口定义

在弹出的对话框中选择“Create new interface definition”,然后分别输入厂商(Vendor)、接口名(Name)、路径(Location),将接口名称设置为“TMDS”,路径设置为IP核路径中的if文件夹,然后点击“OK”,如下图所示:
阿莫论坛发帖达芬奇专用110084.png

图 10.4.48 设置接口定义

接下来工具会自动打开TMDS接口的配置界面,里面已经包含了前面设置的接口信息,如下图所示:
阿莫论坛发帖达芬奇专用110192.png

图 10.4.49 添加TMDS接口端口

在上图中,添加对该接口的描述:“TMDS Link Interface”即TMDS连接接口(TMDS接口一共包含四个端口,分别是:tmds_clk_p、tmds_clk_n、tmds_data_p和tmds_data_n,其中tmds_data_p和tmds_data_n的位宽为3位,其他位宽为1)。
接下来我们需要为该接口添加端口,在上图中Ports一栏点击箭头所指示的加号,在弹出对话框内设置端口信息,如下图所示:
阿莫论坛发帖达芬奇专用110469.png

图 10.4.50 设置端口

在上图中,添加的第一个端口名为“tmds_clk_p”,并将其默认值(Default Value)设置为0。接下来要针对TMDS接口的Master和Slave两种模式,分别设置该端口的属性。首先在这两种模式下该端口的位宽(Width)都是1位,另外在Master模式下该端口作为输出信号(out),在Slave模式下该端口作为输入信号(in)。最后在Type端口类型一栏,勾选“Clock”一项,表明该端口传输的是时钟信号。然后点击右下角的“OK”。
端口属性设置完成后TMDS接口定义界面如下图所示:
阿莫论坛发帖达芬奇专用110781.png

图 10.4.51 添加tmds_clk_p端口

按照同样的方式添加tmds_clk_n端口,过程不再赘述。添加后TMDS接口定义界面如下图所示:
阿莫论坛发帖达芬奇专用110900.png

图 10.4.52 添加tmds_clk_n端口

接下来添加tmds_data_p端口,按照下图所示信息对tmds_data_p端口的设置,注意tmds_data_p端口的Width位宽为3,Type类型为Data(数据)。点击“OK”,如下图所示:
阿莫论坛发帖达芬奇专用111071.png

图 10.4.53 设置端口

按照同样的方式tmds_data_n端口,过程不再赘述。
所有的端口添加完毕后,TMDS接口定义的界面如下图所示:
阿莫论坛发帖达芬奇专用111189.png

图 10.4.54 TMDS接口定义

点击底部“Save”按钮保存,如下如所示:
阿莫论坛发帖达芬奇专用111275.png

图 10.4.55 保存

至此,TMDS接口就创建完成。在工程目录下HDMI_COLORBAR_TOP/if文件夹下查看所生成的接口定义文件,如下图所示:
阿莫论坛发帖达芬奇专用111398.png

图 10.4.56 TMDS接口接口定义文件

创建TMDS接口定义完成之后,继续在IP核中添加该接口。
(12)添加TMDS接口
选中端口“tmds_clk_p”并右击鼠标,然后选择“Add Bus Interface”,如下图所示:
阿莫论坛发帖达芬奇专用111561.png

图 10.4.57 添加总线接口

在弹出的对话框General页面中,点击Interface Definition右侧按钮“…”为端口指定接口类型,如下图所示:
阿莫论坛发帖达芬奇专用111687.png

图 10.4.58 添加接口类型

点击放大镜,输入“TMDS”搜索,选中“TMDS_rtl”。TMDS_rtl接口所在的库为User,即用户自定义的接口,这个接口原本在Vivado的接口库中是不存在的,在我们创建其接口定义之后才能够搜索到,可以看到我们之前对改接口添加的描述“TMDS Link interface”。点击“OK”,如下图所示:
阿莫论坛发帖达芬奇专用111905.png

图 10.4.59 选中TMDS_rtl接口

返回General页面后,对添加的TMDS接口进行设置,设置接口名为“TMDS”,然后设置模式为“master”,即该接口在IP核中作为输出接口。如下图所示:
阿莫论坛发帖达芬奇专用112053.png

图 10.4.60 设置TMDS接口

点击Port Mapping对接口的端口进行映射,依据箭头所指示的连接方式,将左侧TMDS接口的逻辑端口与IP核的物理端口映射起来。映射后的端口会在下方“Mapped Ports Summary”一栏中列出,映射完成后点击图中右下角的“OK”。如下图所示:
阿莫论坛发帖达芬奇专用112246.png

图 10.4.61 TMDS接口映射

端口映射完毕返回上一层界面,如下图所示:
阿莫论坛发帖达芬奇专用112331.png

图 10.4.62 TMDS接口映射完毕


采用同样的方式,对tmds_clk_p1、tmds_clk_n1、tmds_data_p1、tmds_data_n1端口进行映射,设置接口名为“TMDS1”。映射完后如下图所示:
阿莫论坛发帖达芬奇专用112488.png

图 10.4.63 TMDS1接口映射完毕

至此,要封装的IP核所有的接口均已添加完成。我们将IP核共分为五个接口部分:彩条数据、TMDS、时钟和复位、其他和tmds_oen、tmds_oen1,如下图所示:
阿莫论坛发帖达芬奇专用112638.png

图 10.4.64各部分接口

其中sys_rst_n是工具在识别到模块的复位端口后自动添加的接口;而TMDS接口是我们自定义的接口;data_in为16位的彩条显示数据接口。另外,图中箭头所指示的tmds_oen、tmds_oen1端口以及data_req、ddr_init_done端口将作为独立的端口存在,我们没有为它们再创建新的接口定义,也就是说,在IP核中,并不是所有的端口都要以接口的形式存在。我们为IP核添加或者创建接口是为了更方便地连接IP核之间的端口信号。
(13)编辑复位接口
除了删除或者添加接口,我们还可以对IP核的接口重新进行编辑或者修改。在复位接口sys_rst_n上右击鼠标,然后选择“Edit Interface”,如下图所示:
阿莫论坛发帖达芬奇专用113013.png

图 10.4.65 编辑接口

进入Parameters页面,在该页面中可以为接口添加变量。左侧选择“POLARITY”变量,然后点击图中箭头,将该变量添加到右侧IP核的变量列表中,如下图所示:
阿莫论坛发帖达芬奇专用113155.png

图 10.4.66 添加变量

添加完成后,在“Value”一栏设置POLARITY变量的值为“ACTIVE_LOW”。变量POLARITY指的是复位接口的极性,而我们将它的值设置为“ACTIVE_LOW”则表明该复位接口是低电平有效。这一设置需要与IP核程序设计中复位接口的极性保持一致。最后点击“OK”完成对复位接口的编辑,如下图所示:
阿莫论坛发帖达芬奇专用113370.png

图 10.4.67 设置变量

至此,对IP核端口和接口的设置就完成了,其中时钟和复位接口会被折叠到“Clock and Reset Signals”分组中,如下图所示:
阿莫论坛发帖达芬奇专用113500.png

图 10.4.68 完成端口和接口设置

(14)查看IP核GUI界面
另外,在我们封装的IP核中不涉及存储映射和地址空间等,因此可以直接跳上图箭头所指示的“Addressing and Memory”设置界面,直接点击进入“Customization GUI”界面。可以看到IP核封装后的图形用户界面,如下图所示:
阿莫论坛发帖达芬奇专用113703.png

图 10.4.69 IP核图形用户界面

从上图中我们可以看到IP核所有的接口和端口,最右侧为显示分辨率(640*480)的参数,在搭建硬件系统调用IP核时可根据具体需求改变这些参数设置。
(15)封装IP核
点击左侧Packaging Steps一栏中的“Review and Package”,在Summary一栏中可以看到IP核的名称、描述,以及根目录等信息。确认无误后,点击“Package IP”按钮完成IP封装。如下图所示:
阿莫论坛发帖达芬奇专用113966.png

图 10.4.70 封装IP

IP封装完成后,弹出对话框提示名为hdmi_colorbar_top_v1_0的IP核封装成功,并展示了最终封装的IP所在的路径,点击“Yes”,关闭当前工程。如下图所示:
阿莫论坛发帖达芬奇专用114113.png

图 10.4.71 关闭编辑IP工程

在IP核所在的路径中查看封装之后的IP核文件,如下图所示:
阿莫论坛发帖达芬奇专用114207.png

图 10.4.72 封装之后的IP

双击打开xgui文件夹,可以看到xgui文件夹中有两个文件,其中hdmi_colorbar_top_v1_0.tcl与我们封装的IP核名称一致。而另外一个箭头指示名为video_driver_v1_0.tcl的文件是由于工具最开始将video_driver模块错误地识别成了顶层模块而生成的,将其删除。如下图所示:
阿莫论坛发帖达芬奇专用114428.png

图 10.4.73 xgui文件夹

至此,hdmi_colorbar_top模块的IP封装和接口定义就完成了,如下图所示:
阿莫论坛发帖达芬奇专用114535.png

图 10.4.74 IP封装和接口定义完成

(15)调用IP核
其他工程需要此hdmi_colorbar_top IP核或TMDS接口时,只需将HDMI_COLORBAR_TOP文件夹拷贝到工程目录下,然后参考第八章图 8.3.45将hdmi_colorbar_top IP核(包括接口)添加至工程即可。
10.5下载验证
为了验证封装的IP核功能是否正常,我们可以将HDMI_COLORBAR_TOP文件夹拷贝到第十二章 “HDMI彩条显示实验”的工程目录中,然后打开工程,添加该IP核,调用该IP核完成硬件系统的搭建。在重新编译之后,参考“HDMI彩条显示实验”下载验证部分的操作方式进行下载。
如果HDMI显示器上能够正常显示彩条,说明我们本次实验成功地完成了hdmi_colorbar_top IP核的封装和TMDS接口的定义。彩条显示如下图所示:
阿莫论坛发帖达芬奇专用114979.png

图 10.5.1 彩条显示

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-24 13:13

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表