在测控、仪器仪表、语音信号处理和图像通信领域中往往需要多处理器分工完成数字信号处理(DSP)算法和与外部系统的通信、控制、数据采集和人机接口功能。

 

在多机系统中,CPU 之间的通信常采用以下几种方式:

 

(1)串行通信。这种方式相对简单,由于受到波特率的限制,在不同档次单片机之间需要通信业务大的场合得不到很好的通信效果。

 

(2)并行通信。利用 CPU 的 I/O 功能在 CPU 之间增加缓冲器或锁存器实现双机通信。通信性能较串行通信有所提高,但仍然得不到理想的效果。

 

(3)利用共享式存储器实现。DMA 方式就是其中的一种,能够达到数据的高速传输,但不能同时访问存储器,CPU 必须等待总线,而且有些 CPU 不支持 DMA 功能。另一种是利用多端口存储器,双口 RAM 和 FIFO 是常用的两种多端口的存储器,允许多 CPU 同时访问存储器,大大提高了通信效率,而且对 CPU 没有过多的要求,特别适合异种 CPU 之间异步高速系统中。

 

因此,受到硬件设计者的青睐。


一、两种多端口存储器

1. 双口 RAM 的仲裁控制

双口 RAM 是常见的共享式多端口存储器,以图 1 所示通用双口静态 RAM 为例来说明双口 RAM 的工作原理和仲裁逻辑控制。双口 RAM 最大的特点是存储数据共享。图 1 中,一个存储器配备两套独立的地址、数据和控制线,允许两个独立的 CPU 或控制器同时异步地访问存储单元。既然数据共享,就必须存在访问仲裁控制。内部仲裁逻辑控制提供以下功能:对同一地址单元访问的时序控制;存储单元数据块的访问权限分配;信令交换逻辑(例如中断信号)等。

 

 

(1)对同一地址单元访问的竞争控制

 

如果同时访问双口 RAM 的同一存储单元,势必造成数据访问失真。为了防止冲突的发生,采用 Busy 逻辑控制,也称硬件地址仲裁逻辑。图 2 给出了地址总线发生匹配时的竞争时序。,此处只给出了地址总线选通信信号先于片选脉冲信号的情况,而且,两端的片选信号至少相差 tAPS――仲裁最小时间间隔(IDT7132 为 5ns),内部仲裁逻辑控制才可给后访问的一方输出 Busy 闭锁信号,将访问权交给另一方直至结束对该地址单元的访问,才撤消 Busy 闭锁信号,将访问权交给另一方直至结束对该地址单元的访问,才撤消 Busy 闭锁信号。即使在极限情况,两个 CPU 几乎同时访问同一单元――地址匹配时片选信号低跳变之差少于 tAPS,Busy 闭锁信号也仅输出给其中任一 CPU,只允许一个 CPU 访问该地址单元。仲裁控制不会同时向两个 CPU 发 Busy 闭锁信号。

 

 

(2)存储单元数据块的访问权限分配

 

存储单元数据块的访问权限分配只允许在某一时间段内由 1 个 CPU 对自定义的某一数据块进行读写操作,这将有助于存储数据的保护,更有效地避免地址冲突。信号量(Semaphore,简称 SEM)仲裁闭锁就是一种硬件电路结合软件实现访问权限分配方法。SEM 单元是与存储单元无关的独立标志单元,图 3 给出了一个信号量闭锁逻辑框图。两个触发器在初始化时均使 SEM 允许输出为高电平,等待双方申请 SEM。如果收到一方写入的 SEM 信号(通常低电平写入),如图 3 所示,仲裁电路将使其中一个触发器的 SEM 允许输出端为低电平,而闭锁另一个 SEM 允许输出端使其继续保持高电平。只有当先请求的一方撤消 SEM 信号,即写入高电平,才使另一 SEM 允许输出端的闭锁得到解除,恢复等待新的 SEM 申请。

 

 

(3)信令交换逻辑(signaling logic)

 

为了提高数据的交换能力,有些双口 RAM 采用信令交换逻辑来通知对方。IDT7130(1K 容量)就是采用中断方式交换信令。利用两个特殊的单元(3FFH 和 3FEH)作为信令字和中断源。假设左端 CPU 向 3FFH 写入信令,将由写信号和地址选通信号触发右端的中断输出,只有当右端的 CPU 响应中断并读取 3FFH 信令字单元,其中断才被双口 RAM 撤消。

 

以上是双口 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,并将刷新电路集成在芯片,且内部仲裁单元决定器件的输入、读出及自动刷新操作。

 

 

FIFO 只允许两端一个写,一个读,因此 FIFO 是一种半共享式存储器。在双机系统中,只允许一个 CPU 往 FIFO 写数据,另一个 CPU 从 FIFO 读数据。而且,只要注意标志输出,空指示不写,满指示不读,就不会发生写入数据丢失和读出数据无效。

 

3. 其他多端口存储器

以上只介绍了两种双端口存储器。随着电子工艺的飞速发展,出现了三端口及以上的存储器,并且在存储深度和宽度上得到很大发展,仲裁逻辑控制更加复杂;但多端口存储器源彼双端口存储器,基本更加复杂;但多端口存储器源自双端口存储器,基本工作原理入双端口存储器相似,这里不一一详述。