0 引言
ADI公司的高性能数字信号处理器Tiger-SHARC系歹0包括ADSP-TS101S、ADSP-TS201S、ADSP-TS202S和ADSP-TS203S等芯片。它们被广泛应用于视频和通信市场,包括3G蜂窝和宽带无线基站以及国防军事设备,如战地雷达、航空器和声纳等。目前,TigerSHARC高性能数字信号处理器已成为多个DSP并行处理应用的实用标准,对加快数字信号处理技术的发展和扩大DSP的应用起到了十分突出的促进作用。Visual DSP++4.0是一种使用方便的集成调试开发软件平台,它支持ADI公司浮点系列处理器的各种产品(如SHARC系列,BLACKfin系列和TigerSHARC系列)。它可以通过可视化的图形窗口方式与用户进行信息交换,也可以在窗口中进行高效的工程管理,并轻松地在编辑、编译和调试之间相互切换,以实现高效率的程序开发。 本文结合某图像实时处理系统的实现,重点介绍了基于ADSP-TS201S的多处理器系统的构建方法,讨论了其数据传输的模式,从而实现了以Visual DSP++4.0为平台,面向ADSP-TS201S EZ-KitLite,并采用共享外部总线的模式构成的MP系统。
1 多处理器系统的构建
当系统中存在多个处理器,且用户想一起控制/调试这些处理器时,必须要为协调功能进行额外的编程,以便调试和构建多处理器系统。
1.1 MP系统的连接描述文件(LDF)
建立MP系统的第一步是使用链接器的多处理器功能创建一个多处理器工程和一个描述系统的LDF文件。
其中LDF文件用于描述多处理器的存储器偏移量、共享存储区和每个处理器的存储空间。在书写MP系统的LDF文件时,必须考虑以下LDF命令:
◇MPMEMORY {},该命令定义了每个处理器在多处理器存储空间(MMS)中的偏移量。在多处理器链接过程中,链接器使用该偏移量来链接各个处理器;
◇MEMORY {},该命令可定义系统中每个处理器的存储空间;
◇PROCESSOR {} 和SECTIONS {},利用这两个命令可定义各个处理器,并可使用存储器定义将每个处理器的输出文件放置到程序段中。
◇SHARED_MEMORY {},当在系统中使用了外部共享存储器时,需要使用该命令。该命令能识别共享存储器项的输出,并生成驻留在MP系统的共享存储空间中的共享存储区的可执行文件(.SM)。
◇SM文件由工程文件中的源文件(.ASM,.C或CPP)产生,该文件包含有放置于外部共享存储器中的数据变量的定义。
◇LINK_AGAINST (),该命令可解析多处理器存储空间中的符号,并命令链接器检查指定的可执行文件(.DXEs and.SMs),以解析局部没有解析的变量和标号,以及在MMS (也就是系统中其他处理器的内部存储器)中定义的表达式或变量。通常在LDF文件中,必须使用LINK_A-GAINST 0命令。
如果命令行中包含.SM和DXE文件,则必须先放.SM文件,后面接着放其他DXE文件,只有这样,链接器才能正确的解析变量。一个LDF文件中最多可以说明的处理器数量是由处理器结构指定的(比如ADSP TS201最多支持8片)。应该注意的是,在同一个LDF文件中,VisualDSP++4.0不支持有不同结构的DSP混合使用(如ADSP-TS201S和ADSP-21160混合使用)。
1.2 多处理器存储空间(MMS)
多处理器存储空间可分成许多不同的地址区(地址区的数量是处理器指定的),这些地址区与MP系统中各个DSP的内部存储器空间是一致的。图1所示是对ADSP-TS201S的多处理器存储空间的描述。
多处理器系统中某个特定的处理器的内部存储器既可以作为源地址访问,也可以作为目的地址来访问,具体访问取决于使用的地址区。对广播区写数据时,将访问多处理器系统中所有DSP的内部存储器。例如,访问地址空间0x1000000-0x13FFFFF中的某个存储单元,与访问多处理器系统中ID号为0的DSP的内部存储空间是等价的。
TigerSHARC处理器可通过对其多处理器空间的写操作来访问,也可以访问其自身的内部存储空间,但该操作是通过外部总线完成,在数据通过TigerSHARC总线接口的特殊情况下,一般不应使用该操作。而对多处理器空间自身的读访问将设置SYSTAT寄存器中的SELF MPROC READ错误标志位,表示该操作是非法访问。
下面是使用MMS来访问系统中另一片DSP芯片存储区的源程序(此时,ID号为0的DSP访问ID号为1的DSP的内部存储空间):
其中,ID1的MMS地址为0x14000000,该地址与ID1相对应的内部存储器(0X800000)地址相加,就可以IDO对ID1的内部存储区进行读访问。
在DSP多处理器系统中,必须存在ID号为0且接有SDRAM的DSP,该DSP用于执行对SDRAM的初始化(MRS)。这样,就存在一个仅由ID=000的DSP使能开漏上拉的相关问题。也就是说,在复位后。ID0就是总线控制器,由它来以循环优先级方式将总线控制权从当前主处理器转移到其它处理器。
1.3外部存储器
ADSP-TS201S片内的24Mbit嵌入式DRAM (e-DRAM)既可以存放程序,也可以存放数据。然而,在某些应用中,也需要使用外部存储器。外部存储器可在MP系统中作为系统中所有DSP的共享资源,也可以由某个处理器专用。
在硬件系统中使用不同类型的存储器时,系统中所有的DSP都必须建立对它恰当的访问方式。用户可通过系统控制寄存器(SYSCON)来对访问方式进行编程。用户定义的设置必须支持与存储器设备相一致的访问模式,而该访问模式正是用户希望在硬件系统中使用的访问方式。共享外部总线簇连接的所有处理器的SYSCON寄存器都必须有相同的设置。 ADSP-TS201S支持对SDRAM的无缝连接。和SYSCON寄存器一样,所有处理器的SDRAM配置寄存器(SDRCON)也必须设置成相同的值。DSP的内部存储器控制器一旦配置,DSP就可以通过外部总线访问外部存储器。
笔者设计的本系统有两个DSP,并将SDRAM作为它们的外部共享资源。下面是其程序代码,从该代码可见,其与SDRCON寄存器的初始化相一致。
其中Shared.asm文件中包含了一些变量定义,这些变量就是放置在外部存储器中的数据。实际上,本系统中有最小ID号的DSP(也是系统中优先权最高的)在加载过程中,负责初始化在.ASM共享存储器文件中定义的外部数据变量。
1.4矢量中断(VIRPT)
矢量中断用于主机和DSP之间,或者DSP和DSP之间的通信。该中断是其它主处理器使用的通用中断。通过把中断子程序的地址写入VIRPT寄存器,主机或主DSP就可以从DSP发出矢量中断命令。当服务该中断时,高优先级中断将使DSP转到子程序地址,以服务该子程序。
一旦外部定义的标号用作ISR地址(如例中的VIRPT_ISR_ID0),服务中断(MMS_ID0)的DSP的MMS偏移量就必须减去某个值,才能正确的对应到ISR的矢量地址。
上例仅仅说明了如何使用内部处理器的VIRPT中断作为标志,或者表征MP系统中程序已经执行完成。
2多处理器的数据传输
多处理器系统往往需要进行海量数据流的处理,以提高系统的工作效率。通常用于实现ID0和ID1之间的直接存储器(DMA)、从ID0和ID1到外部存储器(SDRAM)、从ID1到ID0的核传输、对系统中所有DSP广播式写操作等几种外部端口(EP)的数据传输。
TigerSHARC包含了14个DMA通道,其中4个指定为外部存储器设备(通道0、1、2、3)。
2.1 从ID0到ID1的DMA传输
本实例说明了从ID0内部存储器到ID1外部存储器的DMA数据传输。在这种情况下,DMA通道0可将tx_ID0中存储的数据传输到rx_ID1中。但这种传输方式必须建立两个传输控制块(TCBs),其中一个是源地址,另一个是目的地址。
由于在该实例中没有选择2维DMA,因此,应注意寄存器xr2和yr2中的值是不相关的。只要源和目的TCB装入新值,DMA传输就会开始。一旦DMA完成,就产生中断,并运行_dma_int矢量中断程序。
下面是用DMA通道0将值载入到每个TCB的程序代码:
从ID0内部存储器到SDRAM进行数据传输时,只需对以前的例子作细微的改动即可。即先使源TCB装人的值和前面(xR3:0)寄存器的值相同,目的TCB则用寄存器yr3:0的值写入,而yr0的值则由rx_ID1改变为shared_data。这种情况下,就可通过DCS0和DCD0分别代替DCS1和DCD1,并用DMA通道1实现数据传输。代码如下:
2.3 ID1到SDRAM的DMA传输
下面的实例是从内部存储器到SDRAM的DMA数据传输(只是从ID1,而不是ID0)。可应用相同的概念设置源和目的TCB:
2.4 从ID1到ID0的核传输
核传输是不使用DMA的另外一种数据处理方式。这种情况下,整数算术逻辑单元(IALU)用于从ID1到ID0内部存储器的数据传输。实例说明如下:
3 ID检测
在多处理器系统构建完成后,接下来还要注意:所生成的可执行文件要载人到该系统中正确的DSP中,以免出错,以下子程序可用于检测所生成的可执行文件是否载入到了系统中正确的DSP中,以确保没有ID失配:
4结束语
除了多处理器系统的构建方法和数据传输的模式外,MP系统应用中还有DSP资源的分配、总线连接和多DSP系统与FPGA等内容。随着ADSP-TS201S芯片的广泛应用,该处理器的运算速度、存储能力和通信逻辑处理优势已明显的表现出来,而且链路口的传输速度、可靠性和灵活性也较以前有了较大的改观。TigerSHARC功能强大的运算单元和支持多处理器并行处理的特性,使得它特别适用于复杂的系统,如国防工业、医用图像处理以及复杂无线通信算法的处理。