随着数字信号处理技术的快速发展,数字信号处理技术在多个领域(如通信、雷达、声纳等)得到了广泛应用。在很多情况下,由于对信号要求实时处理并且数据量不断增加,单片DSP芯片已不能满足要求。AD公司推出的ADSP2106X系列,由于采用了超级哈佛结构,适用于构成各种不同的并行多处理器系统,较好地满足了上述要求,因此在国内外得到广泛应用。在多片并行ADSP2106x处理系统中,链路口的应用得到了越来越多的重视。在这方面,如何充分、有效地利用链路口进行数据传输,已成为广大DSP应用者首先要解决的一个问题。
本文根据笔者在工程中应用和调试ADSP2106X器件的经验,着重讨论链路口的适用场合、使用方法,并对使用过程中常见问题进行分析,给出解决方法。
1 ADSP2106X及其链路口的特点和功能
ADSP2106X采用超级哈佛结构,具有体积小、速度高、内存大、访问灵活等特点,适用于构成各种不同的并行多处理器系统,完成各种实时信号的处理功能,特别适用于雷达信号处理和声纳信号处理。
ADSP2106X提供了6个链路口,每个链路口包括4位数据线、一个双向时钟信号、一个双向确认信号。链路握手信号包括LxCLK和LxACK,链路口以四位码一组的方式传送32位或48位字。发送方在时钟LxCLK的上升沿送出4位码,接收方利用时钟下降沿锁存4位码,并且使LxACK有效,表示已准备接收下一个字。在每个字开始发送时,发送方如果看到LxACK无效,将使LxCLK变高,并等待LxACK有效后发送新字。当发送缓存为空时,LxCLK将保持低。如果接收时钟不超过主时钟(40MHz),LCOM寄存器的LCLKX2x位应设为0;若接收时钟为主时钟的2倍,则置为1。两个用于数据通信的链路口之间的连接关系如图1所示。
每个链路口还可以按2倍时钟频率的速率进行数据传输。
链路口有以下功能和特点:
⑴各链路口可以独立工作或同时工作;
⑵链路数据可以打包成32位或48位数据,可以被处理器核访问,可以与片内存储器进行DMA传送;
⑶外部主机可以直接访问链路口;
⑷具有双缓冲的发送和接收寄存器;
⑸可通过时钟/确认信号在链路口通信时握手,每个链路口均可收/发数据,并分别有一个DMA通道支持;
⑹利用链路连接可以组成一维到多维的各种形式处理器网络。
链路口有三种中断形式:
⑴DMA使能时,DMA完成后将产生一个可屏蔽中断;
⑵DMA禁止时,处理器核可以对存储器映射的LBUF进行读写,当接收缓冲不空或发送缓冲不满时,可产生可屏蔽中断;
⑶当外部设备访问一个未指定的链路口,或者访问一个已指定但对应LBUF被禁止的链路口时,将产生可屏蔽的LSRQ中断。
链路口有三个重要的寄存器:LAR寄存器、LCTL寄存器、LCOM寄存器,它们都是32位寄存器。LAR寄存器(3x~3x+2位)代表了LBUFx的指定链路口,x取0~5,其它位保留。LCTL寄存器主要用来对各个LBUF进行设置(是否使能、是否用DMA方式、是否用链式DMA、发送还是接收数据)。LCOM寄存器包含每个LBUF的状态位(空还是满),设置各LBUF传送数据的速率以及其它功能。
ADSP2106X有6个独立的链路缓冲LBUF5~0,每个LBUF由一个内部寄存器和一个外部寄存器组成的2级FIFO构成。当LBUF用于发送时,内部寄存器接收片内存储器送来的数据,外部寄存器将数据字展开成4位码,并且最高位先发送。当DMA或处理核送来的数据占满这2级FIFO时,将送出一个“满”标志。每当一个字展开发送后,FIFO中将空出一个位置并发出一个DMA请求。当FIFO空时,LxCLK无效。当LBUF用于接收时,外部寄存器用于数据打包,然后数据经内部寄存器以DMA方式送到片内存储器。通过链路指定寄存器LAR确定LBUF5~0与LINK5~0的连接关系。存储器之间传送数据时可以把一个LINK指定给两个LBUF,利用DMA通信。
直接数据传输(DMA)可以承担数据传输任务而无需运算控制单元干预,从而提高了程序执行效率。ADSP2106X提供了10条DMA通道,其中只有LBUF0~3支持二维DMA(即以行主模式访问一个二维阵列元素)。LBUF5~0与6个DMA通道的对应关系如下:
DMA通道1 链路缓冲LBUF0(与串口1接收共享)
DMA通道3 链路缓冲LBUF1(与串口1发送共享)
DMA通道4 链路缓冲LBUF2
DMA通道5 链路缓冲LBUF3
DMA通道6 链路缓冲LBUF4(与外部口0 EPB0共享)
DMA通道7 链路缓冲LBUF5(与外部口1 EPB1共享)
2 链路口的设置及应用中需要注意的问题
对于多DSP系统,为了克服多处理器之间占用总线的瓶颈问题,增强处理器之间的通信能力,一般利用各处理器的链路口两两互联进行高速、点到点通信。处理器间的数据连接可以根据需要进行设置,多个链路口数据通路可以同时并行工作而互不干扰。每个链路口的LxCLK和LxACK提供了处理器之间进行异步数据传输的握手信号。因为采用链路口通信,所以允许发送和接收端的长距离互联。链路口采用的是自同步方式,这样时钟和数据均只有相对延时,不存在绝对延时,这对印制板布线很重要。
要利用链路口进行通信,首先必须对链路口及DMA寄存器进行正确的设置。一般的DMA设置是:对DMA参数寄存器的起始地址IIx、地址修正IMx及传输次数Cx进行设置,然后设置相应的DMA控制器中的DMA使能位,这样就启动了DMA。设置链路口操作时,应按照LAR、LCOM、LCTL的次序设置寄存器,在对LAR重新指定前,必须禁止链路口所要指定的LBUF,一旦设置LCTL,就启动了DMA。如果已打开中断服务程序屏蔽位,则收/发数据完后就进入相应的LBUF的中断服务程序。在链路口中断服务程序中,通过检验LCOM的相应位判断收/发数据是否完成,进而利用中断服务程序来完成其它功能。要注意的是,在中断服务程序开始,要启动备用寄存器,退出时一定关闭。也就是说在中断服务程序中使用备用寄存器,以保护正常程序中的寄存器。
如果传输的数据在内存中不是一段数据,而是多段数据,就可以利用链式DMA。先禁止链路口所要指定的LBUF,对LAR指定,依次设置LCOM和LCTL(置LxCHEN位为1),向CP寄存器写入DMA控制块(每个控制块包含了相应收/发数据段的信息)在内存中的首地址,就可启动链式DMA;而向CP写入0则禁止链式DMA。当前DMA完成后,由DMA控制器自动装入下一套参数,放在存储器中的(DMA)参数寄存器,建立下一个DMA。CP的位17为1时表示当前DMA完成后产生一个中断请求。DMA参数有4个:
IIx 地址(存储器起始地址)
IMx 地址修改量
Cx 计数指针
CPx 链指针
它们在内存中的位置关系如图2所示。
链式DMA方式只是对同一个LBUF口而言,多个LBUF不存在相互之间的链式DMA的情况。
如果两个链路口之间是单次传输数据,那么先设置接收方DMA还是先设置发送方DMA都没关系;但是,如果是多次循环的收发数据,一定要保证接收方的DMA设置早于发送方DMA,否则每次传输数据时都会丢掉前两个32位字。这是因为发送方一旦准备好,就往接收方的缓存预先打入两个32位字。而当接收方设置DMA接收数据时,首先要清除这个将要用到的缓存,因此这两个32位字就丢掉了。在实际DMA传输数据过程中,一定不能对正在用的LBUF进行其它操作。
当链路口禁止时,其数据线LxDAT3~0及LxCLK、LxACK都是三态。为了允许收发双方在被使能的时间上有先后,在链路口禁止时要对LPDPD清0,以使LxDAT3~0及LxCLK、LxACK被内部下拉(50kΩ)。要注意的是,这些信号线如果悬空,则必须用内部或外部下拉电阻。
通过LINK口对DSP进行程序加载,一般用host(主机)或EPROM加载模式。
3 链路口应用实例分析
笔者在实际工作中曾用到某型雷达信号处理系统。该系统包括4块运算板和一块后处理板,这5块板子结构完全相同。单块DSP板包括20片ADSP2106X,同时处理同一个周期的4个通道(和通道、辅助通道1、辅助通道2和差通道)的数据,每5片处理一个通道,4个通道连线关系原则上基本相同。实际工作中根据重频来改变运算板的个数,运算板处理完数据通过链路口分时向后处理板传送数据。因为在实际中将出现多个链路口同时工作,为了避免各链路口工作时之间的高频干扰,对印制板设计的要求非常高。限于篇幅,下面只给出和通道的原理框图,如图3所示。
LINK0和LINK3分别接收辅助通道的数据,LINK2和LINK5把处理后的数据传送到后处理板,4块板子分时向后处理板汇总数据。通过调试发现,在同一块运算板内部,各链路口之间的数据以80MHz的速率传送(系统时钟工作频率为40MHz)时,同时工作,相互之间几乎没有干扰,可以保证数据传送的准确性,大大提高了并行传输的能力。而在4块运算板和后处理板之间传送数据(即板子之间传送数据),如果采取80MHz的速率同时传送,则相互之间干扰比较大,很难保证传输的正确性;用1倍速(40MHz)的速率传送就可减少干扰,而且在接收板(即后处理板)链路口的握手信号上采取加滤波电容或下拉电阻的措施可以减少信号中的毛刺。本系统本来设计为同时由和通道、辅助通道1和差通道向后处理板传送数据,但实际工作中为了保证数据的正确性,在满足要求的情况下,把辅助1通道的数据通过链路口传送到和通道,再由和通道把数据发送出去,这样减少了用于传送数据的链路口的个数,数据可以正确地传输。链路口之间握手信号线采用电缆连接(一般用双绞线)。目前本系统已在某型雷达中得到了很好的应用。
工程实践表明,并行多DSP系统中充分利用链路口,可在保证数据传输可靠性的同时,克服多处理器之间占用总线的瓶颈问题,增强了处理器之间的通信能力。