1. 问题现象与初步排查
最近在调试盘古676 FPGA开发板时遇到了一个棘手的问题:使用PDS(Programmable Device System)工具进行JTAG扫描时,系统提示"JtagServer-0306: No devices detected while scanning the JTAG chain"。这个错误表明工具无法识别JTAG链上的任何设备。有意思的是,当我换上其他型号的FPGA开发板时,JTAG扫描却能正常识别。
这种情况在FPGA开发中并不少见,但排查起来需要系统性的思路。首先我们需要明确几个关键点:
-
JTAG链的基本工作原理:JTAG(Joint Test Action Group)是一种标准的测试接口,通过TDI(Test Data Input)、TDO(Test Data Output)、TMS(Test Mode Select)和TCK(Test Clock)四根信号线实现设备间的通信。当扫描链无法识别设备时,通常意味着这个通信链路中的某个环节出现了问题。
-
不同开发板的差异:既然其他型号的FPGA板可以正常识别,说明主机端的JTAG驱动和PDS工具本身是正常的,问题很可能出在盘古676板子的硬件连接或配置上。
提示:在开始深入排查前,建议先用万用表检查JTAG接口的物理连接是否正常,特别是VCC和GND之间的阻抗,避免短路情况。
2. 硬件层面的可能性分析
2.1 JTAG接口电路对比
不同FPGA开发板的JTAG接口设计可能存在显著差异。以Xilinx和Altera(现Intel)的开发板为例,它们的JTAG接口电路通常会有以下区别:
-
上拉/下拉电阻配置:有些板子会在TMS、TDI等信号线上配置上拉电阻,而有些则不会。盘古676可能采用了不同的电阻网络设计。
-
信号电平转换:如果开发板的工作电压与JTAG适配器的输出电压不匹配(比如3.3V vs 1.8V),可能需要电平转换电路。缺少这种电路会导致信号无法正确传输。
-
连接器类型:虽然都使用标准的JTAG接口(如10针或20针连接器),但引脚定义可能有细微差别。建议对照盘古676的原理图检查:
code复制Pin 1: VREF (参考电压)
Pin 2: GND
Pin 3: TDO
Pin 4: GND
Pin 5: TDI
Pin 6: GND
Pin 7: TMS
Pin 8: GND
Pin 9: TCK
Pin 10: GND
2.2 电源供应检查
FPGA在JTAG扫描时需要稳定的电源供应。盘古676可能有特殊的电源需求:
-
核心电压要求:有些FPGA需要多个电压轨(如VCCINT、VCCAUX等)全部上电才能响应JTAG。使用万用表测量各电压引脚是否达到标称值。
-
上电时序:复杂的FPGA对上电时序有严格要求。如果电源管理芯片的启动顺序不正确,可能导致JTAG接口无法正常工作。
-
电流供应能力:特别是使用USB-JTAG适配器时,要确认其提供的5V/500mA是否足够。可以尝试外接电源测试。
3. 软件配置与驱动问题
3.1 PDS工具链配置
PDS工具对不同的FPGA芯片需要加载对应的配置文件。针对盘古676,可能需要特殊处理:
-
设备支持列表:在PDS安装目录下的
/device/文件夹中查找是否有panggu676.xml或类似的设备描述文件。如果没有,可能需要从厂商获取并手动添加。 -
JTAG扫描参数调整:在PDS的配置文件(如
jtag_config.ini)中尝试修改以下参数:code复制[JTAG_Scan] ClockFrequency = 1000000 # 降低扫描频率 RetryCount = 5 # 增加重试次数 -
驱动兼容性:某些JTAG适配器需要特定版本的驱动程序。例如,使用Xilinx Platform Cable USB时,需要确保安装的是最新的
digilent驱动而非旧版的windrvr。
3.2 固件与边界扫描
盘古676可能预装了特殊的引导固件,影响了JTAG功能:
-
安全引导模式:某些FPGA在安全模式下会禁用JTAG接口。查阅手册确认是否需要特定的启动组合键或跳线设置。
-
边界扫描描述文件(BSDL):确保PDS工具加载了正确的BSDL文件。错误的文件会导致IDCODE识别失败。典型的BSDL文件内容如下:
vhdl复制entity PANGU676 is generic (PHYSICAL_PIN_MAP : string := "BGA676"); port ( TCK: in bit; TMS: in bit; TDI: in bit; TDO: out bit; ... );
4. 深入诊断方法
4.1 信号完整性测试
使用示波器检查JTAG信号质量是终极诊断手段:
-
TCK信号:应有清晰的方波,上升时间小于5ns,频率与配置一致(通常1-10MHz)。
-
TMS/TDI信号:在TCK上升沿前应有稳定的高/低电平(建立时间>10ns)。
-
TDO信号:在TCK下降沿后应有响应输出。如果始终为高阻态,说明FPGA未参与通信。
4.2 手动JTAG指令测试
通过jtagconfig等命令行工具发送原始JTAG指令,可以绕过PDS的高级封装:
bash复制# 列出JTAG链设备
jtagconfig -n
# 手动发送IDCODE指令
jtag -c 1 -i "001" -s 3 -t 32
预期应返回类似0x4BA00477的32位IDCODE。如果返回全0或全F,表明物理层通信失败。
5. 厂商特定解决方案
经过上述排查后,如果问题仍未解决,可能需要考虑盘古676的特殊性:
-
定制JTAG协议:某些国产FPGA使用修改过的JTAG协议。需要向厂商索取专用的JTAG驱动或PDS插件。
-
加密保护:商业级FPGA可能启用JTAG端口加密。需要授权文件才能解锁,联系厂商获取
.lic文件并放置在/license/目录下。 -
硬件版本差异:早期工程样片与量产版的JTAG实现可能有差异。确认板子的版本号(通常印在FPGA芯片表面),与厂商提供的兼容性列表核对。
重要提示:在接触任何硬件跳线或固件刷写前,务必先备份原始配置。错误的操作可能导致板子永久损坏。
6. 替代方案与应急措施
如果时间紧迫,可以考虑以下替代方案:
-
使用厂商提供的专用编程器:很多国产FPGA配套提供独立的烧录工具,如
PanguProg.exe,可能比通用JTAG工具更可靠。 -
串行Flash编程模式:通过SPI接口直接烧写配置Flash,绕过JTAG。这需要:
- 将板子上的启动模式跳线设为SPI
- 使用USB转SPI适配器连接Flash芯片
- 用
flashrom等工具写入.bin文件
-
硬件仿真器:如Segger J-Link配合OpenOCD,有时能识别出非标准JTAG设备:
openocd复制interface jlink transport select jtag jtag newtap panggu cpu -irlen 6 -expected-id 0x4BA00477
7. 经验总结与预防措施
通过这次排查,我总结了以下几点经验:
-
建立检查清单:新拿到开发板时,应首先验证:
- 电源各电压值
- JTAG接口引脚连通性
- 是否有模式选择跳线
- 官方提供的参考设计差异
-
信号质量记录:使用示波器捕获首次成功识别时的JTAG信号波形,作为后续调试的基准参考。
-
环境隔离测试:在虚拟机或干净系统中测试,排除其他软件冲突。我曾遇到杀毒软件拦截JTAG通信的情况。
最后分享一个实用技巧:在Linux系统下,可以通过lsusb -v和dmesg | grep jtag查看JTAG适配器的枚举信息,这对诊断驱动问题很有帮助。对于Windows系统,设备管理器中的"通用串行总线控制器"下应该能看到JTAG适配器的正确描述,而不是未知设备。