|
基于BiFIFO的多DSP高速互连系统设计
摘 要:在由TMS320C6701组成的多DSP并行信号处理系统中,DSP片间的互连性能成为系统性能的关键指标。本文从硬件和软件两个方面讨论了基于BiFIFO的DSP间高速互连的设计方案。
关键词:DSP互连;TMS320C6701;BiFIFO
引言
在一些应用中需要利用多DSP进行阵列运算。而在多DSP系统中,DSP间的数据交换能力已经成为系统性能的瓶颈。
在由TMS320C6701组成的多DSP系统中,DSP互连方案主要有:通过BiFIFO(双向先进先出存储器)直接互连;通过DSP的HPI接口互连;通过DSP的McBSP接口互连。本文设计的高速并行信号处理板采用BiFIFO直接互连方案,该板上的两片TMS320C6701之间通过一片BiFIFO芯片(CY7C43684)交换数据。
BiFIFO芯片CY7C43684
CY7C43684是Cypress公司推出的高速低功耗CMOS同步BiFIFO,该芯片片内有2块独立的16K×36bit的FIFO,支持频率高达133MHz的访问时钟。CY7C43684的两个端口均为同步端口,片选信号(ENA或ENB)有效的端口在相应时钟信号(CLKA或CLKB)的控制下完成数据传输。两个端口的时钟信号彼此独立,与两个端口相连接的器件可同时访问该芯片。
CY7C43684有两个邮箱寄存器。与它互连的器件可方便地通过邮箱寄存器交换数据和命令。当邮箱寄存器选择信号(MBA或MBB)有效时,访问CY7C43684即访问邮箱寄存器;反之,则访问芯片内部的FIFO。当写邮箱寄存器时,该芯片给出邮箱标志信号(/MBFA或/MBFB)。
CY7C43684支持两种模式的操作:标准时序模式和FWFT模式(BE/FWFT)。在标准时序模式下,FIFO复位后,写入的第一个数据会进入存储单元中,但输出缓冲器为空。只有进行第二次读操作时,才会读取有效数据。FWFT模式在复位后第一次写操作时,写入的数据会同时送往内部存储单元和输出缓冲区。一旦执行读操作,读取的数据就是有效数据。
硬件电路设计
两片TMS320C6701之间利用CY7C43684进行互连的硬件电路设计如图1所示。在本电路设计中将CY7C43684设置为FWFT工作方式,并利用CPLD实现与BiFIFO相关的控制信号的逻辑设计。TMS320C6701与CY7C43684的接口采用的是EMIF的异步接口方式。
BiFIFO读写控制信号的
逻辑设计
CY7C43684内部的FIFO映射为DSP存储器地址0x03000000,邮箱寄存器映射为DSP存储器地址0x03100000。利用外部逻辑产生CY7C43684需要的读写控制信号如下(以DSP1为例):
CLKA= /CE3 OR ( /ARE AND /AWE )
W/RA= /CE3 OR /AWE
/CSA= /CE3 OR EA21
ENA= NOT (/CE3 OR EA21)
MBA= EA20;
与BiFIFO相关的中断管理
将TMS320C6701的外部中断5(INT5)定义为BiFIFO 的邮箱寄存器的标志信号中断,外部中断6(INT6)定义为BiFIFO 的状态标志信号中断。由于CY7C43684的每个端口有4个状态标志信号(FF、EF、AE和AF),而TMS320C6701的外部中断引脚有限,因此在CPLD中设置中断使能寄存器(FIFO_EN_REG)和中断标志寄存器(FIFO_FLAG_REG)来管理状态标志信号。
FIFO_EN_REG为8位可读可写寄存器,映射为DSP的存储器地址0x03200000。该寄存器的低4位分别对应CY7C43684的状态标志信号FF、EF、AE和AF。向该寄存器的相应位写“1”使能对应的状态标志信号中断,写“0”禁止对应的中断。
FIFO_FLAG_REG为8位只读寄存器,映射为DSP的存储器地址0x03300000。该寄存器的低4位的定义与FIFO_EN_REG相同。相应位置位表示该位对应的状态标志信号出现。
当CY7C43684的状态标志信号出现时,如果FIFO_EN_REG中该状态标志信号处于使能状态,则CPLD中的FIFO_FLAG_REG寄存器相应位置位,并产生中断信号向TMS320C6701请求中断处理。DSP通过读取FIFO_FLAG_REG寄存器判断产生当前中断的状态标志信号。
软件设计
DSP1向DSP2传输数据的过程为:DSP1先将数据写入BiFIFO,即将数据写入BiFIFO内部的存储器块FIFO1中;然后DSP2从BiFIFO中读取数据,即从存储器块FIFO1中读取数据(DSP1发送的数据)。同理,DSP1可以获取DSP2发送的数据。这样,就实现了DSP1与DSP2之间的双向通信。
BiFIFO内部的两个邮箱寄存器主要用于传递命令字。当DSP1写邮箱寄存器时,BiFIFO产生邮箱标志信号中断DSP2。DSP2在中断服务子程序中读邮箱寄存器,就获得了DSP1给出的命令字。同理,DSP2也可以通过邮箱寄存器向DSP1传递命令字。
这里给出可用于DSP间交换数据块的几个函数。若DSP1要将一块数据传送给DSP2,则DSP1可调用函数Send()将数据块写入BiFIFO,并向 BiFIFO的邮箱寄存器中写入该数据块的字长度。DSP2在中断服务子程序MailBox_Isr()中读取邮箱寄存器,即数据块的字长度,然后调用Receive()函数读取BiFIFO中的数据。这里没有使用TMS320C6701的DMA方式,它可用于DSP间交换数据块的测试或小批量数据的传递。
1. 发送数据块的函数Send()
void Send(unsigned int buf[],unsigned int length)
{
for(i=0;i< length; i++)
*(volatile unsigned int *)BiFIFO_REG_ADDRESS=buf;
*(volatile unsigned int *)BiFIFO_ MAIL_ADDRESS= length;
}
2. 中断服务子程序MailBox_ Isr()
interrupt void MailBox_isr(void)
{
cmd=*(volatile unsigned int *)BiFIFO_MAIL_ADDRESS;
}
结语
本文提出了基于BiFIFO的多DSP系统高速互连的设计方案,并给出了该方案的硬件和软件设计。实践证明,该设计方案可以实现TMS320C6701间的高速数据传输。经测试,当发送数据和接收数据的TMS320C6701均使用DMA方式读写BiFIFO时,TMS320 C6701间数据交换的速率达到了160MByte/s。
参考文献
1 任丽香,马淑芬,李方慧. TMS320C6000系列DSPs的原理与应用. 北京:电子工业出版社,2000
2 CY7C436X4 Datasheet. Cypress Semiconductor Corporation,2000 |
|