C/C++教程

SocKit系列文章——SOCKit下载程序时JTAG链的问题

本文主要是介绍SocKit系列文章——SOCKit下载程序时JTAG链的问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

具体详细步骤参考官方说明文档my_first_fpga。在此记录下载时遇到的坑。

下载程序

SoCKit下载程序
也就是说,作为一个SOC平台,必须要
在这里插入图片描述
先FPGA,再HPS,这样下载才可以下载进去。而且顺序必须如此。
但是原因是什么呢 ,只能这样才能下载吗???
不是的,其实在官方文档SOCKit_User _Manual中提到过,如下图
在这里插入图片描述
因为SOC平台中既有FPGA,又有HPS,同时板子上还有HSMC(这里还不是很懂为什么要把HSMC也放到这里作为一类,没有接触过HSMC接口HSMC接口简介)
所以板子上的JTAG是一个JTAG链。这部分

SoC FPGA JTAG 电路设计

参考小梅哥 基于AC540-SOC的SoC FPGA嵌入式设计和开发教程-V1.0
JTAG 协议制定了一种边界扫描的规范,边界扫描架构提供了有效的测试布局紧凑的 PCB 板上元件的能力。边界扫描可以在不使用物理测试探针的情况下测试引脚连接,并在器件正常工作的过程中捕获运行数据。
SoC FPGA 作为在同一芯片上同时集成了 FPGA 和 HPS 的芯片,其 JTAG 下载和调试电路相较于单独的 FPGA 或 ARM 处理器既存在一些差异,又有紧密的联系。
开发板使用了一种JTAG 链结构,JTAG 链同时连接了 SOC FPGA 器件的 FPGA 和 HPS。使用时,仅需一个 JTAG 链路,就能同时调试 FPGA 和 HPS。FPGA 和 HPS 各自有其独立的 JTAG 信号引脚,在电路设计时,使用了一种串行链的方式来将两者连接到一起,如图所示
在这里插入图片描述
在这里插入图片描述
使用 JTAG 配置或调试一个器件时,根据用户选定的器件,编程软件(QuartusProgrammer 或 DS-5 中提供的调试器)会旁路其它所有器件。在旁路模式下,器件通过一个旁路寄存器将编程数据从 TDI 管脚传至 TDO 管脚,即通过 TDI 送入器件的配置数据会在一个时钟周期之后呈现在 TDO 上。而如果将 TDO 端口输出的数据再次接入另一个器件的 TDI 端口,则能够直接对下一个器件进行调试。 而每一个器件都有其 JTAG ID,通过 JTAG ID 能够辨识具体调试哪个器件。

在上图中可以看到,由 USB Blaster 的 TDO 输出的数据首先是接入到HPS 的 TDI 端口,然后由 HPS 的 TDO 端口流出的数据又接到了 FPGA 的 TDI端口上,最后数据再由 FPGA 的 TDO 端口流出,回到 USB Blaster 的 TDI 端口,形成了完整的数据回路。

当需要通过 Quartus Programer 来配置或调试 FPGA 部分时,会设置直接旁路 HPS 部分,由 HPS 的 TDI 端口流入的数据会在一个时钟周期后出现在 HPS的 TDO 端口上,再进入 HPS 的 TDO 端口所连接的 FPGA 的 TDI 端口。从而向FPGA 的各个寄存器中写入或读取出数据,通过 FPGA 的 TDO 端口输出,流入到 USB Blaster 的 TDI 端口,完成对 FPGA 的调试。

sof与jic文件

sof 文件下载到 FPGA 中,是保存在 FPGA 的 SRAM 中的,掉电之后数据就丢失了,为了能够实现 FPGA上电自动配置的功能,可以将配置数据二进制文件转化为 jic 文件,烧写到 EPCS存储器中,并设置 FPGA 从 EPCS 中启动,这样 FPGA 下次上电时就能够自动从EPCS 中加载配置数据了,无需再用 JTAG 下载。

这篇关于SocKit系列文章——SOCKit下载程序时JTAG链的问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!