位置:51电子网 » 技术资料 » D S P

基于BiFIFO的多DSP高速互连系统设计

发布时间:2008/5/27 0:00:00 访问次数:918

摘 要:在由tms320c6701组成的多dsp并行信号处理系统中,dsp片间的互连性能成为系统性能的关键指标。本文从硬件和软件两个方面讨论了基于bififo的dsp间高速互连的设计方案。
引言
在一些应用中需要利用多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[i];
*(volatile unsigned int *)bififo_ mail_address= length;
}
2. 中断服务子程序mailbox_ isr

摘 要:在由tms320c6701组成的多dsp并行信号处理系统中,dsp片间的互连性能成为系统性能的关键指标。本文从硬件和软件两个方面讨论了基于bififo的dsp间高速互连的设计方案。
引言
在一些应用中需要利用多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[i];
*(volatile unsigned int *)bififo_ mail_address= length;
}
2. 中断服务子程序mailbox_ isr

相关IC型号

热门点击

 

推荐技术资料

业余条件下PCM2702
    PGM2702采用SSOP28封装,引脚小而密,EP3... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!