Nexys 4 DDR - MicroBlaze入门

重要!

这个指南已经过时了,可以找到更新的指南在这里

概述

本指南将逐步介绍使用Vivado IP Integrator为Nexys 4 DDR FPGA板创建基于Microblaze的硬件设计。

在本教程的最后,您将拥有:

  • 在Xilinx Vivado中创建了一个基于Microblaze的硬件(HW)设计
  • 在Xilinx Vivado SDK(软件开发套件)中创建了一个.c项目,用于使用上一步中显示的硬件设计显示Hello World
  • 在SDK控制台和Tera Term上显示最终输出

先决条件

硬件

  • Digilent Nexys 4 DDR FPGA板和微型USB电缆用于UART通信和JTAG编程

软件

  • Xilinx Vivado 2015。X与SDK包。

董事会的支持文件

  • 董事会的支持文件

教程

MicroBlaze是来自Xilinx的软IP核心,它将完全在Xilinx FPGA通用内存和逻辑面料内实现微处理器。对于本教程,我们将使用Vivado IP Integrator Tool添加MicroBlaze IP块。

除了MicroBlaze IP块之外,我们还希望在Nexys 4 DDR上使用DDR2 SDRAM组件。因此,MIG(内存接口发生器)IP块将被添加到我们的设计中。

最后,将增加一个UART(通用异步接收/发送器)IP块,用于主机PC和运行在Nexys 4 DDR上的软处理器核心之间的通信。

一般的设计流程

I. Vivado

  • 打开Vivado,选择“Nexys 4 DDR板”
  • 创建一个新的Vivado项目
  • 在新项目中创建空块设计工作区
  • 使用IP集成商工具添加所需的IP块并构建硬件设计
  • 验证和保存块设计
  • 创建HDL系统包装器
  • 运行设计综合和实现
  • 生成一些文件
  • 导出硬件设计,包括生成的位流文件到SDK工具
  • 发射SDK

现在硬件设计被导出到SDK工具中。Vivado到SDK的转换是通过Vivado内部完成的。我们将使用SDK创建一个软件应用程序,通过从Vivado导入硬件设计信息,该应用程序将使用定制的单板接口数据和FPGA硬件配置。

2SDK

  • 创建新的应用程序项目,然后选择默认的Hello World模板
  • FPGA程序
  • 通过选择正确的UART COM端口和波特率来运行配置

1.创建一个新项目

当你第一次运行Vivado时,这将是一个主启动窗口,你可以在这里创建一个新项目或打开一个最近的项目。

1.1)点击创建新项目.选择项目名称和位置没有空格.对于项目名称、文件名和位置路径来说,这是一个重要的命名约定。下划线可以很好地替代空白。为Vivado Projects创建一个专用文件夹是一种很好的做法,最好使用尽可能小的路径长度。例如:C: / Vivado_Projects。命名您的项目,并选择项目位置,然后单击下一个

1.2)选择项目类型为RTL项目.离开不要指定来源框未选中并单击下一个

1.3)如果您遵循了董事会支持文件Wiki指南,然后单击下一步并选择董事会.从筛选器选项中为供应商、显示名称和板修订做出必要的选择。在下4 DDR应在选择列表中显示。选择正确的板名称中的不匹配会导致错误。

1.4)显示新项目设计来源和目标设备的摘要。点击完成


2.创造新的街区设计

2.1)这是主要的项目窗口,你可以创建一个基于IP的块设计或添加基于RTL的设计源。左边的流导航面板提供了多个选项,如何创建硬件设计,执行模拟,运行合成和实现,并生成一个比特文件。您还可以使用硬件管理器直接从Vivado为RTL项目生成位文件来编程。对于我们的设计,我们将使用IP Integrator创建一个新的块设计。

2.2)在左边你应该看到流程导航器。选择创建块设计IP集成商。为您的设计命名,不要有任何空格。

2.3)创建一个空的设计工作区,你可以添加IP块。单击添加IP核 添加IP图标。这将打开Xilinx IP存储库中预构建的IP块的目录。搜索“Microblaze”,双击它,将IP块添加到您的空设计。


3.添加Microblaze IP和定制

3.1)这是Xilinx Microblaze的IP区块。添加新的IP块时,用户可以通过单击块自动化运行消息提示或双击块本身。

3.2)选择块自动化运行和自定义助理窗口将打开默认设置。

3.3)在块选项中更改默认设置,如下所示,然后单击好吧.这将自定义块与我们的新用户设置。

3.4)运行区块自动化将自动生成一组额外的IP区块,这些IP区块将根据上一步选择的选项自动添加到我们的硬件设计中。请先不要单击“运行连接自动化”。


4.自定义时钟向导IP块

4.1)双击时钟向导(clk_wiz_1) IP块。

4.2)选择系统时钟对于clk_in1。

4.3)选择输出时钟选项卡。

4.4)选择clk_out2.输出频率为“200.000”(MHz)和设置重置类型作为活性低.左侧面板显示GUI块及其内部设置的表示。观察复位引脚现在将读取为resetn.这是图形方式表示有效低的内部设置。

4.5)现在移到端口重命名选项卡。这将为您提供时钟向导IP块的输入和输出的摘要。点击好吧完成时钟向导的块自动化。还没有选择“运行连接自动化”


5.添加UART IP块

5.1)去 添加IP并搜索“UART”。

5.2)选择AXI UartliteIP块。

5.3)这将为现有设计添加UART块。我们需要一个UART控制器来在主机-CC和Nexys 4 DDR硬件上的终端窗口之间进行通信。


6.第一次运行连接自动化

6.1)现在选择连接自动化运行设计师的帮助条形消息提示。这将打开运行连接自动化窗口。选择ext_reset_in如图所示。接口的描述将与可用的信号选项一起显示。选择重置作为板零件界面。

6.3)现在选中所有可用的连接,单击好吧.完成此步骤将连接到此时添加和自定义的所有IP块。除了执行可用IP块的自动连接外,还调用新的IP块microblaze_0_axi_periph将添加到我们的设计。两个信号针重置sys_clock也将被添加。引脚信号指向右边,表明它们是时钟向导块(clk_wiz_1)和重置时钟向导块(rst_clk_wiz_1_100M)的输入。

请注意resetn输入引脚和clk_out2.输出引脚clk_wiz_1.块没有连接到任何有效的信号。我们将手动连接resetn销的重置信号。这clk_out2.PIN将在以后手动连接。

此时不选择运行连接自动化


7.第一次手动连接

7.1)手动连接信号引脚重置resetn输入的clk_wiz_1.块。将光标指针放在resetn输入后,您应该会看到光标变为钢笔的图形表示形式。的任何地方拖放重置线信号。
7.2)将突出显示手动连接。此时不选择运行连接自动化


8.添加和自定义内存接口发生器IP块

内存接口生成器将是我们在设计中添加的最后一个IP块。

8.2)添加MIG IP块后,点击块自动化运行
8.3)单板部件接口显示为DDR2_SDRAM。点击好吧运行块自动化。

8.4)运行MIG块自动化时,您将看到此特定错误消息[BD 41-1273]。你现在可以忽略这个。它不会以任何方式影响您的设计。MIG块将根据已下载为Nexys 4 DDR的支持文件配置。单击“确定”以解雇此消息。您会发现MIG IP块现在具有额外的输入和输出引脚,必须连接到有效信号。


9.第二次运行连接自动化

9.1)现在点击运行连接自动化的消息提示符设计师的帮助酒吧。

9.2)在连接自动化列表中只选择mig_7series_0不要在此步骤中选择MicroBlaze部分.单击OK。

9.3)将建立并显示新的信号连接。


10.第二个手动连接

10.1)手动连接clk_out2.输出端口信号clk_wiz_1.sys_clk_i输入端口mig_7series_0块。clk_out2.信号是200兆赫我们在时钟向导块自动化步骤中添加了时钟信号。

10.2)选择蓝色圈出的按钮。这是 重新制定布局选项将重新排列设计中的IP块。


11.使DDR2信号外部

11.1) MIG块应该读取mig_7series_0
把你的光标放在这个符号上||旁边的DDR2 +港口名称。你的光标会变成铅笔的样子。右键点击这里,在下拉列表中选择使外部或者或者左键单击||使用键盘快捷键,“Ctrl + t”
这将创建一个新的输出端口连接,标签为DDR2.

11.3)重新生成一次布局。


12.验证设计

12.1)选择 验证设计.这将检查设计和连接错误。

在设计验证步骤之后,我们将继续创建一个HDL系统包装器。


13.创建HDL系统包装器

13.1)如本步骤所突出显示的,右键单击design_1并选择创建高密度脂蛋白包装.让Vivado管理包装器并进行选择好吧

13.2)一个系统包装文件将生成,并将显示在tcl控制台中通知我们套管文件已生成。


14.生成一些文件

14.2)流动导航器左侧的面板,下程序和调试选择产生的比特流选项。如果您还没有保存您的设计,则会提示保存块设计。

14.3)将开始比特文件生成。该工具将运行合成实现.在合成和实现都成功完成后,将创建实际的位文件。你会发现在项目窗口的右上角运行着合成和实现的状态栏。

位流生成后,屏幕上可能会弹出消息提示。您不必为这个演示打开已实现的设计。只需点击取消


15.将硬件设计导出到SDK

15.1)在窗口左上角,从工具栏上点击文件并选择出口的硬件
这将导出硬件设计与系统包装软件开发工具- Vivado SDK。通过选中复选框,确保包含生成的位流

15.2)将创建一个新的文件目录Hello_World。SDK类似于Vivado硬件设计项目的名称。另外两个文件,.sysdef.hdf也创造了。这一步基本上创建了一个新的SDK工作区。
如果您浏览到驱动器上创建Vivado项目的位置,您将看到在SDK下创建了新的文件夹。请参见下面屏幕截图中的TCL控制台消息。现在设计已经导出到软件开发工具包(Software Development Kit, SDK)工具,下一步就是启动SDK工具。


16.启动SDK

16.1)去文件并选择发射SDK并单击OK。将启动在Vivado设计项目位置本地创建的SDK文件。从Vivado过渡到SDK的过程已经完成。


17.在SDK内部的Vivado

17.1)将打开一个新的SDK窗口。硬件设计规范和包含的IP块显示在system.hdf文件。SDK工具是独立于Vivado的,也就是说,从这里开始,你可以在导出的HW设计之上用C/ c++创建你的SW项目。如果需要,您也可以直接从Vivado项目主目录中创建的SDK文件夹中启动SDK。
现在,如果您需要回到Vivado并更改硬件设计,那么建议关闭SDK窗口,并在Vivado中进行所需的硬件设计编辑。在此之后,您必须按照创建一个新的HDL包装器的顺序,保存设计和位文件生成。这个新的位文件和系统包装器必须导出到SDK。
由于我们此时没有任何HW设计编辑,因此我们将继续创建一个软件应用程序来显示Hello World。

17.2)在主SDK窗口的左下角,您会发现Project Explorer控制板。请注意,名称下有一个主项目文件夹design_1_wrapper_hw_platform_0
design_1是在Vivado中创建的块设计的名称。该硬件平台包含所有的硬件设计定义、已添加的IP接口、外部输出信号信息和本地内存地址信息。
假设在这个时候,你已经关闭了SDK,编辑了你现有的硬件设计,并将你的设计导出到SDK,然后在启动SDK工具后,你会发现一个新的硬件平台,名为:design_1_wrapper_hw_platform_1除了旧的硬件设计,即。design_1_wrapper_hw_platform_0


18.在SDK中创建新的应用程序项目

18.1)去文件在主工具栏中选择新应用程序项目.将弹出一个新的项目窗口。给您的SDK项目一个没有空格的名称,如下所示。确保目标硬件是正确的硬件设计。在我们的例子中,它将是design_1_wrapper_hw_platform_0
例如,你还有另一个硬件设计Project Explorer窗口,则您还将在“目标硬件”下拉选择列表中看到此设计名称。
因为我们只有一个硬件设计design_1_wrapper_hw_platform_0这将是我们的目标硬件。选择创建新的董事会支持包.该工具将自动填充董事会支持包与给定项目名称匹配的名称。
单击Next。


19.从可用的模板中选择Hello World应用程序

19.1)选择你好世界可用的模板,然后单击Finish。

19.2)完成上一个步骤后,你会看到两个新的文件夹Project Explorer控制板:

-display_hello_world包含所有二进制文件,.C和.H(头文件)
-display_hello_world_bsp.哪个是板支持文件夹

display_hello_world是我们的主要工作源文件夹。这也包含了一个重要的文件lscript.ld.这是Xilinx自动生成的链接器脚本文件。双击这个文件打开。


20.验证内存区域映射的链接器脚本文件

20.1)在链接器脚本中,请查看内存区域映射部分盒子。如果你做了制作外部DDR2然后步进目标内存区域必须mig_7series_0
向下滚动以检查这是否适用于所有行。如果任何区域都没有说mig_7series_0,然后单击行下的行内存区域列和选择mig_7series_0

20.2)回到Project Explorer,双击并打开helloworld.csrc文件夹。src代表来源。
这是将打印的主要.c文件你好世界在执行时在控制台中。

21.使用位文件编程FPGA

21.1)确保Nexys 4 DDR已打开,并通过提供的微型USB线缆连接到主机PC。
在快速选择工具栏中,你会发现一个带有红色箭头和三个绿色方框的符号。单击按钮的物理位置在搜索选项卡在主工具栏中。
单击此符号打开程序FPGA窗口。
确保硬件平台是选为design_1_wrapper_hw_platform_0
在软件配置框中ELF文件以块初始化内存列,行选项必须读取bootloop.如果不是,请单击该行并选择bootloop
现在点击程序。


22.运行STDIO连接的配置设置

22.1)在FPGA用位文件成功编程后,从Project Explorer面板上,右键单击display_hello_world在屏幕截图中突出显示的项目文件夹。
在下拉列表的底部,选择运行然后选择运行配置
运行配置窗口分为两个主要部分。在左侧面板中,在Xilinx C / C ++应用程序(GDB)下,选择display_hello_world.ell.
注意:如果您看到display_hello_world调试而不是display_hello_world.ell.在此步骤中,您仍然可以在没有任何问题的情况下运行它。
在这个窗口的右侧,您将看到五个主要的选项卡。选择它的连接选项卡。


23.为STDIO连接选择COM端口

23.1)更改端口名称为正确的UART端口。您可以在下面找到“通信端口名称/编号”设备管理器港口(COM和涡轮).通信端口将显示为USB串口(COM X)其中X是您PC的端口号。对我来说,它表现为COM4..选择波特率作为9600
选中“连接STDIO到控制台”框。如果您让它不选中,如下面所示,连接将不会建立。一定要选中这个框。现在单击Apply和Run。

24.在SDK内置的控制台窗口中显示Hello World输出

24.1)您好世界将在控制台标签上显示,如下所示。


25.可选步骤使用Tera Term终端仿真器

请参阅此链接http://en.wikipedia.org/wiki/Tera_Term知道TERA术语是什么。您可以从此链接下载并安装Tera术语http://ttssh2.sourceforge.jp/index.html.en

25.1)在与Tera Term建立串行连接之前,请确认在SDK中,已存在连接头框下它的连接选项卡运行配置没有启用。
与Tera Term内部正确的通信端口建立串行连接。
SDK运行配置→申请和运行。
Tera Term将作为控制台显示输出。
注意,在SDK的内置控制台窗口中,显示了一条读取的消息COM4端口已被使用表明这一点COM4.港口是通过TERA术语使用的。