文章目录
对于FPGA调试人员,最希望的就是能够监控内部信号和动态控制内部信号。
监控内部信号常用方法有两种,一是将内部信号引到管脚,使用外部逻辑分析仪查看。二是使用FPGA自带的逻辑分析仪,用JTAG下载器就可以完成内部信号查看。
动态控制内部信号则需要有串口UART或其他总线连到FPGA,然后通过上位机发送命令控制内部寄存器。但这需要FPGA内有总线模块,上位机还需要串口助手这些调试软件,如果没有的话就很不方便。现在安路有个VPI(Virtual Probe Interface)调试工具,可以很方便的动态控制内部信号。
1.VPI简介
Virtual Probe Interface 可以实时监控和驱动 FPGA 内部信号,不过最好用的还是驱动内部信号,本文只讲驱动内部信号功能。VPI需要通过实例化添加到设计中,用户可定制VPI输入输出信号的位宽和数量。VPI可以代替外部管脚向FPGA 内部输入信号,从而控制 FPGA 内部信号。其连接框图如下图所示。

2.VPI插入方式
Virtual Probe Interface 需要通过在工程源码中进行实例化添加,并将所需的控制信号连接VPI的 outprobe,将想要监测的信号接入 VPI的 inprobe。最多支持插入 32 个 VPI IP。如果工程中除了添加 VPI还添加了 Chip Watcher,那么 Chip Watcher 和 VPI 相加不能超过 32 个。
2.1IP生成
打开的工程,单击菜单栏 Tools -> IP Catalog,打开 IP 选择界面,选择 Debug 分类下的 Virtual Probe Interface。如下图所示:

双击 Virtual Probe Interface IP,用户可以自定义选择路径和名称,如下图所示:

单击 OK 后,即可打开 VPI IP 设置界面,如下图所示。

General Options 界面相关参数设置如下:
Input Probe Count:设置需要观测的探针个数,支持范围为 1~64 个,默认值为 1。
Output Probe Count:设置输入到 FPGA 内部的探针个数,支持范围为 1~64 个,默认为 1。
General Options 相关参数设置完成后,即可单击 Probe In Ports 界面,用于设置每个 Input Probe 的位宽。Probe In Ports 个数和 General Options 界面设置的 Input Probe Count 的值一致。如下图所示:

Probe In Ports 界面相关参数设置如下:
In width:输入探针位宽,可根据实际位宽进行设置,支持范围 1~256,默认值为 1。
Probe In Ports 相关参数设置完成后,即可单击 Probe Out Ports 界面,用于设置每个 Output Probe 的位宽。Probe Out Ports 个数和 General Options 界面设置的 Output Probe Count 的值一致。如下图所示。

Probe Out Ports 界面相关参数设置如下:
Out width:输出探针位宽,可根据实际位宽进行设置,支持范围 1~64,默认值为 1。
Out Initial Value(in hex):指定输出探针初始值,支持 16 进制格式,默认值为 0。
完成所有设置后,即可单击 OK 按钮,生成相应的 Virtual Probe Interface IP。
2.2IP例化
Virtual Probe Interface 生成后,可以通过右键单击 Show Instantiation Template 查看实例化模板,如下图所示:

在工程源文件中粘贴实例化模板,同时将 clk 接入需要观测的信号所使用时钟,inprobe、outprobe接入需要观测的信号,如下图所示:

最后综合编译即可。
3.VPI下载和控制
3.1下载
编译完成 Generate Bitstream 后,打开 ChipWatcher 界面,单击界面上方的 Watch 按钮,如下图所示。

即可进入 Watch 主界面进行下载,点击如下图中1下载按钮进行下载。

3.2控制
进入 Watch 界面后,即可打开 Virtual Probe Interface Instance 界面进行控制。VPI界面默认没有打开,需通过标题栏"+"进行勾选打开,如上图2所示。
打开后,Virtual Probe Interface Instance 控制界面如下图所示。可以通过加号和减号添加或删除所需信号。

如果Watch 界面存在其他 ChipWatcher Instance 的情况下,Virtual Probe Interface Instance 界面处于触发条件设置窗口位置。如下图所示。

最后修改信号的值,点击Send即可。
