为什么我的LigTimeCo32调试会话无法启动?

调试一个LaTICEMICO32 C/C++项目时遇到的一个常见问题是一个错误消息:

“检查目标FPGA包含一个LM32 CPU,其中启用了Debug启用,FPGA配置正确。”

此错误消息有几种可能的原因:

  • FPGA首选文件没有实现或有错误的值
  • 内存LATICEMICO32异常基地址指向没有有效的操作码,或者操作码不匹配LATICEMICO32配置。
  • LigTimeCi32核心没有Debug启用的集合为true。
  • 格子铁芯32没有运行。
  • 断言到LATICEMICO32的复位输入。
  • 没有正确设置ISPVMYDIR环境变量。
  • 正在调试的LaTigMeCi32在JTAG链中的FPGA中(支持在7 SP2和后面)
  • 处理器没有运行,因为没有返回WISBORACK ACK闪存。

第一种情况通常是无法连接到调试器的最常见的原因。格子评估板的FPGA首选文件使用一种称为一致总线名称转换的语法。由格子提供的两个合成工具使用两种不同的命名总线的方法。为了消除这个问题,ISPLEFILE可以将总线名称转换为SigaMe0.0。默认情况下,ISPLEFER使用由项目定义的合成工具的命名方法。LATICEMICO32评估板偏好文件使用“一致”命名约定。因此,如果一致的总线名称转换功能未被打开,ISPLION无法将总线信号分配到所请求的位置的FPGA I/O。这个问题在设计规划师(Prap Primor)工具或地图阶段是显而易见的。

若要打开一致的总线名称转换,请单击“生成数据库”工具,并确保一致的总线名称转换条目设置为true(7和更早),或LATTIETS(7 SP1和更高版本)。

一个适当配置的LaTigeCeP2的LaTigeMICo32/DSP开发板,使用一个预先配置的平台定义,如平台E,将所有8个LED都打开。这是一个很好的视觉证据,FPGA PIN任务是正确的。

此消息可能发生的另一个原因是,LATICEMICO32试图引导的内存具有无效或损坏的操作码。在初始化FPGA之后,LATICEMICO32开始在异常基地址上运行操作码。如果异常基地址(EBA)上的操作码无效,则可能会将LATICEMICO32置于无效状态,使得它不会对调试异常作出响应。如果无法响应调试异常,则无法进入调试监视器代码,无法响应GDB请求。

调试密集型会话期间的一种故障安全方法是将LATICEMICO32异常地址指向LATICEMICO32调试内存的基地址。这个内存是EBR,并且总是有有效的代码。这消除了LATICEMICO32执行损坏的操作码的可能性,并提高调试会话成功启动的机会。

当正在创建FPGA比特流图像时,可以很容易地从ISPLOVER日志文件验证上面提到的第三个原因。一个具有Debug启用标记的设计将有一个JTAGANN16组件和一个LM32的监视器RAM组件(其中包括)。搜索这些组件的AutoAcK.Load输出,以确保它们已经插入到LaTigeMIC32核心中。

列出的第四个原因是一个容易犯的基本错误。LigTiMICO32是一个符合WISHONE规范的主机。因此,它需要有一个CKKYI输入。如果没有时钟输入,处理器就不能获取和执行操作码,并且将无法执行任何调试监视器代码。CKKYI输入不应超过设计的最大频率,因为这将导致LATICEMICO32行为异常。

第五例也是一个容易犯的错误。确保ReSeTyi输入未被声明为高,从而防止ListICEMIC32退出重置状态并运行调试监视器代码。

第六个可能的问题是没有正确设置ISPVMyDIR环境变量。ListICEMIC32系统调试器需要访问来自ISPVM系统工具的某些组件。确保ISPVMydir环境变量指向一个有效的ISPVM系统安装。这是典型的/ISPVM系统。

第七个问题围绕着拥有一系列JTAG设备,而LigTimeCi32被嵌入到JTAG链中的FPGA中。为了使该特性工作,MSB调试会话必须提供有关JTAG链结构的信息。这是通过启动ISPVM和定义JTAG链中的设备来完成的。一旦定义了链,就使用文件& Gt;保存特性,将JTAG链信息保存为XCF文件。确保XCF文件名或文件路径不包含任何空格。

第八个问题也是一个共同的问题。LigTimeCo32处理器必须能够响应调试异常请求。如果处理器已被指令从不返回ACK的存储器范围读取或写入,则LATICEMICO32将永远不会终止内存事务。如果内存事务从不终止所有中断,包括调试中断,则不进行处理。

使用EBR的平台必须对所创建的内存范围保持谨慎。使用ISPLIONE 7 SP2和较早创建的平台要求内存范围为2 ^ N的大小。在LigTimeCo系统生成器工具的更新版本中,该限制已被删除。在所有平台中的引导固件都试图清除BSS数据段。这是未初始化的数据和堆栈区域。如果BSS被链接到驻留在EBR中,并且平台受到2 ^ N大小限制的影响,固件试图清除整个2 ^ N范围。如果内存的大小小于2 ^ N,那么ACK选通将不会返回,处理器将被困在一个永无休止的内存事务中。调试异常请求在这段时间内未实现,并且会导致Eclipse调试环境无法启动调试器。

编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-07-27 10:07:38 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它