学习和使用VIO_IP
凉凉不冷 Lv4

FPGA学习.PART6

1. 概述

VIO是 Virtual Input/Output 的缩写,是Vivado提供的一个IP核;

可以用于驱动FPGA的内部信号,并监测其内部特征,

也就是实时监测FPGA内部信号,并输出FPGA的控制到其他模块,或者是直接是输出到管脚上。

2. 实验步骤

2.1 新建工程

之前我们在选芯片型号时一直都是直接选用的版型,因为其预含了芯片的型号等,我们也可以直接通过筛选来进行选择,如下图所示;

2.2 新建块设计

左侧工作区IP Integrator -> Create Block Design,如下图位置

新建块设计后,添加IP核,搜索 VIO 调用此IP核,如下图所示

双击打开IP核,如下图所示,其中 Input Probe Count 为输入探针数,最多可以有0 ~ 256组输入,每组输入最多有1 ~ 256位,其中 Activity Detectors 为活跃检测,修改输入输出探针数各为1,位宽为8,将输入初始值改为 0x0F ,使高四位为0,低四位为1,

如下所示,点击端口使用快捷键,Crtl + T即可引出引脚,

2.3 封装设计

保存文件后,进入左上角工作区,选中保存后的块设计,如下图所示,并右键选择 Create HDL Wrapper,

若要对顶层文件进行修改,一定要选择上方的选项,即 Copy generated wrapper to allow user edits,若选择下方的选项,则修改文件无法生效.

我们将输入输出名称更改为我们所需要的,并同时在例化代码处进行更改,代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
`timescale 1 ps / 1 ps

module design_1_wrapper
(clk,
SW,
LED );
input clk;
input [7:0]SW;
output [7:0]LED;


design_1 design_1_i
(.clk(clk),
.probe_in0_0(SW),
.probe_out0_0(LED));
endmodule

2.4 新建约束文件

引脚约束文件如下,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
set_property PACKAGE_PIN Y9 [get_ports {clk}]
set_property IOSTANDARD LVCMOS33 [get_ports {clk}]

set_property PACKAGE_PIN T22 [get_ports {LED[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {LED[0]}]

set_property PACKAGE_PIN T21 [get_ports {LED[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {LED[1]}]
set_property PACKAGE_PIN U22 [get_ports {LED[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {LED[2]}]
set_property PACKAGE_PIN U21 [get_ports {LED[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {LED[3]}]
set_property PACKAGE_PIN V22 [get_ports {LED[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {LED[4]}]
set_property PACKAGE_PIN W22 [get_ports {LED[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {LED[5]}]
set_property PACKAGE_PIN U19 [get_ports {LED[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {LED[6]}]
set_property PACKAGE_PIN U14 [get_ports {LED[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {LED[7]}]

set_property PACKAGE_PIN F22 [get_ports {SW[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {SW[0]}]
set_property PACKAGE_PIN G22 [get_ports {SW[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {SW[1]}]
set_property PACKAGE_PIN H22 [get_ports {SW[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {SW[2]}]
set_property PACKAGE_PIN F21 [get_ports {SW[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {SW[3]}]
set_property PACKAGE_PIN H19 [get_ports {SW[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {SW[4]}]
set_property PACKAGE_PIN H18 [get_ports {SW[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {SW[5]}]
set_property PACKAGE_PIN H17 [get_ports {SW[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {SW[6]}]
set_property PACKAGE_PIN M15 [get_ports {SW[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {SW[7]}]

2.5 生成比特流文件

左侧工作区 PROGRAM AND DEBUG -> Generate Bitsteram,生成比特流文件时 Vivado 会进行分析、综合、实施、debug 等一系列操作,省去了我们一步一步点的步骤。

2.6 烧录调试以及探针的使用

FPGA 上电,连接电脑,左侧工作区打开 Hardware Manager ,点击 Auto connect 进行连接,右键选择要进行调试的 FPGA ,点击 Program Device ,其中下方的 Debug

probes file 为调试的探针文件,如下图

左上角 Hardware 工作区出现 hw_vio_1 的选项,如下图

右键能够查看其属性,并能进一步进行操作,选择 Dashboard -> New Dashboard,仅选择VIO,点击加号添加探针,将 in 与 out 加入监测,如下图

此时我们观察 FPGA 上的亮灯情况,如下图,为高四位LED灭,低四位LED亮,

此时探针的值如下图所示,与板上LED亮灭所对应,

针对某一Value可以右键将其设置为文本显示高低电平或是以LED的形式展示高低电平,如下图中将低电平设为灰色LED,高电平设为红色LED,我们拨动开关可以看到Vivado中数值发生的变化,以LED的形式展现出来,

同时我们能够更改输出值,以使 FPGA 上的 LED 灯亮灭发生改变,分别如下两张图片所示

右键输出值,选择 Active-High Button,可以使我们按下按钮时,输出高电平,抬起时为0,或是 Toggle Button 使其变为开关式按钮,在按下时改变状态,以便于调试(此处展示省略,主要是懒得拍视频…( •̀ ω •́ )✧)

同时我们还能添加探针,显示 XADC 也就是核心板的各项数据,如温度,核心电压等,如下图所示,

3. 总结模块作用

  • 作为激励作为外部模块的输入
  • 协助调试
  • 初始化输出可视为跳线使用

关于模块使用,应当阅读其文档介绍,了解其特性以及常见作用,以快速的了解并上手新的模块。

 Comments