Vivado IP Integrator和Xilinx SDK入门
先决条件
硬件
-
勤奋的FPGA系统板
-
MicroUSB编程电缆/ s
软件
-
Xilinx Vivado 2018.2和Digilent板文件
-
其他版本的Vivado可能可以工作,但功能不能保证
-
看到安装Vivado和Digilent板文件教程获取更多信息。
-
-
串行终端仿真程序
-
看到使用串行终端模拟器教程获取更多信息。
-
注意:如果您正在使用包含Vitis(2019.2或更新)的Vivado版本,请查看开始与Vivado和Vitis为Baremetal软件项目
介绍
本指南将解释Digilent FPGA板的IP积分器设计流程的大部分主要功能的使用。在演示的最后,一个简单的设计,接收数据从板上开关和控制led将被创建。
1.创建一个新的IPI项目
1.3
第一步是设置项目的名称。Vivado将在生成其文件夹结构时使用此名称。
重要的
不要在项目名称或位置路径中使用空格。这将导致Vivado出现问题。而是使用下划线,破折号,或CamelCase.
点击下一个继续。
1.5
这个屏幕选择项目的目标部件。如果还没有安装Digilent的Board文件,Digilent的Board文件将不会出现在这个列表中——如果是这样,返回本指南的先决条件部分,并按照该教程的链接。选择董事会选项卡,然后从列表中搜索、查找和选择目标板。点击下一个.
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.7
的地址编辑器选项卡,包含在与Diagram相同的窗格中,描述处理器可以找到每个安装的AXI外设所在的内存地址。不建议在此窗格中更改值,高级用户除外。块设计验证过程中引用未映射外设的错误可以通过右击此窗格中的任何位置并选择来解决Auto-Assign地址.
注意:通过Vivado无法访问此窗格GUI直到一个处理器和一个或多个AXI IP核被添加到块设计中。
3.12
控件顶部的工具栏图窗格有大量的按钮,都做不同的事情:
此外,可以通过直接与“关系图”窗格的图形界面交互来更改设计。对象可以通过单击和拖动来移动。将鼠标悬停在端口上,直到铅笔光标()出现,然后画一条线到另一个端口、引脚或电线。
对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.4
点击块自动化运行在屏幕顶部的绿色条中。这将启动一个对话框,允许Zynq块的初始配置。
在运行块自动化对话框中,确保processing_system7_0下所有自动化在左边的面板中被选中并选中。
有几种不同的选择。出于本指南的目的,将这些选项设置为下面括号中的值。
-
外部接口(不可配置的):显示Zynq区块的不同接口端口,这些端口会自动连接到设计之外。
-
固定的IO:表示Zynq芯片可编程系统端与硬件外设的连接。这包括一个到主机的UART连接。
-
DDR:表示与单板上的外部DDR内存的连接。
-
-
应用板预设:(检查将Digilent's Board Files中的配置设置应用于Zynq IP。
-
穿越触发/:(禁用允许用户设置与Xilinx SDK一起使用的硬件/软件断点。这个特性超出了本指南的范围。
点击好吧继续。
- 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.5
的时钟配置页面包含重要设置,允许用户以不同的速度向FPGA提供额外的时钟,以及调整几个IO外设的时钟频率。注意到PL织物时钟下拉菜单,勾选FCLK_CLK1-3中的一个,将提供来自Zynq块的额外时钟输出,在所提供的位置或附近请求的频率.
-
-
- Microblaze
-
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.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
点击好吧继续。
注意:在这个阶段,一些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所运行的计算机资源的使用方式。对于复杂的设计,这个过程可能需要一些时间,因此建议投入尽可能多的资源。
选择启动在本地主机上运行并点击好吧继续。
6.发射Vivado SDK
在Vivado SDK可以启动之前,它需要提供一个硬件切换文件,其中包含位流和关于安装在设计中的外设的各种其他信息。
6.2
确保包括比特流框,使FPGA可以通过Vivado SDK进行编程。的出口的位置是<本地项目>默认情况下。这意味着Vivado将在项目目录中创建一个名为'<项目名称> '的新目录。
重要的
不要在导出位置路径中使用空格。这将导致Vivado出现问题。而是使用下划线,破折号,或CamelCase.
点击好吧继续。
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.3
在New Project对话框中,为项目指定一个名称,并确保C选择为语言在目标软件盒子。
重要的
不要在项目名称中使用空格。这将导致Vivado出现问题。而是使用下划线,破折号,或CamelCase.
点击下一个继续。
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源程序。
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内存的示例)可以从目标板的资源中心链接到这个列表.