嵌入式多核技术方案解析
含了多少个内核。对于开发者来说,最大的挑战就是经济有效地使用这些接口 来同步多核以及多处理的调试工作。其中,单一调试器方式采用IEEE 1149.1标准daisy-chain方法。
认识多核调试方法
对于多核架构来说,单一调试器的主流选项仍然是JTAG多路技术。这种技术对IEEE JTAG技术规范进行了拓展,以便为通过共享JTAG接口连接起来的每个内核提供独立的调试器。在多路技术的支持下,通过对希望调试的内核进行注册登记 (Registering),开发人员可经由单一JTAG接口访问多个离散状态的内核。这种解决方案的最大优势在于它的连接和调试性能。因为多路技术单独 连接到每个内核,因而避免了daisy-chaining方法中所遇到的比特位移(bit shifting)方面的麻烦,因而在单芯片中的多核系统中具有更高的性能。这种方式的另一个好处是不需要对开发工具进行修改,从而可以顺畅地应用在多个 开发项目之中。
多路技术(Muxing)方法所存在的主要问题是在多内核调试过程中无法同时启动和停止内核来同步应用。如果要停止全部内核,开发人员只能 顺序地逐个进行,这就导致了调用延迟问题。在调试过程中的延迟问题,会导致很难在内核之间的操作系统、中间件和应用中找到发生问题的确切位置,特别是当运 行在不同内核之中的应用存在相互依赖性的时候,这个问题就更为突出。例如,某个产品包含DSP功能和 ARM 9内核,其中DSP用来处理视频流,ARM 9内核提供文件系统,那么内核的启动与停止同步将会十分关键。如果调试过程中在ARM内核的启动和 DSP的停止之间出现过多的延迟,DSP视频流数据很快 就会溢满ARM文件缓冲区,而视频流也将会中止。如果出现这种情况,就很难判断系统中的问题出在哪里。而且,多路进程也给开发人员在故障排除时带来了许多 新的问题,将会大幅度增加调试时间。
另外,如果在有多个厂商产品组成的异构多核环境中进行调试工作,例如处理器来自一个厂商,而DSP器件来自另一个厂商,还会有更复杂的问题 需要处理。因为这种情况下的多路(Muxing)机制更为复杂,如果各部分之间的兼容性没有得到保证,也就很难保证系统正常运行。此时,仅仅依靠多路技术 是无法解决问题的,开发人员就需要采用可编址扫描端口(addressable scan port),这也可能是最后仅有的方法了。这种架构需要用到非常特殊的组件,这些组件可以让开发人员把 JTAG扫描链分割成多个功能组,并通过唯一的地址 来访问每个功能组。这是一种多支路(multi-drop)架构,经常被用于底板(Backplane)环境之中。在这里,有一个分别可编址的扫描链在底 板内实现路由(Routed),从而使机箱中的每个底板都拥有自己专属的扫描链。这种架构的运行速度受限于可编址扫描端口的速度,最典型的情况是 25MHz。
拥有先进多核调试工具
Wind River 拥有的JTAG加速器和服务器技术可以显著降低JTAG序列包之间的空闲时间,完全充分地利用了可用的JTAG带宽。与JTAG有关的另一个问 题涉及到调试能力,例如用停止请求信号来立即停止某个内核,或者用停止指示信号来停止某个内核并同步其他的内核的停止。与其他所有的局限性一样,这类问题 也依赖于厂商的实现方法。
Wind River on-chip debugging(片上调试)解决方案可以同时启动和停止多个内核。实际上,Wind River提供的JTAG解决方案,也就是Workbench On-Chip Debugging,是以集中化的方式来实现多核和多处理的调试功能。这个解决方案可以在单一扫描链(Scan Chain)中同时调试多达8个内核。而且,不管这些内核处于同一个芯片之中、分布在线路板中的多个芯片或者分布在复杂系统中的多个线路板之中, Workbench On-Chip Debugging都能够应付自如。
在 Wind River 的多核解决方案中,开发人员可以同时停止或者启动任何内核,在一个或者多个内核上设置断点,其中还可以包括条件断点。此外, Workbench Eclipse框架和基于代理的调试方式使开发人员在单一控制台上即可管理多内核/多处理应用的开发。开发人员可以在JTAG 调试和基于代理调试二者之间 灵活地选择,例如在硬件Bring-Up、内核、中间件和其他应用功能调试的时候采用JTAG连接,然后在自己认为适当的时机平滑地转移到基于代理的调 试,而这些调试工作都是围绕着同一个应用的。这些能力都会增加不同开发人员之间的协同能力,同时改善异常问题的判定效率。
结论
在多核开发中,JTAG调试可以承担非常有价值的角色,有效地改善“编辑-编译-调试”周期时间。然而,实现这一 点的前提是把JTAG调试与基于标准的集成化开发环境(例如Eclipse)紧密地集成起来。最理想的技术方案是
- 基于TI最新多核DSP SoC架构解析(05-12)
- ARM linux解析之压缩内核zImage的启动过程(11-10)
- 基于Xilinx V5的DDR2数据解析功能实现(09-12)
- 网站出现“register_globals must is Off”解析(09-12)
- SAX PULL DOCUMENT解析XML总结(09-12)
- 两起西门子PROFIBUS-DP网络干扰故障解析(09-12)