多核调试新方法探讨
对于嵌入式装置而言,多核技术可以提供更高的处理器性能、更有效的电源利用率,并且占用更少的物理空间,因而具有许多优势。
要想充分发挥多核以及多处理解决方案的潜能,仅仅拥有高性能的芯片是不够的,还需要采用新的编程方法、调试方法和工具。在传统上,JTAG调试技术主要是用于硬件Bring-Up,如今也常常被用于配合基于代理的调试(agent-based debugging)。然而,在多核和多处理的环境中,片上调试(on-chip debugging)正在扮演着越来越重要的角色。
多核软件调试的难点所在
多核环境显著增加了系统复杂度,因此在对操作系统和与多核相关的硬件进行调试的时候,就必须采用一整套更有效的工具。在嵌入式软件开发工作中,多核主要呈现为多处理的形式,而这些处理器的内核不一定要处在同一个芯片之中。不论这些处理器内核是在同一个芯片之中,或者是分布在同一个电路板中的多个芯片之中,甚至是同一个系统中的多个电路板之中,开发人员都必须解决好多处理环境中的调试问题。
多核与多处理技术为系统调试带来了许多新的挑战,因为系统复杂度不断增加,要通过优化硬件和软件来充分发挥其中的性能潜力,难度就更大了。其中最主要的挑战来自以下几个方面:第一,有效地管理内存和外设等共享资源;第二,在多内核、多电路板和多操作系统的环境中对操作系统和应用代码进行调试;第三,优化JTAG接口并充分利用JTAG带宽;第四,调试单一芯片中的同构和异构多核,进而实现整个系统的协同调试;第五,有效地利用JTAG与基于代理的调试方法,确保不同调试工具之间的顺畅协同;第六,确保多核环境中应用调试的同步机制。
在多核调试中,主要是在解决一个核心问题--由SoC厂商所提供的JTAG接口所造成的局限性。为了节省成本,许多SoC厂商都只为芯片提供单一的JTAG接口,而不理会其中包含了多少个内核。对于开发者来说,最大的挑战就是经济有效地使用这些接口来同步多核以及多处理的调试工作,而经常用到的就是采用IEEE 1149.1标准daisy-chain方法。
在JTAG接口中有4条线:TDI、TDO、TCK和TMS。为了在多核调试中能够与LTAG接口相连,主要涉及到TDI和TDO。在daisy-chain中,前一个内核的输出被连接到后一个内核的输入,以这种方式连接,直到抵达所有的内核。daisy-chain方法是基于标准的,得到了广泛的应用,并且在所有的多核环境中都是有效的。
在daisy-chain方法中,JTAG调试器利用JTAG服务器的软件接口来解决多核环境中经常遇到的JTAG连接受限问题。不论内核位于何处,JTAG服务器都可通过JTAG接口来实现每个内核的编址。JTAG服务器也帮助开发者实现同一个JTAG下的内核同步、进程的起始与停止以及连接的增加和移除,而且不会影响到扫描链(Scan-Chain)中的处理器或整个系统。这种方法可以保持精确的时钟,同时为跨越多个内核的不同操作系统或者同一个操作系统中不同进程的调试提供便利,而daisy-chain方法的核心目标是性能和JTAG带宽的充分利用。
daisy-chain方法中JTAG的主要问题是在Shift-IR阶段发送的数据量取决于在扫描链中发出数据的装置数量以及每个设备的IR长度。例如,在一个包含3个装置的daisy-chain中访问一个8位IR寄存器需要24Bit的数据量。这类问题对于DR同样存在,但由于一个处于 bypass模式的装置在Shift-DR阶段实际上只需要1bit的数据,从而使这类问题的影响变得比较小。如果JTAG服务器能够设计得恰如其分,几乎就可以避免对性能造成任何影响。这也正是Wind River所提供的JTAG解决方案的最大特色。
OCD是多核调试利器
单一调试器的主流方法仍然是JTAG多路技术。这种技术对IEEE JTAG标准规范进行了拓展,以便为通过共享JTAG接口连接起来的每个内核提供独立的调试器。在多路技术的支持下,通过对希望调试的内核进行注册登记(Registering),开发人员可经由单一JTAG接口访问多个离散状态的内核。这种解决方案的最大优势在于它的连接和调试性能。因为多路技术单独连接到每个内核,因而避免了daisy-chaining方法中所遇到的比特位移(bit shifting)方面的麻烦,因而在单芯片中的多核系统中具有更高的性能。这种方式的另一个好处是不需要对开发工具进行修改,从而可以顺畅地应用在多个开发项目之中。
多路技术方法所存在的主要问题是在多内核调试过程中无法同时启动和停止内核来同步应用。如果要停止全部内核,开发人员只能顺序地逐个进行,这就引发了调用延迟问题。在调试过程中的延迟问题,会导致很难在
- 展望未来 多核DSP技术不仅仅是小把戏(04-03)
- Windows操作系统多核CPU内核线程管理方法(01-21)
- 嵌入式多媒体多核应用软件设计框架(11-30)
- 多核DSP Bootloader 代码加载方法(01-12)
- 多核处理器设计的要素(01-12)
- 基于多核DSP Bootload代码加载方法研究(01-16)