FPGA验证流程(本地JULAB版)

实验目的

  1. 熟悉FPGA实验验证流程;

  2. 熟悉实验调试软件的使用方法;

  3. 熟悉实验板的输入输出元件。

实验设备

实验调试软件:Windows系统JULAB实验软件。

实验板:以下任选一种,本文举例以Pocket口袋实验板为主。

  1. Pocket口袋实验板(内含调试适配器和FPGA编程器)

  2. DE2-115开发板和JUPOD调试适配器

  3. Nexys4 DDR开发板和JUPOD调试适配器

准备工作

下载实验材料

本书所有实验项目的附件材料发布在开源项目托管网站https://gitee.com/fpga-lab/jurv-open,其中labs/L02目录是本项目的实验材料,包含了虚拟面板等文件。

安装实验调试软件

首先从openJURV开源项目的software文件夹下载welab.zipjulab.zip压缩包到本地硬盘,解压即可。

实验板硬件连接

实验软件可与多种硬件实验板配套,大致分为两种类型,一种是独立的调试适配器+实验/开发板,如DE2-115和Nexys4DDR;另一种是实验板内置调试适配器,如Pocket口袋板。下面分别介绍这三种实验板的连接。

Pocket口袋板

Pocket口袋板(图 1)和PC机通过USB电缆连接后,口袋板上的蓝色电源指示灯点亮,右侧16个红色灯和8个绿色灯也处于半亮状态。之后Windows系统开始识别设备,见驱动程序安装

IMG_9130_裁剪
图 1. Pocket口袋实验板

DE2-115 + JUPOD调试适配器

首先确保DE2-115开发板处于断电状态,将JUPOD调试适配器通过扁平电缆连接DE2-115开发板左侧红色电源开关下方的14脚扩展接口,如图 2所示。DE2-115开发板上电后,调试适配器的蓝色指示灯点亮。调试适配器通过USB电缆连接PC机之后,Windows系统开始识别设备,见驱动程序安装

IMG_6857 抠图.jpg
图 2. DE2-115 + JUPOD

注:DE2-115是友晶科技(Terasic)面向教学科研用途的开发板,使用了Intel/Altera的FPGA芯片。

Nexys4DDR + JUPOD调试适配器

首先确保Nexys4DDR开发板处于断电状态,将JUPOD调试适配器通过扁平电缆连接Nexys4DDR开发板右侧中部的JA连接器的下排插孔,如图 3所示。实验板上电后,调试适配器的蓝色指示灯点亮。调试适配器通过USB电缆连接PC机之后,Windows系统开始识别设备,见驱动程序安装

IMG_7725抠图
图 3. Nexys4DDR + JUPOD

注:Nexys4DDR是Digilent面向教学科研用途的开发板,使用了AMD/Xilinx的FPGA芯片。

驱动程序安装

有两种类型的调试适配器,一种需要手动安装驱动程序,另一种使用Windows自带的驱动。目前大部分调试适配器属于后一种,调试适配器或内置调试适配器的实验板通过USB电缆连接PC机后,Windows系统会自动识别并安装驱动程序。一般首次连接到的电脑需要的时间稍长,对于学校实验室机房有硬盘保护功能的电脑,每次开机后都相当于首次连接,请耐心等待。

调试适配器通过指示灯指示驱动是否安装成功。独立调试适配器是一个红绿双色指示灯;口袋实验板在USB接口附近有两个LED指示灯,分别是标注了DATA的红色指示灯和标注了LINK的绿色指示灯。在驱动安装完成之前,红色指示灯亮;驱动安装成功后,红色灯熄灭、绿色指示灯点亮。也可以通过实验软件检查驱动是否安装成功,见与调试适配器建立连接

如果调试适配器通过USB电缆连接电脑后弹出“安装驱动程序向导”窗口,或者在Windows设备管理器的USB设备列表中出现带感叹号的“JU-POD”,说明需要手动安装驱动程序,见附录A:安装调试适配器的USB驱动程序

关于指示灯的进一步说明:绿色指示灯一般保持常亮,表示与计算机的连接正常,但是对于使用Windows自带驱动的调试适配器,在大部分win10系统下,几秒钟后绿色指示灯会自动熄灭,当操作实验软件与实验板传送数据时绿色指示灯又会自动点亮,这是正常现象。红色指示灯仅在有数据传输时闪烁。

设计与编译

设计环节在上一个实验中已经完成,并且用Quartus或Vivado软件编译生成了电路文件。为便于后面实验验证流程的说明,例 1给出了上一个实验的VirtualBoard模块代码。

例 1. 虚拟实验板(VirtualBoard)模块
`default_nettype none 
module VirtualBoard (
    input  wire   CLOCK,      // 10 MHz Input Clock 
    input  wire  [19:0] PB,   // 20 Push Buttons, logical 1 when pressed
    input  wire  [35:0] S,    // 36 Switches
    output logic [35:0] L,    // 36 LEDs, drive logical 1 to light up
    output logic  [7:0] SD7,  // 8 common anode Seven-segment Display
    output logic  [7:0] SD6,
    output logic  [7:0] SD5,
    output logic  [7:0] SD4,
    output logic  [7:0] SD3,
    output logic  [7:0] SD2,
    output logic  [7:0] SD1,
    output logic  [7:0] SD0
); 

//Switch drives the segment of the seven-segment display
assign SD0 = S[7:0];  (1)

//Switch drives LED 
assign L[11:8] = S[11:8]; (2)

//Push Button drives LED
assign L[18] = PB[0]; (3)
endmodule
例 1的VHDL版本(点击此行展开)
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.ALL;
ENTITY  VirtualBoard IS
PORT (   
   CLOCK:in std_logic;                     -- 10MHz Input Clock 
   PB: in  std_logic_vector(19 downto 0);  -- 20 Push buttons, logical 1 when pressed
   S:  in  std_logic_vector(35 downto 0);  -- 36 Switches
   L:  out std_logic_vector(35 downto 0);  -- 36 LEDs, drive logical 1 to light up
   SD7:out std_logic_vector(7 downto 0);   -- 8 common anode Seven-segment Display
   SD6:out std_logic_vector(7 downto 0);
   SD5:out std_logic_vector(7 downto 0);
   SD4:out std_logic_vector(7 downto 0);
   SD3:out std_logic_vector(7 downto 0);
   SD2:out std_logic_vector(7 downto 0);
   SD1:out std_logic_vector(7 downto 0);
   SD0:out std_logic_vector(7 downto 0)); 
END VirtualBoard;

ARCHITECTURE  behav_VB OF  VirtualBoard IS

BEGIN

   SD0 <= S(7 downto 0);  (1)
   L(11 downto 8) <= S(11 downto 8);  (2)
   L(18) <= PB(0);  (3)

END behav_VB;

这个VirtualBoard模块可以想象成一个实验板,有1个时钟输入CLOCK, 20个按键PB0~PB19,36个拨动开关S0~S35,36个指示灯L0~L35,8个七段数码管SD0~SD7。该模块命名为“VirtualBoard”的含义是“虚拟实验板”,在后面验证时我们会看到,“虚拟实验板”模块与实验调试软件的“虚拟面板”是相互对应的。

实验验证流程

打开虚拟实验板

启动JULAB软件后,点击“虚拟实验板 ➤ 打开虚拟实验板”菜单项或工具条按钮,在打开的文件对话框中选择实验材料中虚拟实验板.jvp,打开后界面如图 4,这个虚拟面板以实验板的实物照片为背景,在开关、指示灯等输入输出元件位置上放置了虚拟元件。

image
图 4. 虚拟实验板

与调试适配器建立连接

点击“系统 ➤ 调试适配器 ➤ 连接”菜单项或工具条按钮,在弹出窗口中应已经列出发现的调试适配器,如图 5,点击“连接”按钮。根据调试适配器的驱动类型,列表中出现的名称可能是“JU-HID”或“JU-POD”。若列表中未出现调试适配器,请检查实验板与计算机的连接;如果连接正确,请检查Windows“设备管理器”的“通用串行总线控制器” 设备列表中是否出现“JU-HID”或“JU-POD”,如果未出现或者有感叹号,说明驱动未安装成功。

image
图 5. 连接调试适配器
USB电缆也是造成连接失败的一个常见原因。可以换一根电缆试试。

加载FPGA电路

开始验证之前首先要将前面实验编译生成的FPGA电路文件加载到FPGA芯片中(也称配置、编程、下载)。

独立调试适配器不能通过实验软件配置FPGA,如DE2-115实验板需要使用Quartus软件下载,具体操作见附录B:使用Quartus软件下载sof文件。Nexys4DDR实验板需要使用Vivado软件下载,另文介绍。

内置调试适配器的Pocket口袋板通过实验软件下载FPGA。点击“系统 ➤ 下载FPGA”菜单项或工具条按钮,在打开的文件对话框中选择之前编译生成的xxx.rbf文件后开始编程,编程过程中会在菜单栏位置出现进度条,完成后会有提示“配置FPGA成功”。

无需安装驱动的口袋实验板的下载速度较慢,有时甚至出现进度条不动的假死现象,请耐心等待。无论下载是否成功,都会有提示窗弹出。

认识虚拟元件

虚拟元件与设计模块端口相对应。如“开关”与设计代码VirtualBoard模块的端口S对应,“开关0”对应S[0];虚拟元件“数码管0”与代码中的“SD0”对应,见例 1端口名称的注释。下面通过操作虚拟面板了解虚拟元件的特性。

  1. 虚拟拨动开关

    初始状态开关的颜色是灰色的,表示该开关的状态是低电平;点击开关,开关的颜色变为绿色,表示该开关的状态是高电平。

  2. 虚拟LED指示灯

    点击虚拟开关S8,使其产生高电平,根据例 1的语句②,指示灯L8应点亮。同样地,S9~S11为高电平时,指示灯L9~L11应点亮。 如果实际实验板有真实的指示灯,实际实验板上也会同步显示。

  3. 虚拟数码管

    根据例 1语句①,S0~S7驱动数码管SD0。点击虚拟开关S0~S7,虚拟面板中最右边的数码管SD0显示内容应有变化。可以看出,点亮电平与指示灯不同,数码管是低电平点亮的。观察S0~S7与数码管字段的对应关系,可知S0~S7对应段a~段h。 如果实际实验板有真实的数码管,实际实验板上也会同步显示。

  4. 虚拟按键

    根据例 1语句③,按键PB0驱动指示灯L18。点击PB0,L18会有一个瞬间的闪亮,如果点击速度很快,也可能看不到闪亮。按下PB0不松开,能看到L18点亮,松开后L18熄灭;说明按键按下为高电平,松开为低电平。在后面的实验中,按键的主要用途是产生一个正脉冲。

虚拟元件的驱动电平与所连接的实际实验板驱动电平有可能不一致,这是因为不同的实验板的硬件设计可能不同,虚拟实验系统做了归一化处理。如DE2-115的按键按下时为低电平,而Nexys4DDR的按键按下时为高电平,虚拟按键归一化按下为高电平,为不同实验板提供一致的用户体验;类似地,LED指示灯归一化为高电平点亮,数码管归一化为低电平点亮。

设计虚拟面板

点击“虚拟实验板 ➤ 设计虚拟实验板”菜单项或工具条按钮,打开虚拟面板设计窗口。如图 6

image
图 6. 虚拟面板设计窗口

目前JULAB可以打开WeLab兼容的jvp格式的虚拟面板,但尚不支持将设计的虚拟面板保存为jvp格式,只能保存为JULAB专有的格式,所以不推荐使用JULAB软件设计虚拟面板。建议使用远程或本地WeLab设计虚拟面板。

附录

A:安装调试适配器的USB驱动程序

有两种类型的调试适配器,一种需要安装驱动程序,另一种使用Windows自带的驱动。这里介绍32位Windows系统的USB驱动程序安装,64位Windows系统的USB驱动安装方法请自行百度。

调试适配器或内置调试适配器的实验板通过USB电缆连接PC机后,在弹出的“安装驱动程序向导”窗口中,选择“从列表或指定位置安装”,根据提示点击“下一步”,浏览到驱动程序在软件包中的位置,根据提示点击“下一步”,即可完成JUPOD驱动程序安装。

B:使用Quartus软件下载sof文件

DE2-115使用Quartus软件通过JTAG接口下载sof文件。首先需要将USB电缆连接到DE2-115开发板左上角的第一个USB接口。

点击菜单项Tool ➤ Programmer或工具栏按钮进入器件编程话框,如图 7

image
图 7. 器件编程窗口

点击 Hardware Setup 按钮或Edit ➤ Hardware Setup菜单项,在Currently selected hardware列表中选择USB-Blaster作为编程硬件,如图 8

image
图 8. 下载电缆设置

回到图 7编程界面,点击 Add File 按钮或Edit ➤ Add File菜单项,在工程目录的output文件夹下选择要下载的sof文件,如DE2-115.sof。 在Mode中选择JTAG模式。勾选Program/Configure选项框,点击 Start 按钮或Processing ➤ Start菜单项开始器件编程。在Process进度条中会显示编程进度。

完成后,在Quartus的信息显示区中,会报告成功或出错信息。注意,信息显示在Quartus主界面的信息显示区中,不在编程窗口中;为了方便看到提示信息,可以从Window菜单执行Attach Window,将编程窗口嵌入到Quartus主界面中。

编程界面左侧的其它按钮分别表示停止编程、自动检测编程硬件是否连接、删除编程文件、更改选中的编程文件、保存文件、添加用户自定义的器件、调整编程文件的顺序。