2 用FIFO实现两个处理器间数据交换
实现两个处理器间数据交换的另一种方法是FIFO结构。FIFO是一种先进先出的结构,较之双口RAM,它有如下特点:第一它无地址线,布线简单;第二它不能像双口RAM一样可以对任意地址单元操作,实现随机存取,只能是顺序存取。FIFO只能实现块操作,其读出数据的顺序和写入的顺序是一样的。FIFO有单向双向之分和同步异步之分。单向FIFO只能向一个方向传输数据,双向FIFO可以向两个方向传输数据。目前FIFO的内部结构是由双口RAM加驱动双口RAM 地址的计数器构成。同步FIFO 是由专用时钟管脚信号来使计数器翻转,片选和读写是使能信号;异步FIFO是由读写信号使计数器翻转。IDT7205(CY7C460)是单向异步FIFO的典型芯片,其管脚分布如图2所示。
D0~8是数据输入总线,Q0~8是数据输出总线,R、W是读、写控制端,XI、XO是级联控制端,HF、FF是FIFO状态满标志,EF是FIFO状态空标志。根据HF、FF状态,写处理器就可以知道FIFO是否已满,根据EF状态读处理器就可以知道FIFO里是否有数据。
笔者设计了一个用于TMS320C30传输数据给i386EX的电路,和FIFO相关部分的示意性原理图如图2。如果要反向传输,FIFO的输入输出要交换位置,逻辑要作适当的修改。其中XD0~7和C30的副总线相连接,TMS_WRITE、TMS_RESET由C30副总线的触发、读写及地址译码组合产生,TMS_FULL信号驱动C30的XRDY信号,以使FIFO满时,写总线周期延长。EXD0~7和i386EX单片机的数据总线相连,EX_READ是由i386EX状态信号、读写信号及地址译码组合产生,EX_EMPTY供i386EX单片机的I/O口判读。
3 用总线开关加存储器实现两个处理器间数据交换
第三种方法是总线开关法。对于像图像处理等需要大量交换数据的应用场合,用双口RAM或FIFO方法就不太合适。双口RAM和FIFO一般容量较小,而且价格昂贵。比如说常用的双口RAM IDT7133 只有32Kbit(2K×16bit),而单向FIFO IDT7205也只有8K×9bit。用总线开关外加大容量存储器很适合这种大容量的数据传输。
IDT74FST163212是一种典型的总线开关芯片,其管脚分布如图3所示。
其中S0~2是总线开关控制端,A、B、C、D是四个总线端口,每个总线端口有12根线组成,由S0~2控制A、B和C、D总线端口的导通或不导通。例如当S2、S1、S0为000时,总线间不导通,呈高阻态;当为001时,A总线端口和B总线端口导通,即A1和B1导通、A2和B2导通……;由于总线开关是由栅极可控的场效应管组成,信号无方向性,导通电阻很小,只有几个或十几个欧姆。