TigerSHARC网络加载的设计与实现
2008-06-18
作者:刘三毛, 穆贺强
摘 要: 提出了一种由多片TigerSHARC系列DSP芯片组成的任意拓扑结构" title="拓扑结构">拓扑结构的网络系统的构成和加载" title="加载">加载方法。首先通过链路" title="链路">链路口对TigerSHARC网络进行检测,由此得到该网络的加载网表;然后分析加载网表,并实现整个网络的加载;最后给出网络加载编程的流程图。
关键词: TigerSHARC 加载 网表
随着对实时信号处理要求的不断提高,尽管DSP的运算能力在不断增强,但仍然需要由多个DSP组成大规模并行处理系统。ADI公司新推出的高性能静态超标量处理器——TigerSHARC系列DSP处理芯片(包括TS101S和TS20xS)具有很强的数据运算和吞吐能力,其独特的结构和功能(如DMA通道、全双工的链路口)特别适合用于构成大规模信号处理系统。
由多片TigerSHARC系列DSP芯片组成的信号处理阵列,称为TigerSHARC网络。对于这样一个复杂系统,在上电复位后,如何将可执行文件放到指定的DSP中并按照规定的顺序执行程序是非常关键的。在分析TigerSHARC系列DSP芯片的结构特点和加载原理的基础上,本文提出一种任意拓扑结构的TigerSHARC网络的构成和加载方法。首先对TigerSHARC网络进行自动检测,生成加载网表;然后分析该加载网表,实现TigerSHARC网络的加载;最后给出网络加载的流程图。
1 TigerSHARC网络的构成
TigerSHARC为实现多处理器互联提供了两种方案。
(1)共享总线结构:多个TigerSHARC系列DSP芯片通过共享外部总线的方式构成多处理器系统。一个总线上最多可以有八片TigerSHARC系列DSP芯片。这样的系统又称为紧耦合系统,典型结构如图1所示。
(2)链路口耦合结构" title="耦合结构">耦合结构:利用链路口进行处理器间的无缝连接,可以连接成不同的拓扑结构,如流水线结构、网格结构等,构建的多维处理器结构,具有很好的扩展性和灵活性。这样的系统也叫做松耦合系统。网格结构如图2所示。

对于大型系统,基于任务的分配,将系统中的DSP分成若干个处理单元,处理单元的内部采用共享总线结构或链路口耦合结构,处理单元间采用链路口耦合结构。这样可兼顾二者的优点。
每个处理单元或者每片DSP都可作为网络中的一个节点(node)。为了讨论方便,本文中的节点指一片DSP。首先被加载的节点称为根节点,通过它加载的其余节点称为从节点。
2 TigerSHARC的加载方式
TigerSHARC有四种加载方式:链路口方式、Host方式、EPROM方式、no boot方式。no boot方式不需要加载核,复位后通过使能中断请求信号使DSP自动从相应的存储空间开始执行。ADI公司为前三种方式分别提供了加载核,其核心思想和功能完全一样,只是在实现代码上稍有差异。VisualDSP++的加载器应用程序" title="应用程序">应用程序(elfloader.exe)接收加载核和用户应用程序,生成相应的加载程序。但只有DSP运行了相应的加载核之后才能继续加载用户应用程序。
值得注意的是:在链路口加载核中,定义的常数LINK指定用于接收的链路口号,要根据实际情况进行更改。如果需要对系统进行不同的设置,必须在修改加载核后重新编译加载核,但要保证加载核长度不超过256字,并在编译后使用。
3 加载网表的生成
要得到加载网表,需要探测网络中所有的链路连接信息,即判断各链路口是否可用于加载,可采用如下方法:
(1)主动式探测
设置被测链路口为发送状态,往该链路口的发送缓冲区写一批数,如果一定时间后该发送缓冲区为空,则该链路口可用于加载。
(2)被动式探测
设置被测链路口为接收状态并清空接收缓冲区,如果一定时间后该链路口的接收缓冲区非空,则该链路口可用于加载。
根节点完成自身加载后,采用主动式探测依次判断其各链路口是否可用于加载。然后通过可用于加载的链路口发送从节点探测程序,指导从节点继续网络探测;根据根节点发送所用的链路口号对从节点编号,将该编号与发送所用链路口号一起发送到该从节点并回送到根节点中保存,同时要标记该从节点已被加载过(booted=1)。
已被加载过的从节点首先采用主动式探测,如果发现有可用于加载的链路口,表示存在下一级加载,则采用和根节点相同的探测过程,并且在完成后再采取被动式探测,得到该节点的其它链路连接信息并回送到根节点;如果发现没有可用于加载的链路口,就采用被动式探测,得到该节点的其他链路连接信息并回送到根节点。该过程的流程图如图3所示。
对于每个从节点,有两个链路口很重要:用于发送下级节点程序的链路口(LINKt)和接收本节点及下级节点程序的链路口(LINKr)。LINKt 作为本节点的加载路径信息的一个元素;LINKr用于本节点的链路口加载核的生成。
因为一个从节点可能有多种加载路径,在得到网络的链路连接关系后,可根据信号处理任务的分配为各节点选择加载路径。将各节点的加载信息,包括加载路径信息、加载程序、代码长度和参数等以一定的格式组织,作为该节点的加载文件包;该网络中所有节点的加载文件包组成该网络的加载网表;在加载网表的最后增加一个代码长度为0的虚拟节点的加载文件包(见表1最后一行),用来通知各节点网络加载的结束。
图4为某DSP系统的网络拓扑结构图,表1为该网络的加载网表。

4 网络加载过程分析
在这里采用一台PC机作为主机。上电复位后,PC机先指导TigerSHARC网络进行自动检测,处理返回信息,生成加载网表;然后进行网络的加载。根节点采用Host方式加载后,每次从PC机中读取并分析一个从节点的加载文件包,并通过链路口发送给从节点,指导从节点以链路口方式完成网络加载。可以为其单独写一个加载程序。
从节点的加载程序按功能可分为三部分:256字的LINK加载核、网络加载程序、用户程序。LINK加载核在完成本节点的初始化后,继续通过链路口接收本节点的网络加载程序和用户程序并完成自身的覆盖。然后开始执行网络加载程序,其作用是接收并发送下级节点的加载文件,进行网络加载。网络加载完成以后,就等待运行用户程序。
网络加载程序是实现网络加载的关键,因此笔者写一个适用于所有从节点的程序netboot()来完成此功能。在每个节点中设置一个有四个元素的数组booted[4]标志各链路口的状态(各元素依次对应链路口0~3),booted[4]为1表示链路口处于发送状态;为0表示链路口被关闭。链路口方式加载采用的是核访问方式,即将要传输的数据通过链路口的发送缓冲区发送。
netboot()程序流程如图5所示,其过程如下:
(1)保存部分寄存器的值,用于在网络加载完成后恢复这些寄存器的值。禁止DMA传输,设置数组booted[4]所有元素的值为0,开辟缓冲区temp。
(2)接收并保存本节点的参数arc和argv,供本节点用户程序运行时使用。
(3)读下一节点的代码长度CodeLength。如果CodeLength为零,则表示网络加载已经结束,跳转至(8);否则,继续执行加载。
(4)读出发送下一节点程序所用的链路口t。如果booted[t]=1,将t从下一节点的加载路径信息中去掉,并将代码长度减去1,其余信息不变,然后将更新后的加载文件包发送到下一节点;如果booted[t]!=1,则屏蔽寄存器中链路口t对应的发送结束中断,然后读寄存器中链路口t对应的发送请求标志。当链路口t有发送请求时,设置链路口t为核访问方式输出,且置booted[t]=1。
(5)接收并发送下一节点的256字加载核程序。
(6)等待一段时间,以保证加载核在下一节点的运行。
(7)接收并发送下一节点余下的程序代码。完成后跳转到(3)继续执行。
(8)关闭所有接收链路口,清除缓冲区temp和链路状态寄存器。
(9)依次通过本节点用于加载的链路口向下一节点发送缓冲区temp中的值,然后关闭该链路口。由于缓冲区temp中的数据为0,被下一个节点当作代码长度使用,从而结束后续各节点的加载过程。
(10)清中断锁存器,等待一段时间后,恢复寄存器设置。结束netboot()过程,并等待执行本节点的用户程序。
本文介绍的TigerSHARC网络加载和编程方法简单、可靠,并在笔者研制的基于TS101S和TS201S的信号处理系统上进行了验证。该方法具有一定的普遍性,对同类DSP的应用具有较高的参考价值。
参考文献
1 ADSP-TS201S TigerSHARC Processor Hardware Refer-ence. Analog Devices Inc.,2003
2 ADSP-TS201S TigerSHARC Processor Programming Reference. Analog Devices Inc.,2003
3 VisualDSP++3.5 Loader Manual for 32-bit Processors. Analog Devices Inc.,2003




