开发者分享 | 如何在设计里例化并使用BSCANE2模块 (一)

本文转载自:Xilinx技术社区微信公众号

BSCANE2 模块是 FPGA 中的一个特殊硬核模块,是联通外部 JTAG 管脚和 FPGA 内部用户逻辑的一个接口。BSCANE2 的定义和端口描述,可以在对应器件的 Libraries Guide中找到。

比如7系列的定义可以参考 UG768,第4章。

其基本功能介绍,请参考 UG470, 第10章。

在 FPGA 中,JTAG 管脚除了负责原始的芯片测试功能 (IEEE1149.1),还主要用于下载和调试,比如ILA就是通过 JTAG 接口捕捉内部逻辑信号,送回 ISE 或 Vivado,并在界面上直接显示和控制。BSCANE2 其实就是实现这一内外沟通的关键核心模块,这部分实现对于用户来说是透明的。

那么如何利用BSCANE2 模块,构建用户自己的专用内部扫描链/功能链呢?

本文提供一个基于7系列的 ISE 版本的参考设计。通过 FPGA 的 JTAG 管脚,用户可以直接控制内部的逻辑实现自定义的功能。

UltraScale/UltraScale+ 的 BSCANE2 模块用法和7系列基本相同。

设计说明:

这是一个关于如何使用 BSCANE2 模块的简单实例。基于Xilinx的开发板 KC705,该设计例化了一个 BSCANE2 模块,由 USER1 命令控制。通过 JTAG 接口发送标准和自定义的指令,可以实现:

1. 从运行的设计中读取32位的用户ID;

2. 从 JTAG 接口输入控制 LED灯显示的字符串;

3. 从 JTAG 口向 BRAM 写入32位数据;

4. 从 BRAM 读出32位数据;

5. 向 BRAM 中一次写入1024 bits(可用于 EDK 设计中 bootloader 的修改,升级等)。

指令定义:

该设计的 shift register 定位为33位。其中第32位(从0开始计数)用于区分JTAG发送的是指令还是数据。Bit[32] 为1,则送入的为指令;Bit[32]为0,则送入的为指令对应的数据。其他的 JTAG 寄存器均为 32 位。

33'h100000241 用户ID读取;

33'h100000242 LED 灯显示控制;

33'h100000243 向 BRAM 写入32位数据;

33'h100000244 从 BRAM 读取32位数据;

33'h100000245 向 BRAM 写入1024位数据。

设计运行实现:

SVF文件可以以可读形式清楚的描述、记录 JTAG 链的动作,并可以在 ISE/iMPACT或Vivado/HW Manager 中直接执行。本设计使用 SVF 来实现以下功能:

1. 发送 USER1指令‘02’,来选择和使能用户自定义的 JTAG 链;

2. 发送指令‘100000241’ 读取用户定义ID;

3. 发送指令‘100000242’获取一个二进制码,并送入7位 LED 灯显示;

4. 使用指令‘100000243’向BRAM中每次写入一个32位数据;然后使用指令‘100000244’将写入的数据逐个读出来。

5. 使用指令‘100000245’向 BRAM 写入1024位数据;如果需要写入的数据大于1024,则多次执行该指令即可。

设计源文件及 SVF 文件的下载地址:

最新文章

最新文章