本文转载自: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 文件的下载地址:
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !