如果您正尝试开始使用 Vivado 设计套件,本指南将为您提供帮助。或许您只是在寻找一种轻松上手 Xilinx 可编程逻辑器件(甚至是通用可编程逻辑器件)的方法,在这种情况下,本指南依然能为您提供帮助,但您需要将 Xilinx 可编程逻辑器件和 Vivado 设计套件作为起始平台。本指南旨在帮助您在实际的可编程逻辑硬件(即真实的物理器件)上开展开发工作,这不仅是一种实用的学习方式,还能为您着手开发自己的应用程序奠定必要基础。
您可以使用任何基于与 Vivado 兼容的可编程逻辑器件的开发板。目前,所有较新的 Xilinx 器件均适配 Vivado,包括其 7 系列和 UltraScale 器件。为了帮助可编程逻辑新手入门,本指南中的示例选用了 Digilent Basys 3 开发板。
Digilent 的 Basys 3 是一款面向 FPGA 初学者的培训板,基于 Xilinx Artix-7 器件构建。Xilinx 提供了其 Vivado 设计套件的免费版本,称为 WebPACK。如果您在其网站上注册并提供一些基本信息,他们还会为您提供免费且永久有效的许可证。
准备工作
-
您当然需要下载并安装 Xilinx Vivado 设计套件。只要您的目标可编程逻辑器件受其支持,免费的 WebPACK 版本就足以完成本指南的学习(本指南的创建使用了 WebPACK 2015.4 版本)。如果您在安装和设置免费许可证方面需要帮助,Digilent 提供了有用的指南。
-
您还需要一块合适的开发板。如果您还没有,可以购买 Digilent Basys 3 开发板。符合条件的客户可以致电 Digi-Key 享受学术优惠价格。
-
Basys 3 开发板不附带 USB 电缆,因此,如果您没有备用的合适类型电缆,可以在购买 Basys 3 时一并购买。或者,如果您希望获得更具通用性和特色的电缆,也可以在购买 Basys 3 时选择这款。
-
如果您使用的开发板需要外部 JTAG 编程器或电源,您当然也需要准备这些设备。Basys 3 开发板已将这些组件集成在板上,但如果您使用的是其他硬件,请查阅可用文档以获取说明。
-
您需要将 JTAG 编程器和 / 或开发板连接到计算机,为其供电,并安装任何必要的驱动程序。
简单起步 - 基本逻辑与输入 / 输出
在这里,您将从极其简单的操作开始,将三个引脚配置为输入,另外三个引脚配置为输出,并在中间添加一些简单的逻辑。以 Basys 3 开发板为例,将使用开发板的前三个开关(SW0-SW2)作为输入,前三个 LED(LD0-LD2)作为输出。
创建新项目
启动 Vivado 后,在启动页面上点击 “创建新项目” 图标。或者,您可以选择File → New Project.
。
新建项目向导将启动,点击“Next >” 按钮继续。
输入项目名称并选择项目位置。请确保两者均不含空格!最好也只使用字母、数字和下划线。如有必要,可在根驱动器(例如 C:\Vivado)中为 Xilinx Vivado 项目创建一个新目录。您可能始终需要选中 “Create project sub-directory” 复选框,这有助于将每个项目的文件整齐地组织在各自的目录中,避免出现问题。点击 “Next >” 按钮继续。
选择 “RTL Project” 单选按钮,并选中 “Do not specify sources at this time”复选框。如果您不选中该复选框,向导将引导您完成一些额外步骤,以便选择添加预先存在的项目,例如 VHDL 或 Verilog 源文件、Vivado IP 模块以及用于器件引脚和时序配置的 .XDC 约束文件。对于第一个项目,您将在稍后添加必要的项目。点击“Next >” 按钮继续。
您需要筛选并选择项目的特定部件编号。您可以从芯片上的标记读取,也可以参考开发板的文档找到其部件编号。就 Basys 3 开发板而言,其搭载的是 Artix-7 芯片,所示的筛选器将帮助您找到突出显示的正确器件。选择正确的器件后,点击“Next >”按钮继续。
点击“Finish” 按钮,Vivado 将按指定创建您的项目。
完成基本项目流程
Vivado 项目窗口包含大量信息,并且在您完成项目步骤的过程中,显示的信息会根据您当前打开的设计部分而变化。在阅读本指南时,请记住这一点,因为如果您没有看到特定的子窗口或子窗口选项卡,可能是您未处于设计的正确部分。
屏幕左侧的“Flow Navigator” 按自然时间顺序从上到下组织了所有主要的项目阶段。您从流程的 “Project Manager” 部分开始,流程导航器旁边的屏幕顶部标题会反映这一点。此标题和流程导航器中相应的突出显示部分将告诉您已打开设计的哪个阶段。
项目管理器
项目设置
首先,在流程导航器的 “Project Manager” 下点击 “Project Settings” 。
这里有许多适用于项目流程所有阶段的设置,但目前只需在 “General”项目设置的 “Target language” 下拉列表中选择 “VHDL”,然后点击“OK” 按钮。
添加源文件
现在,在流程导航器的 “Project Manager ” 下点击 “Add Sources” 。
选择 “Add or create design sources” 单选按钮,然后点击“Next >”按钮。
点击 “Create File”按钮,或点击左上角的绿色 “+” 符号,选择 “Create File…” 选项。
确保在 “Create Source File” 弹出窗口中选中所示选项,为了便于学习,请在 “File name” 中输入 “Basic_Logic”。完成后点击 “OK”按钮。
通常,您可以为 “File name” 输入任何有效名称,但请务必确保不含空格!
点击 “Finish”按钮,Vivado 将打开 “Define Module”窗口。
定义模块
您可以使用 “Define Module”窗口自动为您编写一些 VHDL 代码。可以通过点击左上角的绿色 “+” 符号或直接点击下一个空行来添加额外的“I/O Port Definitions”。 “Entity name” 和 “Architecture name”将是代码中使用的相应 VHDL 标识符,每个 “Port Name” 中输入的内容也将是如此。任何有效的 VHDL 标识符都可用于其中任何一项,但为了便于学习,请按所示输入信息。确保为每个端口设置正确的 “Direction” 。完成后点击 “OK”按钮。
请注意,如果您更愿意从头开始编写自己的代码,只需点击“Cancel” 按钮,Vivado 将在您的项目中创建一个完全空白的 VHDL 源文件。如果您在未定义任何 “I/O Port Definitions” 的情况下点击 “OK”按钮,Vivado 仍将编写基本的 VHDL 代码结构,但端口定义将为空并添加注释,供您稍后取消注释并填写。
还请注意,这里的端口名称与 Basys 3 开发板上用于示例的开关和 LED 的丝印参考标识符相匹配,这是为了方便使用 Basys 3 开发板的用户学习,但初学者不应将此理解为要求;每个名称只是一个任意标识符。
生成的 VHDL 源文件将添加到您项目的 “Design Sources”文件夹中,如图所示。双击它,它将在新选项卡中打开供您查看 / 编辑。这里的所有代码都是由之前的 “Define Module” 窗口生成的,对于本示例,您只需在 “begin” 和 “end” 关键字之间手动输入三行突出显示的代码。
这三行代码是:
LD0 <= SW0;
LD1 <= SW1 and SW2;
LD2 <= SW1 or SW2;
本指南不旨在作为 VHDL 教程,上述代码非常简单,但为了帮助完全不懂 VHDL 的初学者理解预期行为:
- 第一行简单地将输入 “SW0” 直接分配给输出 “LD0”(缓冲区)。
- 第二行将输入 “SW1” 和 “SW2” 的逻辑与分配给输出 “LD1”(与门)。
- 第三行将输入 “SW1” 和 “SW2” 的逻辑或分配给输出 “LD2”(或门)。
正确输入这些行后,从 Vivado 顶部下拉菜单中选择 “文件”→“保存文件”。
RTL 分析
打开详细设计
现在,在流程导航器的 “RTL Analysis” 下点击 “Open Elaborated Design”。您可能还会看到所示的信息弹出窗口,如果是这样,只需点击 “OK”按钮。Vivado 将进行一些处理,然后打开详细设计。
请注意,现在流程导航器中的 “RTL Analysis” 会突出显示,其旁边的标题已从 “Project Manager” 更改为 “Elaborated Design”,以指示您已打开设计的该阶段,并且您看到的窗口与该阶段相关。如果您在流程导航器的 “Project Manager” 和 “RTL Analysis” 之间来回点击,您会看到标题和窗口相应地变化。
查看原理图
您可以点击流程导航器中 “RTL Analysis”阶段下的“Schematic” ,打开一个选项卡,显示先前编写的 VHDL 的原理图表示。
器件引脚分配
打开详细设计后,您现在可以进行实际的可编程逻辑器件引脚分配。如果顶部栏中的下拉菜单尚未选择 “I/O Planning” 视图,请选择它,然后确保您正在查看底部的 “I/O Ports” 选项卡,并点击展开以查看所有可用端口。
端口名称和方向与先前输入的 VHDL 代码匹配。您必须为每个端口输入或从每个下拉菜单中选择一个 “Site” ,以使其获得可编程逻辑器件的有效物理引脚分配。同样,您需要为每个选定的引脚分配适当的 “I/O Std” t,以匹配开发板提供的输入 / 输出组电源轨。
对于使用 Basys 3 开发板的用户,为方便起见,每个端口所示的引脚 “Site”分配将与开发板上的丝印匹配,所有 “I/O Std”选择都应为 “LVCMOS33”。
一切正确输入后,从 Vivado 顶部下拉菜单中选择 File → Save Constraints 。
约束文件创建
确保在 “Save Constraints”弹出窗口中选中所示选项,为了便于学习,请在 “File name” 中输入 “Basic_Logic”。完成后点击 “OK” 按钮。
通常,您可以为 “File name” 输入任何有效名称,当然也不需要像本示例那样与 HDL 文件名称匹配,但请务必确保不含空格!
可以通过双击 “Sources” 窗口的 “Sources” 子选项卡中的约束文件来查看和手动编辑它。打开它进行查看,但目前无需编辑。
综合与实现
现在,在流程导航器的Synthesis 下点击“Run Synthesis” 。Vivado 完成需要一些时间。如果您看到所示的 “Synthesis Completed” 弹出窗口,选择 “Run Implementation” 单选按钮,然后点击“OK” 按钮。如果没有,您可以在综合完成后,点击流程导航器Implementation 下的 “Run Implementation” 。Vivado 完成这一步也需要一些时间。
编程与调试
生成比特流
如果您看到所示的 “Implementation Completed” 弹出窗口,选择 “Generate Bitstream” 单选按钮,然后点击 “OK” 按钮。如果没有,您可以在实现完成后,点击流程导航器Program and Debug下的 “Generate Bitstream” 。
如果您看到所示的 “Bitstream Generation Completed” 弹出窗口,选择 “Open Hardware Manager”单选按钮,然后点击 “OK” 按钮。如果没有,您可以在比特流生成完成后,点击流程导航器Program and Debug 下的 “Open Hardware Manager”。
打开目标
现在,在流程导航器的Program and Debug下点击 “Open Target”,然后从出现的菜单中选择 “Open New Target…”。您需要先将 JTAG 编程器和 / 或开发板连接到计算机,为其供电,并安装任何必要的驱动程序才能继续。
新硬件目标打开向导将启动,点击 “Next >” 按钮继续。
如果尚未从下拉菜单中选择 “Local server (target is on local machine)”,请选择它,然后点击 “Next >” 按钮继续。Vivado 将工作片刻,查找连接到本地计算机的任何有效目标设备。
如果一切顺利,您将看到类似于此处所示的内容,与您的特定硬件匹配。选择您的特定 JTAG 硬件目标和可编程逻辑器件,然后点击 “Next >” 按钮。请注意,您可以选择更改 “JTAG Clock Frequency”,但从默认设置开始是合理的,以后如有必要再进行调整。
点击“Finish” 按钮,Vivado 将尝试连接到您指定的硬件。
对器件进行编程
现在,在流程导航器的 Program and Debug下点击 “Program Device”,然后从出现的菜单中选择您的特定器件。
出现的 “Program Device” 弹出窗口中,应该会自动填入您生成的比特流文件的文件路径。如果尚未选中“Enable end of startup check”复选框,请选中它,然后点击“Program”按钮。Vivado 将工作片刻,如果成功,一切完成后,您的器件应该已编程完成并准备好验证其正确行为。
对于使用 Basys 3 开发板的用户,请拨动开关 SW0-SW2,并验证 LED LD0-LD2 是否具有先前描述的正确行为。































