在Vivado IPI和Vitis中使用带有层次块的外围设备
在Vivado,分层块是块设计中的块设计。这些模块允许工程师将他们的设计划分为不同的功能组。本指南逐步介绍了将预先存在的层次块添加到块设计的过程,重新创建它的示例软件应用程序,并在硬件中运行设计。
注意:本指南中提供的截图可能不是您的工具版本所使用的。这里提出的工作流已经在Vivado 2020.1中得到验证。虽然在2020.1和旧版本的工具之间存在一些差异,但旧版本的截图已经被选中,并且包含了与2020.1相同的用户界面。
库存
-
一种Digilent FPGA开发板。
-
一台安装了Vivado的电脑。
-
看到安装Vivado, Vitis和Digilent板文件指南以获取更多信息。
-
-
熟悉Vivado IP Integrator和基本块设计工作。
-
后,开始使用Vivado和Vitis为Baremetal软件项目指南将导致符合所有需求的设计。
-
指南
建立依赖关系
一个ZIP归档文件,包括本指南支持的每个外设所需的所有IP、软件示例和层次脚本,可以从Github下载这里:vivado-library-hierarchies.zip.
下载此文件,并将其解压缩到您计算机上的某个难忘的地方。
有些用户可能希望通过git访问这些文件,git提供了一种方法来获取Digilent将来可能应用到这些文件的任何更新或修复。下面的下拉列表详细介绍了用git克隆这些源代码的方法。
- 通过Git获取源代码
-
请注意:为了使用git命令,git必须安装在计算机上。有各种不同的应用程序可以用来与git工具交互。下面的代码块详细说明了bash shell中使用的命令。
检查Vivado库是否已经包含在Vivado项目中,如果不是,那么应该克隆它:
git clone https://github.com/digilent/vivado-library -b hierarchies
否则(如果一个单独的vivado库克隆已经包含在项目中),使用git工具检查分支:
警告!如果库中的IP已经包含在项目中,那么签出一个不同的分支可能会导致对它们的更改。小心!
CD (path)/vivado-library git checkout hierarchies
在硬件设计中添加层次块
启动Vivado,然后打开Vivado项目要使用的层次块,并打开项目的块设计。
请注意:设计必须包含可用于标准输出的处理器和外围设备。在Microblaze的情况下,UART IP必须连接到单板的USBUART接口。在Zynq中,默认使用PS UART。
完成开始使用Vivado和Vitis为Baremetal软件项目指南将导致设计符合使用这些分层块的要求。
在Vivado的TCL控制台中,输入以下命令:
/vivado-library/hierarchies/(hierarchy of choice)/ create_hierer .tcl . Source (path)/vivado-library/hierarchies/(hierarchy of choice
当脚本完成运行时,块设计将包含一个分层块里面有几个IPIP将被连接到另一个和块的端口和引脚。层次结构的内容可以通过“+”按钮。
查看README.txt文件,可以在vivado-library/ Hierarchy的Hierarchy block文件夹中找到,以获得关于Hierarchy的端口必须如何连接到设计的其余部分的额外信息。记住这一点:
-
通过单击将所有层次块的axis接口连接到设计中的处理器连接自动化运行,并在适当的方框中勾选。这些接口可能会在连接自动化对话框中出现不止一次。为每个接口只选择一个条目。
-
将层次结构可能拥有的任何中断连接到适当的中断控制器:AXI中断控制器IP(用于Microblaze设计),Zynq处理系统的irq_f2p端口(用于Zynq设计)。
-
将任何附加时钟连接到内存接口生成器或时钟向导(用于Microblaze设计)或Zynq处理系统(用于Zynq设计)生成的时钟。
下一步,约束层次结构的外部端口,有两个不同的工作流:
-
如果在创建项目时选择了一个板,则板流可用于此步骤。
-
如果选择的是一个部件而不是一个板,或板流由于任何原因不能使用,则手动约束流应该被使用。
创建外部Pmod端口
打开下面所选工作流的下拉菜单,并按照说明操作。
请注意:此步骤仅用于Pmod层次块。Zmod分层脚本自动创建它们的外部端口。出于本指南的目的,考虑使用Manual Constraint Flow创建Zmod的外部端口。
- 板流
-
去Vivado董事会选项卡并选择Pmod连接器以连接到层次结构块。右键单击连接器的条目(通常命名为“connector JA”),然后选择连接板组件.在弹出窗口中,在连接到现有IP,选择层次结构的Pmod桥接IP的“Pmod_out”接口。点击好吧.
- 手动约束流
-
选择Pmod_out端口,然后右键单击它并选择使外部.在设计中选择新创建的外部接口端口(名称类似于“Pmod_out_0”),并为其命名。
验证设计并创建包装器文件
不管选择的工作流是什么,通过单击validate按钮来验证块设计()并保存它。
然后创建一个HDL包装器文件(如果还不存在的话),方法是右键单击来源窗格并选择“创建HDL包装器”。
约束的设计
这一步的工作原理略有不同,取决于分层块的目标外设是否为Zmod或者一个Pmod.为选择的外围设备选择下拉菜单:
- Pmod
-
如果板流,打开vivado-library- hierarchy中层次结构块文件夹中的README.txt文件,以确定是否需要任何额外的约束。如果没有,跳过本节的其余部分.
当创建层次结构时,一个名为“(层次结构名称)_Pmod_out”的约束文件。,被导入到Vivado项目中。该文件包含所有必需约束的模板,而不管使用的流是什么。打开它现在从来源通过在窗格下找到它约束然后双击它。
所需的约束条件板流默认为未注释。
如果手动约束流被选中时,取消注释掉任何以" set_property "开头的行,方法是删除每一行开头的" # "符号。
文本“FIXME”在约束文件中用于指示特定于电路板和设计的值必须手工输入的位置。
两种类型的手动输入值是典型的约束文件在这些层次:
港口的名字:
这些fixme出现在文本“get_ports”之后。通过查看上一步中创建的HDL包装器文件,可以找到这些fixme的正确值。查找连接到HDL包装器的端口映射中的层次结构的Pmod_out接口的端口名称。将这些名称输入到层次结构的约束文件中相应的位置。位置约束:
这些fixme出现在文本“PACKAGE_PIN”之后,并且只在手动约束流.通过查看目标板的主XDC文件可以找到这些fixme的正确值。Digilent主板的主XDC文件可以在digilent-xdc在Github库。找到与分层块的Pmod_out端口要连接的Pmod连接器对应的LOC属性值。将这些值输入到层次结构的约束文件中的相应位置。
- Zmod
-
当create_hier。tcl为Zmod层次块运行,一个约束文件被导入,其中包含脚本创建的每个外部端口的模板约束。约束文件以脚本创建的层次块命名,后跟特定Zmod的名称,例如:“ZmodADC_0_ZmodADC.xdc”。约束文件可以在Vivado IP Integrato的源窗格的约束部分找到。
在撰写本文时,每个Zmod分层块为eclipse Z7的每个Zmod端口提供模板约束。默认情况下,ZmodADC连接到eclipse Z7的Zmod端口A, ZmodDAC要连接到另一个端口,用户只需要注释掉xdc中与默认端口对应的部分,并取消注释与所选端口对应的部分。
对于其他板,用户必须用所选板的主XDC文件中找到的相应位置替换Zmod端口的PACKAGE_PIN位置约束,该位置约束可以通过digilent-xdc在GitHub库。
构建的硬件
点击产生的比特流.这个过程可能需要一些时间,这取决于项目的复杂性。
Baremetal软件
Zmod分层块由Zmod库在软件中支持。如果使用Zmod,请参阅Zmod基础库用户指南,跳过本指南的其余部分。如果希望Petalinux支持添加的层次结构,请首先查看Zmod Petalinux配置指南
本节介绍从Vitis中的示例源文件创建一个baremetal软件应用程序。
- 出口的硬件
-
一旦项目构建完成,设计必须从Vivado导出,以便Vitis能够访问有关软件应用程序正在开发的硬件的信息。这包括连接到处理器的IP集、它们的驱动程序、它们的地址等等。导出硬件后,比特流已产生,允许您的程序,您的董事会直接从Vitis。
的输出屏幕允许您选择是否只使用硬件规格(Pre-synthesis),或者是否应该包含位流。由于位流已经生成,它应该包含在平台中,以便Vitis可以自动找出它在编程板的位置。选择包括比特流并点击下一个继续。
的文件屏幕向您提供了选择Xilinx Shell Architecture (XSA)文件名称的选项,并提供了文件将放在其中的文件夹的路径。给您的XSA文件一个名称,并选择一个便于记忆的位置来放置它。这个文件稍后将被导入到Vitis中,因此请注意它的位置和名称。
重要的是:请勿在文件名和导出路径中使用空格。强调或camelCase建议。
点击下一个继续。
- 推出葡萄
- 创建空应用程序
-
打开Vitis后,必须创建一个应用程序项目来保存源文件。在创建应用程序项目时,还将从之前从Vivado导出的XSA文件创建硬件平台。
找到XSA文件并打开它之后,请确保在硬件规格列表。为平台指定一个名称(默认使用XSA文件的名称,这样就可以正常工作)。的生成启动组件box可以用来自动构建从闪存或SD卡启动应用程序所需的所有额外组件。建议选中此框。点击下一个继续。
下一个屏幕用于为应用程序项目和系统项目设置一些选项。可以设置两个项目的名称,以及将使用哪个处理器核心来运行应用程序。所有设置都可以保留为默认设置。点击下一个继续。
注意:一个系统项目可以包含多个应用程序项目,这些应用程序项目可以同时运行。
最后,将选择一个模板项目。每个模板都根据不同的目的预先配置应用程序项目。根据您的应用程序是用C还是c++编写的,选择空应用程序或空应用程序(c++).稍后您将添加一个示例主源文件,而不是使用并编辑一个示例。
点击完成以完成项目的创建。
- 向应用程序添加示例源
-
复制所有的文件从选定的层次块sdk_sources文件夹(在vivado-library-hierarchies文件夹中),然后将它们粘贴到应用程序项目的src文件夹中。
- 启动应用程序
-
启动一个Vitis Baremetal软件应用程序
在资源管理器窗格中,右键单击要运行的应用程序或系统项目,并选择在硬件上启动(单个应用程序调试).FPGA将使用比特流编程,由软件构建创建的ELF文件被加载到系统内存中,应用项目将开始运行。您需要单击返回到葡萄属串行终端从控制台选项卡。
注意:项目至少运行一次后,您可以使用绿色运行按钮()的工具栏中显示,以对电路板编程。
下一个步骤
既然层次块的示例设计正在运行,就可以很容易地对硬件或软件进行修改。
与分层块一起提供的Vitis源被设置成这样,它们可以很容易地包含在使用该块的任何设计中。sdk_sources下面的子文件夹包含该块所需的所有驱动程序。
要了解更多关于Digilent产品的参考资料和指南,请浏览它们的资源中心,可以通过这个维基找到可编程逻辑页面。
有关技术支持,请访问Digilent论坛.