打印
[应用相关]

FIFO 并行接口 DSP异步通讯

[复制链接]
780|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shashaa|  楼主 | 2019-7-23 18:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在多CPU的分布式信号处理系统中,往往涉及CPU间的通讯与数据交换,大数据量的数据传输一般采用DMA方式,而小数据量的数据交换采用并行接口则比较快速灵活。因此,对于传输速度要求较高的DSP间的小数据量的数据交换及通讯来说,要提高DSP的工作效率,不仅要求并行接口的响应快,而且必须采用异步方式以免相互等待。本文介绍了采用FIFO芯片CY7C419来实现DSP间的双向并行异步通讯接口。该方法不仅比用TTL锁存器的方式速度快,而且译码逻辑简单,另外,由于FIFO芯片有一定的深度(256个),因此,在少于256个数据传输时,可实现零等待时间。


1 FIFO芯片简介
全满(FF)和全空(EF)标志用以防止数据溢出或不足;
扩展输入(XI)、扩展输出(X0)、首次装载(FL):用以实现无限的宽度及深度扩展,深度扩展技术可使操纵控制信号从一个元件并行传至另一个元件,因而消除了传输延迟的串行附加,其最高读、写速度可达50MHz,读写信号低电平有效;
当CY7C419独立使用或多片实现宽度扩展结构时,半空标志(HF)输出有效,在深度扩展结构中,该此脚输出扩展输出信息(XO)并告知下一个FIFO;
D0~D8为数据输入,Q0~Q8为数据输出。
R、W及MR分别为读、写及复位信号的输入端,它们均为低电平有效。







2 硬件结构与通讯流程


2.1 硬件结构
    利用FIFO实现DSP间双向并行异步通讯的结构原理如图2所示。两个CY7C419芯片U1、U2分别用于DSP56001和ADSP21020间双向并行接口的一个方向,其中U1用于完成DSP56001向ADSP21020的数据传送,U2则用于完成ADSP21020向DSP56001的数据传送。U1的全满标志(FF)与U2的全空标志(EF)通过缓冲器74LS245与DSP56001的数据总线相连,该缓冲器被映射为DSP56001数据区的一个地址单元(0x600),因此,DSP56001通过对该地址单元的读操作便可获知U1是否已写满以及U2是否有数所要读。同理,U2的全志(FF)与U1的全空标志(EF)通过一缓冲器74LS245连于ADSP21020的数据总线,该片74LS245补映射为ADSP21020数据区的一个地址单元(身份地址+0x100000),这样ADSP21020通过对该地址单元的读操作也可获知U2是否已写满以及U1是否有数据要读。另外,DSP56001对U1的写操作、对U2的读操作映射为对其数据存储区一个地址单元(0x200)的写、读操作;而ADSP21020对U2的写操作和对U1的读操作则被映射为对其数据存储区地址单元(身份地址+0x180000)的写、读操作。两个DSP芯睡均可同时对U1、U2进行复位操作。





DSP56001对双向口的读56FIFOR、写56FIFOW、复位56FIFORST及对标志口状态56**R的读信号可由DSP56001的地址线与读写信号译码获得;ADSP21020对双向口的读21FIFOR、写21FIFOW、复位56FIFORST及对标志口状态56**R的读信号则可由ADSP21020的地址线与读写信号译码获得。各译码输出的逻辑表达式如下:

    56FIFOR=AdEn+Ma10+Ma9+MRD

(映射地址为:0x200)
56FIFOW=AdEn+Ma10+Ma9+MWR
(映射地址为:0x200)
56FIFOORST=AdEn+Ma10+Ma9+MWR
(映射地址为:0x400)
56**R=AdEn+Ma10+Ma9+MRD
(映射地址为:0x600)
AdEn=DS+Ma15+Ma14+Ma13+Ma12+Ma11
21FIFOR=IDMAT+A21+A20+A19+RD
(映射地址为:身份地址+0x180000)
21FIFOW=IDMAT+A21+A20+A19+WR
(映射地址为:身份地址+0x180000)
FIFORST=(IDMAT+A21+A20+A19+WR)56FIFORST
(映射地址为:身份地址+0x200000)
21**R=IDMAT+A21+A20+A19+RD
(映射地址为:身份地址+0x100000)
为区分两个DSP的读、写信号,在逻辑表达式中用MRD和MWR分别表示DSP56001的读、写信号RD和WR。ADSP21020作为主芯片同时与多个DSP56001(图2仅画出其中一个)相连,因此每一个DSP56001均有一个不同的身份地址,表示该身份地址的地址线(A25~A22)的译码结果为IDNAT。为简化硬件电路,译码逻辑均采用PAL器件实现。


2.2 软件流程
   图3所示为DSP56001对并口进行读、写数据的软件流程。ADSP21020向DSP56001传送数据及从并行口读取由DSP56001传送过来的数据步骤与上述流程相同。对DSP56001和ADSP21020来说,并行接口均为异步双向口。当DSP56001要向ADSP21020传送数据时,首先读状态标志口(口地址0x600),若标志第0位为0(全满),则重复读状态标志口,直至标志第0位为1(数据未满,已被ADSP21020全部或部分读出)时,DSP56001才向接口(地址0x200)写入数据;当DSP56001要读取由ADSP21020传送过来的数据时,首先读状态标志口(口地址0x600),若标志第1位为0(全空),则重复读状态口,直至标志第1位为1时(不空,已邮ADSP21020写入数据),DSP56001读接口(地址0x200)即可获得所需数据。





该方法已成功应用于一台自动研制的基于DSP的实时模拟及被频信号采集与处理系统。实际运行结果表明,该方法不仅速度较高,而且译码逻辑也十分简单。

使用特权

评论回复
沙发
qiangweii| | 2019-7-23 18:44 | 只看该作者
新一代FIFO芯片容量越来越大

使用特权

评论回复
板凳
litengg| | 2019-7-23 18:45 | 只看该作者
可以存储多大的空间呢?这个方法简单可靠。

使用特权

评论回复
地板
androidbus| | 2019-7-23 18:48 | 只看该作者

传输速度要求较高的DSP间的小数据量可行。

使用特权

评论回复
5
feiqi1| | 2019-7-23 18:48 | 只看该作者

FIFO 存储缓冲芯片 IDT7203  

使用特权

评论回复
6
xia00| | 2019-7-23 18:51 | 只看该作者
通讯与数据交换一般都需要的。

使用特权

评论回复
7
hfdy01| | 2019-7-23 18:52 | 只看该作者
用FIFO实现A/D与DSP处理器的接口

使用特权

评论回复
8
hfdy01| | 2019-7-23 18:52 | 只看该作者
用FIFO实现A/D与DSP处理器的接口。。。

使用特权

评论回复
9
CallReceiver| | 2019-7-23 18:55 | 只看该作者

FIFO一般都是内部自带的。  
AL422B芯片也行

使用特权

评论回复
10
boy1990| | 2019-7-23 18:55 | 只看该作者

较快速度还是使用多核处理器。

使用特权

评论回复
11
sourceInsight| | 2019-7-23 18:58 | 只看该作者
这个读取的速度能够多快呢

使用特权

评论回复
12
bbapple| | 2019-7-23 18:59 | 只看该作者
能不能实现数据的共享的。。

使用特权

评论回复
13
磨砂| | 2019-8-13 10:26 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
14
晓伍| | 2019-8-13 10:28 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

142

主题

1494

帖子

6

粉丝