分类: 嵌入式
2010-10-27 22:31:03
在多CPU系统中,CPU间的通信可以采用串口、并口等方式,但它们共同的缺点是操作复杂、速度慢。因此,随着价格的不断下降,采用双口RAM方式在两个CPU系统间交换数据是一个不错的选择。但双口RAM有时会发生共享冲突问题。下面讨论防止共享冲突的几种方式。
1.双口RAM防止共享冲突的方式
一般双口RAM都提供了两个完全独立的端口,每个端口都有自己的控制线、地址线和数据线,CPU对双口RAM端口的操作等效于对它的外部RAM进行操作。双口RAM在使用上要注意的问题是如何避免两端CPU对同一RAM单元的争用,一般来说,双口RAM可提供三种防冲突方式,下面结合CYPRESS公司的CY7C144进行说明。CY7C144是采用低功耗CMOS工艺生产的8×8k位容量、高速存取(20ns)的双端口静态RAM,它还可以用多芯片级联来扩展字宽,其内部原理框图如图1所示。
2.1
当左右端口同时对同一地址的RAM存储单元进行存取时,CY7C144芯片内部的仲裁单元将会给出BUSY信号。具体来说,BUSYL、BUSYR信号的正常状态为高电平,当左端口对一存储单元进行存取时,若右端口也对该存储单元进行操作,则芯片内部的仲裁单元会使信号BUSYR为低,直到左端口操作完成后再将BUSYR恢复为高电平。设计中可以利用BUSY信号作为CPU的等待状态输入,并利用该信号使CPU在操作过程中插入等待状态,避免两端同时对双口RAM进行操作。
2.2
双口RAM通过申请和释放端口的信号灯(也称为令牌)来操作存储单元可以避免发生冲突。一个信号灯对应相应数量的存储单元。双口RAM的两端均可对信号灯进行存取。当左端口向信号灯写入“0”再回读信号灯时,若信号灯也为“0”表示左端口拥有对存储单元的控制权,否则表示右端口拥有对存储单元的控制权。不管是否取得对存储单元的控制权,操作完成后都应向信号灯写入“1”以释放信号,从而避免资源的死锁。
CY7C144芯片提供8个信号灯,每个信号灯的存储单元为8×2k位。对信号灯进行操作时,片选信号(CEL、CER)应为高电平,信号灯使能信号(SEML、SEMR)为低电平。A0~A2表示信号灯地址,数据线最低位I/O0代表信号灯的值。对存储单元存取的一般过程如图2所示。
2.3
双口RAM中最高地址的两个存储单元可以作为信箱使用,左右两端可以同时对它进行操作。其中最高地址为右端口的信箱,次高地址为左端口信箱。以CY7C144芯片为例,偏移地址1FFEH为左端口信箱,偏移地址1FFFH为右端口信箱。右端口写入左端口信箱1FFEH时,左端口的信号INTL将变为低,左端口读自己的信箱1FFEH时,信号INTL将重新为高;同理,左端口写入右端口信箱1FFFH时,右端口的信号INTR将变低,右端口读自己的信箱1FFFH时,信号INTR将重新为高。可以将信号INTL和INTR作为CPU的中断源,通过信箱向对方传递自己使用存储单元的状态来达到防止冲突之目的。
2.4
在上述三种方式中,插入等待状态的方式对于高速接口来说会影响数据的传送速率,而且要求CPU具有插入等待状态的功能,而有些CPU(如8031)不具备该功能。信号灯方式主要用在两个CPU共享内存空间时,如果双口RAM主要用于两个CPU之间交换数据,则交换的实时性很难用软件来保证,而中断方式则正好解决了这个问题