FPGA验证流程(本地WeLab版)
实验设备
实验调试软件:Windows版WeLab实验软件。
实验板:以下任选一种,本文举例以Pocket口袋实验板为主。
-
Pocket口袋实验板(内含调试适配器和FPGA编程器)
-
DE2-115开发板和JUPOD调试适配器
-
Nexys4 DDR开发板和JUPOD调试适配器
准备工作
下载实验材料
本书所有实验项目的附件材料发布在开源项目托管网站https://gitee.com/fpga-lab/jurv-open,其中labs/L02目录是本项目的实验材料,包含了虚拟面板等文件。
安装实验调试软件
首先从openJURV开源项目的software文件夹下载welab.zip或julab.zip压缩包到本地硬盘,解压即可。
实验板硬件连接
实验软件可与多种硬件实验板配套,大致分为两种类型,一种是独立的调试适配器+实验/开发板,如DE2-115和Nexys4DDR;另一种是实验板内置调试适配器,如Pocket口袋板。下面分别介绍这三种实验板的连接。
驱动程序安装
有两种类型的调试适配器,一种需要手动安装驱动程序,另一种使用Windows自带的驱动。目前大部分调试适配器属于后一种,调试适配器或内置调试适配器的实验板通过USB电缆连接PC机后,Windows系统会自动识别并安装驱动程序。一般首次连接到的电脑需要的时间稍长,对于学校实验室机房有硬盘保护功能的电脑,每次开机后都相当于首次连接,请耐心等待。
调试适配器通过指示灯指示驱动是否安装成功。独立调试适配器是一个红绿双色指示灯;口袋实验板在USB接口附近有两个LED指示灯,分别是标注了DATA的红色指示灯和标注了LINK的绿色指示灯。在驱动安装完成之前,红色指示灯亮;驱动安装成功后,红色灯熄灭、绿色指示灯点亮。也可以通过实验软件检查驱动是否安装成功,见与调试适配器建立连接。
如果调试适配器通过USB电缆连接电脑后弹出“安装驱动程序向导”窗口,或者在Windows设备管理器的USB设备列表中出现带感叹号的“JU-POD”,说明需要手动安装驱动程序,见附录A:安装调试适配器的USB驱动程序。
关于指示灯的进一步说明:绿色指示灯一般保持常亮,表示与计算机的连接正常,但是对于使用Windows自带驱动的调试适配器,在大部分win10系统下,几秒钟后绿色指示灯会自动熄灭,当操作实验软件与实验板传送数据时绿色指示灯又会自动点亮,这是正常现象。红色指示灯仅在有数据传输时闪烁。 |
设计与编译
`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”的含义是“虚拟实验板”,在后面验证时我们会看到,“虚拟实验板”模块与实验调试软件的“虚拟面板”是相互对应的。
实验验证流程
打开虚拟实验板
启动WeLab软件后,点击“实验板 ➤ 打开虚拟面板”菜单项或工具条按钮,在打开的文件对话框中选择实验材料中的虚拟实验板.jvp,打开后界面如图 4,这个虚拟面板以实验板的实物照片为背景,在开关、指示灯等输入输出元件位置上放置了虚拟元件。
与调试适配器建立连接
点击“实验板 ➤ 连接调试适配器”菜单项或工具条按钮,在弹出窗口中应已经列出发现的调试适配器,如图 5,点击“连接”按钮。根据调试适配器的驱动类型,列表中出现的名称可能是“JU-HID”或“JU-POD”。若列表中未出现调试适配器,请检查实验板与计算机的连接;如果连接正确,请检查Windows“设备管理器”的“通用串行总线控制器” 设备列表中是否出现“JU-HID”或“JU-POD”,如果未出现或者有感叹号,说明驱动未安装成功。
USB电缆也是造成连接失败的一个常见原因。可以换一根电缆试试。 |
加载FPGA电路
开始验证之前首先要将前面实验编译生成的FPGA电路文件加载到FPGA芯片中(也称配置、编程、下载)。
独立调试适配器不能通过实验软件配置FPGA,如DE2-115实验板需要使用Quartus软件下载,具体操作见附录B:使用Quartus软件下载sof文件。Nexys4DDR实验板需要使用Vivado软件下载,另文介绍。
内置调试适配器的Pocket口袋板通过实验软件下载FPGA。点击“实验板 ➤ 下载FPGA”菜单项或工具条按钮,在打开的文件对话框中选择之前编译生成的xxx.rbf文件后开始编程,编程过程中会在菜单栏位置出现进度条,完成后会有提示“配置FPGA成功”。
无需安装驱动的口袋实验板的下载速度较慢,有时甚至出现进度条不动的假死现象,请耐心等待。无论下载是否成功,都会有提示窗弹出。 |
认识虚拟元件
将鼠标指针指向某个虚拟元件,会提示该元件的名称,如最右边的开关提示“开关0”,这些虚拟元件的名称与设计模块端口名称相对应,如“开关”与设计代码VirtualBoard模块的端口S对应,“开关0”对应S[0];虚拟元件“数码管0”的与代码中的“SD0”对应,见例 1端口名称的注释。下面通过操作虚拟面板了解虚拟元件的特性。
-
虚拟拨动开关
初始状态开关的颜色是灰色的,开关上显示数字“0”,表示该开关的状态是低电平;点击开关,开关的颜色变为亮黄色,开关上显示数字“1”,表示该开关的状态是高电平。
-
虚拟LED指示灯
点击虚拟开关S8,使其产生高电平,根据例 1的语句②,指示灯L8应点亮。同样地,S9~S11为高电平时,指示灯L9~L11应点亮。 如果实际实验板有真实的指示灯,实际实验板上也会同步显示。
-
虚拟数码管
根据例 1语句①,S0~S7驱动数码管SD0。点击虚拟开关S0~S7,虚拟面板中最右边的数码管SD0显示内容应有变化。可以看出,点亮电平与指示灯不同,数码管是低电平点亮的。观察S0~S7与数码管字段的对应关系,可知S0~S7对应段a~段h。 如果实际实验板有真实的数码管,实际实验板上也会同步显示。
-
虚拟按键
根据例 1语句③,按键PB0驱动指示灯L18。点击PB0,L18会有一个瞬间的闪亮,如果点击速度很快,也可能看不到闪亮。按下PB0不松开,能看到L18点亮,松开后L18熄灭;说明按键按下为高电平,松开为低电平。在后面的实验中,按键的主要用途是产生一个正脉冲。
虚拟元件的驱动电平与所连接的实际实验板驱动电平有可能不一致,这是因为不同的实验板的硬件设计可能不同,虚拟实验系统做了归一化处理。如DE2-115的按键按下时为低电平,而Nexys4DDR的按键按下时为高电平,虚拟按键归一化按下为高电平,为不同实验板提供一致的用户体验;类似地,LED指示灯归一化为高电平点亮,数码管归一化为低电平点亮。 |
设计虚拟面板
下面从头设计一个全新的虚拟面板。点击“实验板 ➤ 新建虚拟面板”菜单项或工具条按钮,输入虚拟面板名称“认识虚拟元件”;点击“设计 ➤ 添加更换背景图”菜单项或工具条按钮,实验材料中提供了一个“虚拟面板背景图.png”文件,选择该图片作为虚拟面板背景图,如图 6。
可以自己绘制背景图,见绘制面板背景图。 |
现在我们给虚拟面板添加虚拟元件。以虚拟开关为例,在设计工具箱中点击“开关”,点击“开关0”,将它们添加到虚拟面板上,然后将它拖到所希望的位置。用类似的方法添加需要的开关、数码管和指示灯。最终完成虚拟面板效果如图 7。点击“保存虚拟面板”菜单或工具按钮将面板设计保存到文件。
上面介绍的是从空白开始设计一个全新的虚拟面板,实际上已有虚拟面板也可以修改,只要点击“模式 ➤ 虚拟面板设计”菜单项或笔形工具按钮,进入设计状态即可修改虚拟面板。
完成虚拟面板设计后,点击“模式 ➤ 虚拟面板设计”菜单项或工具按钮,从设计模式转换为实验模式。拨动虚拟开关,观察数码管和指示灯显示是否正确。如果不正确,检查verilog设计是否存在错误,改正错误后重新验证。
附录
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或工具栏按钮进入器件编程话框,如图 8。
点击 Hardware Setup
按钮或Edit ➤ Hardware Setup菜单项,在Currently selected hardware列表中选择USB-Blaster作为编程硬件,如图 9。
回到图 8编程界面,点击 Add File
按钮或Edit ➤ Add File菜单项,在工程目录的output文件夹下选择要下载的sof文件,如DE2-115.sof。
在Mode中选择JTAG模式。勾选Program/Configure选项框,点击 Start
按钮或Processing ➤ Start菜单项开始器件编程。在Process进度条中会显示编程进度。
完成后,在Quartus的信息显示区中,会报告成功或出错信息。注意,信息显示在Quartus主界面的信息显示区中,不在编程窗口中;为了方便看到提示信息,可以从Window菜单执行Attach Window,将编程窗口嵌入到Quartus主界面中。
编程界面左侧的其它按钮分别表示停止编程、自动检测编程硬件是否连接、删除编程文件、更改选中的编程文件、保存文件、添加用户自定义的器件、调整编程文件的顺序。