开始Vivado


先决条件

在开始本指南之前,请确保安装了Vivado。欲了解更多信息,请参阅我们的安装Vivado指南。

介绍

Vivado起始页

本指南的目标是通过Hello World的硬件世界熟悉Vivado工具,眨眼领导

本指南是使用2016年的Vivado创建的。

1.开始Vivado

窗户
打开开始菜单,然后转到所有程序→Xilinx设计工具→Vivado →Vivado

Linux
打开终端并运行

source  / vivado /  /settings64.sh && vivado

2.起始页

这是Vivado启动后显示的屏幕。下面以图片为指导对按钮进行描述。

1.创建新项目

这个按钮将打开新建项目向导。该向导指导用户创建一个新项目。该向导将在第3节逐步完成。

2.开放项目

这个按钮将打开一个文件浏览器。导航到所需的XPR文件并单击打开打开Vivado中的项目。

3.打开示例项目

这将指导用户基于一个示例项目创建一个新项目。这些项目并不适用于所有设备。

4.开放硬件管理器

这将打开没有关联项目的硬件管理器。如果连接和编程一个设备是用户所需要的一切,这是使用的按钮。

3.创建新项目

3.1

从开始页中,选择创建新项目按钮以启动“新建项目向导”。

3.2

对话框中的文本描述了创建项目所需的步骤。点击下一个继续第一步。

3.3

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

重要提示:不要在项目名称或位置路径中使用空格。这将导致Vivado出现问题。而是使用下划线,破折号,或骆驼香烟盒

3.4

现在该项目有一个名称和一个地方来保存重要文件,我们需要创建必要的源文件。要添加Verilog或VHDL文件,请单击“创建文件”按钮。

3.5

这将打开创建源文件对话框,如下所示。这个对话框对于新文件有三个选项。第一个是文件的类型。这允许在不同的HDL文件类型,Verilog, VHDL, Verilog头和SystemVerilog之间进行选择。最后一种可用的类型是内存文件选项。这是用于内存设备初始化,大多数时候可以忽略。

第二个框用于文件名。输入要创建的文件的名称。包括文件扩展名是可选的,Vivado将根据所选择的文件类型添加一个扩展名。最后一个选项是将文件存储在何处。大多数情况下,这可以被保留为<本地项目>

重要提示:不要在文件名中使用空格。这将导致Vivado出现问题。而是使用下划线,破折号,或骆驼香烟盒

3.6

也可以将源文件导入项目中。在添加资源对话框中单击添加文件按钮并导航到源文件以导入到项目中。除非有原因不,否则确保将源代码复制到项目中复选框以在项目中本地复制源文件。由于文件是复制的,所以对一个项目内的文件所做的任何更改都不会影响原始文件。

3.7.

添加HDL文件后,点击下一个在主对话框中,将显示下一个对话框。此对话框用于将IP添加到项目中。这用于更先进的设计,并超出本指南的范围。点击下一个

3.8

下一节用于添加约束文件。约束文件控制信号如何路由,定义时钟和定义时序约束。点击创建文件按钮打开创建约束文件对话。

3.9

对话框再次呈现三种选项。文件名和文件位置具有与其中相同的属性创建源文件对话。什么是可以创建的文件类型。唯一可用的选项是XDC,它代表Xilinx设计约束。此文件将定义时钟,引脚映射和时序限制。

重要提示:不要在文件名中使用空格。这将导致Vivado出现问题。而是使用下划线,破折号,或骆驼香烟盒

3.10

既然已经创建了必要的文件,现在就该选择目标设备了。有两种选择目标的方法。第一个是来自实际的板上组件,第二个是来自安装适当的板文件和挑选板。

3.10.1

要从板上组件中选择一个目标,找到集成电路的部件号,并在选择列表中找到它。我们的电路板有两个地方可以找到零件号。首先是看黑板上的实际组成部分,试着辨别文字。另一种是看参考页面对于目标板。

3.10.2

要从电路板列表中选择一个目标,请安装董事会文件在创建新项目之前。然后从列表中选择要用作目标的棋盘。

3.11

下一节给出了在整个向导中选择的选项的摘要。验证信息是否正确并单击完成

3.12

由于创建了新的源文件,Vivado现在将显示一个新的对话框,用于为它被告知要创建的每个新源文件定义一个模块。在这里可以定义模块的输入和输出。

每个部分都可以解释如下:

描述 例子
端口名称 给新端口的名称 发光二极管
方向 端口是输入、输出还是双向的 输出
公共汽车 端口是一个总线/多个位吗? X
最高有效位 最重要位是什么? 7.
LSB 最小有效位是多少? 0.

如图所示填写clk和led的端口定义,然后单击好吧

4.流导航器

流导航器是需要了解的最重要的窗格。它是用户如何在不同的Vivado工具之间导航。

导航器分为七个部分:

  • 项目经理
    • 允许快速访问项目设置、添加源、语言模板和IP目录
  • IP积分器
    • 创建块设计的工具
  • 模拟器
    • 允许开发人员在编程设备之前验证输出
  • RTL分析
    • 让开发人员看到工具是如何解释他们的代码的
  • 合成
    • 提供访问合成设置和合成后报告
  • 实现
    • 访问实现设置和实现后报告
  • 程序和调试
    • 访问位流生成和硬件管理器的设置

5.项目经理

这个工具是大多数开发将要发生的地方,也是创建新项目后打开的初始工具。

项目管理器由四个窗格、源、属性、结果和工作区组成。

Sources窗格包含项目层次结构,用于打开文件。文件夹结构是这样组织的,以便HDL文件保存在设计来源文件夹,约束保持在下面约束文件夹下,并保存仿真文件模拟来源文件夹中。通过双击Sources窗格中的相应条目,可以在Workspace中打开文件。也可以通过右键单击要添加文件的文件夹并选择来添加源添加资源或点击添加资源按钮()。

Properties窗格允许查看和编辑文件属性。当在Sources窗格中选择一个文件时,它的属性将显示在这里。此窗格通常可以忽略。

“结果”窗格包含几个用于调试项目的不同的有用工具。最重要的是要知道消息工具。该工具解析Tcl控制台的错误、警告和其他重要信息,并以一种有用的方式显示它。

TCL控制台是一种工具,允许直接运行命令而不使用主用户界面。有些消息可以直接指向TCL控制台,以获取有关错误的更多信息。

对于快速跳转到Vivado根据设计生成的众多报告中的任何一个,Reports工具非常有用。这些报告包括功率、时间和利用率等等。

日志显示最新的合成、实现和模拟运行的输出。没有必要深入研究这一点,因为报告和消息视图以更可读的格式在日志中存储信息。

最后一个工具是Design Runs。使用此工具可以编辑运行设置并创建新的运行。当针对具有相同设计的多个设备时,此工具非常有用。

项目管理器中最重要的窗格是工作区。工作区是打开报告以供查看和打开HDL/约束文件以供编辑的地方。最初,工作区显示项目摘要,其中显示来自一些报告的一些基本信息。

6.编写HDL和约束

让板子眨眼领导,代码需要在Verilog和约束文件中写入。打开Verilog文件(本指南中的Top.v)此窗口应在工作区区域打开。

在第26和27行之间添加以下代码:

reg[24.0.]数数=0.;分配引领=数数[24.];总是@posedgeclk的)的)数数< =数数+1;

如果Genesys 2,NetFPGA-1G-CML或NetFPGA-Sume正在目标,请清除整个文件的内容并用以下内容替换:

模块输入clk_p输入clk_n输出引领的);线clk;IBUFGDS.的)clk_inst..Oclk的).Iclk_p的).IBclk_n的)的);reg[25.0.]数数=0.;分配引领=数数[25.];总是@posedgeclk的)的)数数< =数数+1;endmodule

这是不同的,因为这些电路板有一个使用差分逻辑的输入时钟。如果你想了解更多,请阅读这篇文章低压差分信号

一旦添加源文件,将如下所示:

现在打开XDC文件。现在它是空的,所以根据目标板粘贴下面的代码。

约束文件源代码
董事会 约束代码
ar
set_property -dict {PACKAGE_PIN E3 IOSTANDARD LVCMOS33} [get_ports clk] create_clock -add -name sys_clk_pin -period 10.50 -波形{0 5}[get_ports clk] set_property -dict {PACKAGE_PIN H5 IOSTANDARD LVCMOS33} [get_ports led]
Basys 3
set_property -dict {PACKAGE_PIN W5 IOSTANDARD LVCMOS33} [get_ports clk] create_clock -add -name sys_clk_pin -period 10.50 -波形{0 5}[get_ports clk] set_property -dict {PACKAGE_PIN U16 IOSTANDARD LVCMOS33} [get_ports led]
CmodA7
set_property -dict {package_pin l17 iostandard lvcmos33} [get_ports clk] create_clock -add -name sys_clk_pin -period 83.33 -waveform {0 41.66} [get_ports clk] set_property -dict {package_pin a17 iostandard lvcmos33} [get_ports led]
Genesys 2
set_property -dict {package_pin ad11 iostandard lvds} [get_ports clk_n] set_property -dict {package_pin ad12 iostandard lvds} [get_ports clk_p] create_clock -period 5.000-name sys_clk_pin -waveform {0.000 2.500} -add [get_ports clk_p] set_property -dict {package_pinT28 iostandard lvcmos33} [get_ports LED]
在下4
set_property -dict {PACKAGE_PIN E3 IOSTANDARD LVCMOS33} [get_ports clk] create_clock -add -name sys_clk_pin -period 10.50 -波形{0 5}[get_ports clk] set_property -dict {PACKAGE_PIN T8 IOSTANDARD LVCMOS33} [get_ports led]
在下4 DDR
set_property -dict {PACKAGE_PIN E3 IOSTANDARD LVCMOS33} [get_ports clk] create_clock -add -name sys_clk_pin -period 10.50 -波形{0 5}[get_ports clk] set_property -dict {PACKAGE_PIN H17 IOSTANDARD LVCMOS33} [get_ports led]
在下视频
set_property -dict {PACKAGE_PIN R4 IOSTANDARD LVCMOS33} [get_ports clk] create_clock -add -name sys_clk_pin -period 10.50 -波形{0 5}[get_ports clk] set_property -dict {PACKAGE_PIN T14 IOSTANDARD LVCMOS25} [get_ports led]
netfpga-1g-cml
set_property -dict {PACKAGE_PIN AA2 IOSTANDARD LVDS} [get_ports clk_n] set_property -dict {PACKAGE_PIN AA3 IOSTANDARD LVDS} [get_ports clk_p] create_clock -add -name sys_clk_pin -period 5.50 -波形{0 2.5}[get_ports clk_n] set_property -dict {PACKAGE_PIN E17 IOSTANDARD LVCMOS33} [get_ports led]
NetFPGA-SUME
set_property -dict {PACKAGE_PIN G18 IOSTANDARD LVDS} [get_ports clk_n] set_property -dict {PACKAGE_PIN H19 IOSTANDARD LVDS} [get_ports clk_p] create_clock -add -name sys_clk_pin -period 5.50 -波形{0 2.5}[get_ports clk_n] set_property -dict {PACKAGE_PIN AR22 IOSTANDARD LVCMOS15} [get_ports led]
ZedBoard
set_property -dict {PACKAGE_PIN Y9 IOSTANDARD LVCMOS33} [get_ports clk] create_clock -add -name sys_clk_pin -period 10.50 -波形{0 5}[get_ports clk] set_property -dict {PACKAGE_PIN T22 IOSTANDARD LVCMOS33} [get_ports led]
Zybo
set_property -dict {PACKAGE_PIN L16 IOSTANDARD LVCMOS33} [get_ports clk] create_clock -add -name sys_clk_pin -period 8.00 -波形{0 4}[get_ports clk] set_property -dict {PACKAGE_PIN M14 IOSTANDARD LVCMOS33} [get_ports led]

完成之后,代码就准备好“编译”了。

8.合成、实现和比特流生成

为了创建一个可用于对目标程序进行编程的文件,需要进行“编译管道”。

这从合成开始。综合将HDL文件转变为基于定时和I / O约束的晶体管级别描述。运行综合单击在工具栏或在流导航器中。然后,Synthesis的输出被传递给Implementation。

实现有几个步骤。始终运行的步骤是Opt Design(优化设计以适应目标FPGA)、Place Design(将设计布局到目标FPGA结构中)和Route Design(通过结构的路由信号)。要运行实现,单击其中之一在工具栏或在流导航器中。然后将输出传递给Bitstream Generator。

比特流生成器产生编程FPGA所需的最终输出。要运行比特流生成,请单击在工具栏或在流导航器中。没有更改设置,生成器将创建一个BIT文件。

9.硬件管理器

硬件管理器用于编程目标设备。

给设备编程的第一步是连接它。有两种方法可以做到这一点。

1.打开新的硬件目标

第一种方法是手动打开目标。如果硬件连接到另一台计算机,这是必需的。要进入“打开硬件目标”向导,可以打开硬件管理器并单击绿色横幅中的链接或单击按钮下方的“Flow Navigator”中的.从打开的下拉菜单中选择.向导将打开,单击下一个

下一个屏幕询问硬件服务器是否是本地的或远程。如果电路板连接到主计算机,请选择本地,如果它连接到另一台机器选择遥控器并填写主机名港口适当的字段。点击下一个

此屏幕提供连接到硬件服务器的设备列表。如果只有一个连接它应该是唯一显示的设备。如果有多个连接确定要连接的设备的序列号并在列表中找到它。点击下一个

最终屏幕显示了向导中选择的选项的摘要。验证信息并单击完成.电路板现在连接到硬件管理器。

2.Auto-Connect

第二种方法是自动打开目标。为了到达按钮打开硬件管理器,然后单击绿色横幅中的链接或单击按钮下方的“Flow Navigator”中的.从打开的下拉菜单中选择.Vivado将尝试在本地计算机上找到运行的硬件服务器,并将连接到服务器上的设备。


编程

要使用前面生成的BIT文件对设备进行编程,可以单击绿色横幅中的链接或单击按钮下方的“Flow Navigator”中的.从打开的下拉菜单中选择要编程的设备(例如:)和以下窗口将打开:

比特流文件应使用前面生成的位文件填充字段。如果没有,请单击单击字段右边末端的按钮,并导航到
<项目目录> / <项目名称> .runs / impl_1/,并选择位文件(示例:)。现在点击程序.这将连接到电路板,清除当前配置以及使用新位文件的程序。