以上是双口RAM自身提供的仲裁逻辑控制,也可采用自行设计的仲裁协议。下面的实例将介绍这种方法。
2.FIFO的工作原理
FIFO(First In First Out)全称是先进先出的存储器。先进先出也是FIFO的主要特点。
20世纪80年代早期,FIFO芯片是基于移位寄存器的中规模逻辑器件。容量为n的这种FIFO中,输入的数据逐个寄存器移位,经n次移位才能输出。因此,这种FIFO的输入到输出延时与容量成正比,工作效率得到限制。
为了提高FIFO的容量和减小输出延时,现在FIFO内部存储器均采用双口RAM,数据从输入到读出的延迟大大缩小。以通用的IDT7202为例,结构框图如图4所示。输入和输出具有两套数据线。独立的读写地址指针在读写脉冲的控制下顺序地从双口RAM读写数据,读写指针均从第一个存储单元开始,到最后个存储单元,然后,又回到第一个存储单元。标志逻辑部分即内部仲裁电路通过对读指针和写指针的比较,相应给出双口RAM的空(EF)和满(FF)状态指示,甚至还有中间指示(XO/HF)。如果内部仲裁仅提供空和满状态指示,FIFO的传输效率得不到充分的艇。新型的FIFO提供可编程标志功能,例如,可以设置空加4或满减4的标志输出。目前,为了使容量得到更大提高,存储单元采用动态RAM代替静态RAM,并将刷新电路集成在芯片,且内部仲裁单元决定器件的输入、读出及自动刷新操作。
or #0004h
sacl 71h
out 71h,iosr ;恢复IO2为高电平
ret 三、FIFO的双向扩展和语音数据交换系统
用DSP实现语音压缩和解压算法得到了广泛的应用。例如,用TMS320LC549可以实现基于G.723.1压缩算法的全双工语音编解码器。G.723.1语音解码器可将输入的PCM编码压缩为6.3和5.3Kbps的语音数据,压缩出的语音数据是每30ms突发输出一帧。比如,6.3Kbps的速率,编解码器每30ms输出24Byte压缩语音帧(包括信令数据),同样,编解码器每30ms突发接收24Byte语音数据解压,输出PCM编码。为了实现语音数据的全双工实时交换,可采用双向FIFO设计交换系统。下面,以1片AT89C51(简称MCU)与2片TMS320LC549(简称DSP)实现语音数据双向交换为例,介绍FIFO的具体应用。其中DSP用于语音数据的压缩解压;MCU用于转发语音数据流和监控;FIFO用于CPU之间的数据缓冲。
首先,用2片单向FIFO IDT7202扩展为双向FIFO(也可使用专用的双向FIFO),如图6所示可以在A和B系统之间实现双向通信。
图7为语音双向交换的原理简图(图中未给出模拟话路和PCM编解码器等)。MCU分别通过两个双向FIFO与相应的DSP实现语音数据交换。MCU对双向FIFO的选通控制采用一片16V8GAL电路。DSP压缩完一帧用中断通知MCU取压缩的语音数据。
MCU在中断服务程序中接收压缩语音。图8给出了MCU的中断服务程序。如图8所吉,MCU分别在两个对等的中断服务程序中,从上行的FIFO接收上行的语音数据,然后转发给另一个下行的FIFO。DSP检测下行FIFO的空标志。若为空间,则从下行的FIFO中接收需要解压的语音数据,并对语音数据包解压回放。