Vivado IP Integrator和Xilinx SDK入门

先决条件

硬件
  • 勤奋的FPGA系统板
  • MicroUSB编程电缆/ s
软件

注意:如果您正在使用包含Vitis(2019.2或更新)的Vivado版本,请查看开始与Vivado和Vitis为Baremetal软件项目

介绍

本指南将解释Digilent FPGA板的IP积分器设计流程的大部分主要功能的使用。在演示的最后,一个简单的设计,接收数据从板上开关和控制led将被创建。


1.创建一个新的IPI项目

1.1

Vivado刚刚打开,点击创建新项目

1.2

该向导的第一页总结了创建项目所涉及的步骤。点击下一个

1.3

第一步是设置项目的名称。Vivado将在生成其文件夹结构时使用此名称。

重要的

不要在项目名称或位置路径中使用空格。这将导致Vivado出现问题。而是使用下划线,破折号,或CamelCase

点击下一个继续。

1.4

在“选择项目类型”屏幕上,选择RTL项目并检查此时不指定来源盒子。高级用户可能想使用这个屏幕上的其他选项,但在本指南中不会涉及这些选项。

点击下一个继续。

1.5

这个屏幕选择项目的目标部件。如果还没有安装Digilent的Board文件,Digilent的Board文件将不会出现在这个列表中——如果是这样,返回本指南的先决条件部分,并按照该教程的链接。选择董事会选项卡,然后从列表中搜索、查找和选择目标板。点击下一个

1.6

这个屏幕总结了在前面的屏幕中选择的内容。点击下一个完成新项目的打开。


2.打开IP积分器

2.1

在Digilent’s中可以找到标准Vivado工作流程的更完整的说明开始Vivado教程。本指南将专门使用IP Integrator工具,可以从流导航器在窗户的左边。扩大IP积分器选项卡并选择创建块设计

2.2

在对话框中,为块设计指定一个名称。目录位置是块设计存储的地方,这可以更改,但建议保留为<本地项目>.确保指定源设置字段设置为设计来源

重要的

不要在块设计名称或目录路径中使用空格。这将导致Vivado出现问题。而是使用下划线,破折号,或CamelCase

点击好吧创建块设计和开放IPI。

3.IP集成工具

本指南中描述的项目包括两个主要部分,在FPGA中实现的逻辑和在处理器中运行的程序。根据目标板的不同,处理器可能在FPGA结构中实现,而不是作为一个不同的硬件组件,但在大多数情况下,这是无关的。

用于在FPGA和处理器上实现的外设之间移动数据的通信协议称为AXI (先进的可扩展接口).每个在FPGA上实现的AXI外设都将被分配一个Zynq内存空间区域,用于处理其每个控制寄存器。在设计中添加一个简单的AXI接口将需要添加两个新块,一个是AXI互连,它定义了AXI信号如何路由,另一个是复位控制器,它将生成每个AXI块和接口的复位。

很多基本的块设计都是将不同的AXI外设连接到处理器,并使用它们对输入和输出端口进行读写。

在此背景下,我们将介绍许多可以用于在Vivado IPI中创建设计的工具。

3.1

来源标签,在右边的图片中用橙色突出显示,包含了几个子标签,层次结构IP源是最直接有用的。

层次结构子选项卡显示项目中存在的一组源。它们被分成三组,设计来源包含块设计,在此之下,包含在块设计中的所有IP核或其他文件的源文件。的约束子选项卡包含已添加到项目中的Xilinx Design Constraint (XDC)文件。XDC文件可用于约束从板文件中省略的端口。

IP源子选项卡显示在块设计中添加新IP核时生成的文件。一些恼人的错误可以通过在这个屏幕上右键单击块设计并选择来解决复位输出产品紧随其后的是生成的输出产品

3.2

设计选项卡,显示所有输入输出端口、IP核端口和IP核间连接的列表。在此列表中选择一个条目将突出显示块设计图中的该对象。

3.3

信号TAB允许用户在块设计中查看所有时钟和复位信号的列表。与前面一样,在这些列表中选择一个条目将在块设计图中突出显示该信号。在更复杂的设计中,这个工具可以用来确定数据在何处跨越时钟域。

3.4

董事会选项卡显示Digilent提供的作为创建项目时选择的董事会文件的一部分的所有外部连接。这个工具使得将这些端口连接到设计非常简单。连接其中一个端口的过程将在本指南的后面部分进行。

3.5

属性在上述选项卡窗格下方的窗格显示当前选定对象的属性。此窗格通常用于快速查看选定时钟引脚的时钟频率,或更改IP核或端口的名称。

3.6

Vivado窗户的右上方大部分被窗格。此窗格显示当前块设计的图形化呈现。该窗格左侧工具栏中的许多按钮将在本指南的步骤4中描述。

3.7

地址编辑器选项卡,包含在与Diagram相同的窗格中,描述处理器可以找到每个安装的AXI外设所在的内存地址。不建议在此窗格中更改值,高级用户除外。块设计验证过程中引用未映射外设的错误可以通过右击此窗格中的任何位置并选择来解决Auto-Assign地址

注意:通过Vivado无法访问此窗格GUI直到一个处理器和一个或多个AXI IP核被添加到块设计中。

3.8

窗口底部窗格的第一个选项卡是TCL控制台.当图形界面发生更改时,该工具将显示Vivado正在运行的脚本命令。通过使用“source”命令,可以创建脚本并使用此工具运行。

3.9

消息选项卡显示在Vivado执行不同操作时创建的错误、警告、信息和状态消息。这些消息也可以在TCL控制台中找到,但以一种相对容易导航的格式显示。

3.10

报告选项卡包含Vivado生成的不同报告列表,这些报告是生成位流过程的一部分。

3.11

通过选择工具报告报告知识产权状况在Vivado窗口顶部的工具栏中,另一个选项卡将被添加到最底部的窗格中——尽管在将IP添加到设计中之前,这不会有任何作用。这知识产权状况页签显示添加到项目中的每个IP核的版本号和目标设备。如果IP不是最新的,单击升级所有按钮将重新加载最新版本的IP,或进行任何需要的更新,使IP工作在Vivado正在使用的版本。

3.12

控件顶部的工具栏窗格有大量的按钮,都做不同的事情:

  • 放大):放大块设计的视图。
  • 缩小):缩小块设计的视图。
  • 缩放适应):放大方块设计的视图,以便当前设计中的所有方块都显示在屏幕上。
  • 选择区域):选择绘制的矩形中的每个块,用于一次移动一组块。
  • Auto-fit选择):将块设计的视图更改为当前选择的块/秒居中。
  • 搜索):允许用户快速找到特定的端口,IP,和块设计中的其他对象。
  • 全部折叠):隐藏块设计中每个层次块的内容。本指南不描述层次结构。
  • 全部展开):显示块设计中每个层次块的内容。本指南不描述层次结构。
  • 添加IP):启动一个搜索对话框来添加一个新的IP块到设计中。稍后会详细介绍。
  • 使外部):为所选引脚创建一个输入或输出端口。当使用XDC文件约束端口时很有用,而不是通过Digilent板文件。
  • 自定义块):为当前选择的IP块启动自定义向导。稍后会详细介绍。
  • 验证设计):在生成位流之前检查块设计中的错误。稍后会详细介绍。
  • 销块):包含几个工具,用于控制块如何在设计中以图形方式显示。
  • 重新布局):通过移动IP区块和重新路由信号,在视觉上清理区块设计。
  • 优化路由):只改变信号的路线,以视觉上清除方块设计。
  • 仅显示接口连接):隐藏时钟和复位信号,只对高度复杂的设计有用。

此外,可以通过直接与“关系图”窗格的图形界面交互来更改设计。对象可以通过单击和拖动来移动。将鼠标悬停在端口上,直到铅笔光标()出现,然后画一条线到另一个端口、引脚或电线。

对IPI中可以采取的操作有了大致的理解之后,现在就可以创建设计了。


4.创建一个简单的块设计

4.1

找到并右键单击按钮进入董事会选项卡,然后选择连接板组件.在弹出的对话框中,选择GPIO创建新的IP→AXIGPIO

重要的。

确保将按钮组件连接到GPIO而不是GPIO2.后面提供的C源代码假设情况就是这样。

点击好吧继续。

4.2

找到并右键单击发光二极管进入董事会选项卡,然后选择连接板组件.在弹出的对话框中,选择GPIO2连接到现有IP→axi_gpio_0.点击好吧继续。

如果有一个条目RGB led在board选项卡中,将该组件连接到另一个新的AXIGPIO控制器。

这个部分的其余部分根据项目所设计的董事会的不同而有所不同。如果目标板使用Zynq芯片,打开Zynq下拉菜单,否则,打开Microblaze下面的下拉。

Zynq

4.3

单击添加IP按钮(),然后搜索“Zynq”。选择Zynq7处理系统从结果列表中,按输入在键盘上继续。

这样做会将Zynq处理器添加到块设计中。Zynq芯片同时包含FPGA结构和硬件处理器。该块表示处理器,以及其他不属于FPGA的硬件组件。

4.4

点击块自动化运行在屏幕顶部的绿色条中。这将启动一个对话框,允许Zynq块的初始配置。

在运行块自动化对话框中,确保processing_system7_0所有自动化在左边的面板中被选中并选中。

有几种不同的选择。出于本指南的目的,将这些选项设置为下面括号中的值。

  • 外部接口不可配置的):显示Zynq区块的不同接口端口,这些端口会自动连接到设计之外。
    • 固定的IO:表示Zynq芯片可编程系统端与硬件外设的连接。这包括一个到主机的UART连接。
    • DDR:表示与单板上的外部DDR内存的连接。
  • 应用板预设:检查将Digilent's Board Files中的配置设置应用于Zynq IP。
  • 穿越触发/:禁用允许用户设置与Xilinx SDK一起使用的硬件/软件断点。这个特性超出了本指南的范围。

点击好吧继续。

4.5

根据项目的需求,可以对Zynq区块的配置进行额外的更改。例如,Zynq块可以用来生成不同频率的新时钟。通过点击选择Zynq块,然后通过点击打开自定义向导自定义块)按钮,或者双击Zynq区块。

Zynq配置下拉菜单将在Zynq的“重新定制IP”对话框中逐一呈现。

Zynq配置

4.5.1

当Zynq块被重新定制时打开的页面被调用Zynq块设计.本页面展示了Zynq芯片所使用的硬件图表。注意I / O设备块时,复选标记显示当前启用的外围设备。在这个屏幕上显示的所有信息都可以在其他页面的列表中找到。

4.5.2

PS-PL配置页面允许用户定制处理器与FPGA通信的方式。这里有几个需要特别注意的设置。

  • 的UART波特率设置一般下拉菜单用于改变Zynq与计算机串口通信的波特率。
  • GP/HP从端AXI接口(通用/高性能)用于需要控制内存接口的AXI外设,这可以在Digilent的HDMI和Audio DMA演示项目中看到。

4.5.3

外围I / O管脚页面允许用户启用或禁用大量不同的硬件外设,这些硬件外设不能直接由FPGA控制。例如,启用GPIOMIO允许用户进行控制领导Zybo板上的4 (LD4/MIO7)。

4.5.4

绪配置page与Peripheral I/O Pins共享其大部分信息,并允许用户在列表中查看,而不是图形表格格式。

4.5.5

时钟配置页面包含重要设置,允许用户以不同的速度向FPGA提供额外的时钟,以及调整几个IO外设的时钟频率。注意到PL织物时钟下拉菜单,勾选FCLK_CLK1-3中的一个,将提供来自Zynq块的额外时钟输出,在所提供的位置或附近请求的频率

4.5.6

DDR配置页面包含大量关于Zynq芯片连接的DDR芯片的设置。这一页是使用从Digilent的董事会文件带来的董事会预设的原因。更改这些设置是不推荐

4.5.7

中断Page是另一个非常有用的。要在FPGA中使用任何中断,请使用织物中断复选框必须选中。许多AXI IP核可以被配置为在某些触发器上产生一个中断,例如AXIGPIO内核可以被设置为在输入改变时触发中断。检查IRQ_F2P盒子的PL-PS中断端口下拉列表会在Zynq块上创建一个新的输入端口,该端口可以通过Concat(连接)IP核连接到最多16个单独的中断插脚。要使用中断,必须使用Zynq硬件中通用中断控制器的“xscugic”驱动程序。

另外,使用外设I/O引脚或MIO配置页面连接的硬件外设生成的中断可以使用中的字段提供给FPGAPS-PL中断端口下拉。

4.6

为了连接GPIO周边到Zynq块,点击连接自动化运行在块设计图窗格顶部的绿色条中。

在Run Connection Automation对话框的列表窗格中,确保检查并选择了S_AXI条目。

在对话框右侧的选项窗格中,运行AXI总线连接的时钟源GPIO可以选择IP到Zynq区块。选择/ processing_system7_0 FCLK_CLK0从每个下拉列表中。

点击好吧继续。

Microblaze

4.3

在Board选项卡中,右键单击系统时钟并选择连接板组件

4.4

连接板组件对话框确保clock_CLK_IN1复选框下创建新的IP→时钟向导检查。

点击好吧继续。

4.5

双击新创建的时钟向导块,或者选择它并单击定制的IP按钮().

董事会塔布,确保系统时钟在CLK_IN1下拉列表中选中,然后选择重置EXT_RESET_IN下拉。

4.6

选择输出时钟选项卡。在这个页面上有几个不同的选项来配置时钟向导。在本指南中,需要配置重置类型,并且需要生成一个单一的100MHz时钟。

确保clk_out1复选框,它的请求频率是100.000兆赫).

根据具体板的复位按钮如何工作,选择活性低活性高重置极性.Basys 3和Cmod A7是唯一的板,使用一个活跃的高复位极性在写的时候。

点击完成保存更改并继续。

4.7

点击连接自动化运行在块设计图窗格顶部的绿色条中。

确保重置在“运行连接自动化”对话框左侧的列表中选中并选中。勾选此复选框后,Vivado将自动将在“时钟向导配置”对话框的“板”窗格中选择的重置组件连接到时钟向导,如在“时钟向导配置”对话框的“板”选项卡中指定的那样。

点击好吧继续。

4.8

在Board选项卡中,右键单击USB UART并选择连接板组件

在弹出的对话框中,将USB UART组件连接到AXI Uartlite IP核的UART端口。在设计中实例化的IP可以自定义设置它的波特率,以及其他一些选项。对于本指南而言,使用默认设置就可以了。

4.9

单击添加IP按钮(),并搜索“MicroBlaze”。选择MicroBlaze从结果列表中,按输入在键盘上继续。

4.10

点击块自动化运行在屏幕顶部的绿色条中。这将启动一个对话框,允许MicroBlaze的初始配置和几个对设计功能至关重要的不同IP核。

在运行块自动化对话框中,确保MicroBlaze_0所有自动化在左边的面板中被选中并选中。

有许多不同的选择。出于本指南的目的,将这些选项设置为下面括号中的值。

  • 本地内存32 kb):这个选项允许选择处理器可用的内存数量。要在电路板上运行的程序必须能够容纳在这个内存中,而这个内存必须容纳在这个块中内存可在板上。
  • 本地内存ECC没有一个):该选项启用或禁用本地内存中的错误校正。
  • 缓存配置没有一个):这个选项允许选择缓存的大小。如果需要,这可以用来加速内存访问。
  • 调试模块调试只):这个选项允许用户选择要使用的硬件调试特性的范围。
  • 外围AXI港口启用):该选项启用或禁用MicroBlaze块上的AXI主端口,该端口用于将处理器连接到许多不同的Xilinx提供的外设IP核。
  • 中断控制器无节制的):这个选项让用户选择是否自动生成一个中断控制器,它可以用来触发处理器处理时序关键功能。
  • 时钟连接/ clk_wiz_0 clk_out1):这个选项允许用户选择应该使用哪个时钟源来为处理器计时。这可以是设计中已经存在的时钟,或者块自动化可以自动生成一个新的时钟。

点击好吧继续。

4.11

为了连接Uartlite和GPIO外围设备到MicroBlaze块,单击连接自动化运行.与Run Block Automation对话框类似,对话框左侧的窗格包含可以自动化的事情的列表。在这种情况下,axi_gpio_0和axi_uartlite_0的AXI连接,以及MicroBlaze的重置时钟向导的外部重置端口都是可用的。

在旁边的方框上打勾所有自动化以确保这三个连接都能完成。

可以通过选择列表中的S_AXI条目并更改clock connection选项中的值来更改AXI连接的时钟源。确保将此选项设置为汽车/ clk_wiz_0 clk_out1对于这两个AXI连接中的每一个。

可以通过选择列表中的ext_reset_in条目并更改Select Board Part Interface选项中的值来更改MicroBlaze的重置时钟向导的重置源。确保这个选项是设置为自定义

点击好吧继续。

5.生成比特流

5.1

单击验证设计按钮(让Vivado确认一切正常。

点击好吧继续。

注意:在这个阶段,一些Zynq板可能会产生与PCW_UIPARAM_DDR_DQS_TO_CLK_DELAY参数相关的严重警告。这些警告是可以忽略的,不会影响项目的功能。有关更多信息,请参阅主板参考手册中的硬件勘误表部分。

5.2

在生成比特流之前需要做的最后一件事是创建一个包装文件.该源文件将块设计并将其解释为硬件设计语言,以便综合和实现工具能够正常工作。中右键单击块设计来源控件左侧窗格中的块设计窗格-这个窗格可能有董事会当前所选选项卡。

在右键菜单中,选择创建高密度脂蛋白包装.在弹出的确认对话框中,确保让Vivado管理包装和自动更新在选项列表中选中。如果需要对包装器文件进行手动更改,则可以选择这里的另一个选项,但除了高级用户外,不建议这样做。点击好吧让Vivado完成包装文件的制作。

5.3

有了经过验证的设计和顶层模块,现在就可以生成位流。的开始Vivado指南更详细地解释了这个过程,但现在,单击产生的比特流按钮流导航器

5.4

在下一个对话框“No Implementation Results Available”中,Vivado将询问是否运行Synthesis and Implementation。这些步骤是生成比特流所必需的,所以单击是的

5.5

弹出的对话框有几个选项可供选择。选择启动在本地主机上运行来实际生成比特流。另一个选择是只生成脚本它不会生成位流,而是在不同的机器上生成位流所需的脚本。的就业人数字段允许用户更改Vivado所运行的计算机资源的使用方式。对于复杂的设计,这个过程可能需要一些时间,因此建议投入尽可能多的资源。

选择启动在本地主机上运行并点击好吧继续。

5.6

一旦生成比特流,这可能需要相当长的时间(有时超过30分钟,这取决于Vivado运行的计算机),Vivado将询问下一步要做什么。本指南不需要任何可用选项,因此单击取消

6.发射Vivado SDK

在Vivado SDK可以启动之前,它需要提供一个硬件切换文件,其中包含位流和关于安装在设计中的外设的各种其他信息。

6.1

文件下拉,选择出口然后出口的硬件.该函数收集SDK对FPGA编程和控制设计中实例化的硬件所需的所有文件,并将它们放在一个地方。

6.2

确保包括比特流框,使FPGA可以通过Vivado SDK进行编程。的出口的位置<本地项目>默认情况下。这意味着Vivado将在项目目录中创建一个名为'<项目名称> '的新目录。。可以找到Hdf ' -。如果为硬件切换文件选择了不同的位置,请确保记住它的位置。

重要的

不要在导出位置路径中使用空格。这将导致Vivado出现问题。而是使用下划线,破折号,或CamelCase

点击好吧继续。

6.3

略低于出口文件下拉,选择发射SDK

6.4

弹出的对话框将告诉Vivado在哪里找到导出的文件,以及在哪里创建SDK工作区。确保设置出口的位置到之前选择的位置。的工作空间字段是<本地项目>默认情况下。这意味着Vivado将在项目目录中使用一个名为'<项目名称> '的目录。保存在Vivado sdk中创建的源代码和项目。如果该目录不存在,将创建该目录。如果需要更改其他位置,可以更改此位置,但建议保持原样。

重要的

不要在工作空间路径中使用空格。这将导致Vivado出现问题。而是使用下划线,破折号,或CamelCase

点击好吧继续。

7.创建一个新的C项目

7.1

Vivado SDK现在将启动,并将导入硬件定义,创建一个只包含hw_platform项目的工作区。这个项目包含从Vivado导出的文件。本指南只有几个相关的窗格。

  • Project Explorer,可以在窗口的左边找到,它显示了导入到工作区中的所有项目,每个项目都可以展开以查看源、脚本和它们包含的其他文件。
  • 文件视图,直接在窗口的中心,显示当前打开的文件。在启动SDK后,将显示从Vivado导出的硬件平台的概述。注意,阿喜GPIOcell包含在地址映射中,以及IP块列表中相应的条目。

7.2

为了创建一个项目来存储C源代码,单击文件在顶部工具栏中,后面是应用程序项目

7.3

在New Project对话框中,为项目指定一个名称,并确保C选择为语言目标软件盒子。

重要的

不要在项目名称中使用空格。这将导致Vivado出现问题。而是使用下划线,破折号,或CamelCase

点击下一个继续。

7.4

从“可用模板”列表中选择空应用程序,然后单击完成

7.5

展开新创建的项目——不是它的董事会支持包——然后展开“src”文件夹。右键单击“src”文件夹并选择新建→源文件从菜单中。

7.6

命名新源文件c,然后单击完成

7.7

新的主文件现在将在文件视图窗格中打开。将代码复制粘贴到右边的文件中,然后点击ctrl s保存文件并生成项目。

//AXI GPIO驱动程序#include " XGpio .h" //通过UART发送数据#include "xil_printf.h" //关于AXI外设的信息#include "xparameters.h" int main() {XGpio GPIO;u32 btn领导;XGpio_Initialize (&gpio 0);XGpio_SetDataDirection (&gpio 2 0 x00000000);//设置LED GPIO通道三状态为All Output XGpio_SetDataDirection(&gpio, 1, 0xFFFFFFFF);//设置BTN GPIO通道三状态为All Input while (1) {BTN = XGpio_DiscreteRead(&gpio, 1);if (btn != 0) //当按下任意按钮时,打开所有led灯led = 0xFFFFFFFF;Else led = 0x00000000;XGpio_DiscreteWrite (&gpio 2领导);Xil_printf ("\rbutton state: %08x", btn); } }

8.程序和运行设计

下一步是在FPGA上编写位文件,并在处理器上运行C源程序。

8.1

从顶部工具栏中选择Xilinx工具,然后FPGA程序

8.2

保持Program FPGA对话框中的所有设置不变,然后单击程序.这只是对FPGA编程,而不是处理器,所以这是下一个。

8.3

中右键单击应用程序项目Project Explorer,然后选择运行As→在硬件上启动(系统调试器)

9.通过UART接收消息

9.1

为了接收由项目的C源代码中的'xil_printf'语句发送的UART消息,建议使用像这样的串行控制台应用程序Tera术语.必要的串口设置是由Zynq块的配置或AXI Uartlite块的定制设置决定的。通过这个过程,FPGA板的分配的串口可以确定很大程度上取决于操作系统连接的计算机正在运行-在Windows系统中,请查看设备管理器。检查安装和使用串行终端仿真器教程获取更多信息。

通常这些设置将是8位数据位没有奇偶校验位1停止位波特率为115200Zynq和9600默认为MicroBlaze。


恭喜你!

该项目现在将在董事会上运行。按下按钮看led开关。使用Tera Term以十六进制方式查看按钮数据。


下一个步骤

更复杂的IPI设计示例(包括在MicroBlaze设计中使用DDR内存的示例)可以从目标板的资源中心链接到这个列表