一种双口ram互斥访问的实现方法

文档序号:6585772阅读:334来源:国知局
专利名称:一种双口ram互斥访问的实现方法
技术领域
本发明为一种双口 RAM互斥访问的实现方法,属于处理器信号交换领域。
背景技术
在现代工业控制系统中,由于对系统的功能和性能要求越来越高,一般都采用高 性能的处理器来实现控制功能,并将这些智能设备联网组成分布式系统,所以双口 RAM作 为共享存储器,在满足实时性要求高、数据量大的控制系统中得到越来越广泛地应用。一般双口 RAM都提供了两个完全独立的端口,每个端口都有自己的控制线、地址 线和数据线。但当两个CPU同时对同一地址单元写入数据,或者两个CPU同时对同一地址 单元操作、一个写入数据,另一个读出数据时,双口 RAM会产生共享冲突问题。目前有几种 防止共享冲突的方式。1.插入等待状态的防冲突方式该方式也称为硬件判优方式。当左右端口同时对同一地址的RAM存储单元进行存 取时,双口 RAM内部的仲裁单元将会给出BUSY信号,具体来说,BUSYL、BUSYR信号的正常状 态为高电平。当左侧端口对一存储单元进行存取时,若右侧端口也对该存储单元进行操作, 则芯片内部的仲裁单元会使信号BUSYR为低,直到左侧端口操作完成后再将BUSYR恢复为 高电平。设计中可以利用BUSY信号作为CPU的等待状态输入,并利用该信号使CPU在操作 过程中插入等待状态,避免两端同时对双口 RAM进行操作。2.中断防冲突方式该方式也称为中断判优方式,芯片具有两套中断逻辑。通过两个INT引脚分别接 收到两个CPU的中断引脚上,以实现CPU的握手。双口 RAM中最高地址的两个存储单元可以作为邮箱使用。在双口 RAM的数据传送 中,两端的CPU都把双口 RAM作为自己存储器的一部分。当两个CPU需要数据传送时,假设 左端CPUL向右端CPUR传送。首先CPUL将需要传送的数据存放到双口 RAM某段约定的地 址单元中,然后向双口 RAM的右端口的邮箱进行写操作,用以向CPUR发出一个中断。这样 CPUR就进入其相应的中断服务子程序。将约定地址单元的数据读出,然后对双口 RAM右端 口的邮箱进行写操作,用以清除该中断。这样通过邮箱向对方传递自己使用存储单元的状 态来达到防止冲突之目的。3.信号量防冲突方式该方式也称为令牌判优方式。在此方式中有信号锁存逻辑,CY7C056V内部提供了 八个相互独立的锁存逻辑单元,最多可将RAM空间分成八个区段。这些锁存逻辑单元独立 于双口 RAM存储区,并不能控制RAM区、封锁两端CPU的读/写操作,而是被作为命令,只提 供指示逻辑,由两端CPU按约定的规则,轮流地占用它们划定的RAM区。各区的大小及地址 由软件自由设定,且左右端操作完全一样,只要不超过令牌的限制次数即可。当左右端同时 申请同一令牌时,令牌逻辑裁定谁先占用,从而保证只有一个端口获取令牌。而在占用令牌 期间,CPU可以按最高速无等待存取数据。这对实现高速、多CPU数据采集与处理系统无疑是非常有利的。但是,为了避免令牌方式争用出错,应尽可能使两端CPU分时占用同一 RAM 区。它们分别存在以下缺点>中断防冲突方式当发生中断时,会打断当前的执行流程,造成运行过程不确 定;>插入等待状态的防冲突方式对于高速接口来说会影响数据的传送速率,而且 该方式下CPU在访问数据时需要检查BUSY信号并做出判断,并可能出现等待情况。很难满 足时间确定性的要求;>信号量防冲突方式在两个CPU共享内存空间时,如果双口 RAM主要用于两个 CPU之间交换数据,则交换的实时性很难用软件来保证。

发明内容
本发明的目的是解决两端CPU在操作双口 RAM中,避免产生冲突。即不允许两个 CPU同时对同一地址单元写入数据;或者两个CPU同时对同一地址单元一个写入数据,另一 个读出数据。本发明的技术方案为一种双口 RAM互斥访问的实现方法,所述一种双口 RAM互斥访问的实现方法包括 如下操作步骤1)采用地址分区方式,将共享数据区划分成多个数据区,并制定相应软件协议;2)软件分区处理时,按照交换数据的类型将RAM的共享存储区从起始单元开始分 成若干个大的数据区,数据区大小由实际的传输数据确定。每个大数据区又细分为一个数 据接收区和一个数据发送区,且每个区都定义有相应的数据存取地址和控制标识;3)开始写入双RAM数据,读取双RAM接收缓冲区的写指针,将数据写入基地址加上 写指针对应的双RAM单元,接收缓冲区写指针加1,判断写指针,如果写指针是最后一位,对 写指针回零,否则结束写入数据;4)开始读取双RAM数据,读取双RAM接收缓冲区的写指针和读指针进行判断,读指 针与写指针不相等,从基地址加上读指针对应的双RAM单元读取数据,接收缓冲区读指针 加1,判断读指针,如果读指针是最后一位,对读指针回零,否则结束读取数据;读指针与写 指针相等结束操作。所述的双口 RAM互斥访问的实现方法,其特征在于,双口 RAM所对外部系统的通信 工作均由从机来完成,主机只对双口 MM中相应的数据缓冲区写入要发送的数据或读取需 要的数据。将双口 RAM划分成两个区域,其中一个区域只允许一方向双口 RAM写入数据,另一 方只允许读取数据,不允许有写操作。在上述每个交换区中设置一对缓冲,这两个缓冲区的大小、结构相同,在其中一个 缓冲区被占用的情况下,可以访问另一缓冲区;通信双方通过判断两个交换缓冲区的状态选择相应的缓冲区。每个缓冲区采用一种计数值来判断数据的状态。双口通信双方在各自的缓冲区首尾两端各设置了完全相同计数值;主写设备在更新缓冲区时,要同时更新两个计数值;当通信对方读取缓冲区数据后,要检查这两个计数值 是否一致,如果一致则认为计数值正确。所述的一种双口 RAM互斥访问的实现方法在此基础上在缓冲区设置了控制标志; 该占用标志只允许主写设备设置,其它设备只读。从机在读数据时,先检查哪个缓冲区被占用;优先读取未被占用的缓冲区。在系统 的数据传输过程中,为了提高系统通信的可靠性,在缓冲区末端添加了数据校验和;双方通 过该方式可以检查缓冲区的数据是否正确。本发明的优点在于1、将共享数据区按一定的标准划分成若干个数据并制定相应的软件协议,使得 主、从机以适当的时序读写数据,从而避免对同一单元的竞争,提高实时性;2、主、从机根据缓冲区数据存取基地址及读、写指针,对相应单元进行读、写操作, 整个缓冲区等效于一个环形数据;3、在两缓冲区的机制下,不同操作通过算法获得应访问的缓冲区。这样可以保证 每次读取的数据是完整的。这样可以避免读取的数据是不同时间段写入的可能性;4、有效避免了双RAM接口数据流冲突。


图1为写双口 RAM数据程序流程图;图2为读双口 RAM数据程序流程图;图3为双口 RAM分区管理图;图4计数值分布。
具体实施例方式安全级控制保护系统完成数据通讯、信号输入、数据处理、保护和控制运算、符合 逻辑和触发信号输出等功能。它一般由运算、通讯和输入输出单元构成。在信号输入和输 出过程中,通常采用高性能嵌入式处理器构成的主从式系统完成相应功能。主从式系统设 计的关键是主机与从机之间的数据通信。随着双口 RAM功能的不断成熟和完善,现在很多 采用双口 RAM来实现这些数据交互。由于安全级系统对程序确定性的严格要求,本系统不采用中断机制。在插入等待 状态的防冲突方式中,利用双口 RAM的BUSY信号线,虽然可以保证左右两个端口能可行地 完成数据的传送。但当两个端口对同一地址单元同时存取数据时,其中一个端口要处于等 待状态。对于实时性和确定性要求很高的系统来说,插入等待状态会降低数据交换率,这在 一定程度上会影响系统的实时性和确定性。为了尽可能地避免出现等待状态,结合系统周 期执行的特点,在对双口 RAM编程时,采用了地址分区方式。即将共享数据区按一定的标准 划分成若干个数据并制定相应的软件协议,使得主、从机以适当的时序读写数据,从而避免 对同一单元的竞争,提高实时性。在安全级控制系统中,主、从机之间需要交换的数据主要是运算单元和通讯单元 进行双向通信的数据。软件分区处理时,按照交换数据的类型将双口 RAM的共享存储区从 起始单元开始分成若干个大的数据区。数据区大小由实际的传输数据确定。每个大数据区又细分为一个数据接收缓冲区和一个数据发送缓冲区,且每个缓冲区都定义有相应的数据 存取地址和控制标志。主、从机根据缓冲区数据存取地址及控制标志,对相应单元进行读、 写操作,整个缓冲区等效于一个环形数据。若缓冲区大小设置合理,当新数据覆盖旧数据 时,旧数据已经处理,既不会遗漏数据又节省了存储单元。在本系统中,所有对外部系统的通信工作均由从机来完成。考虑到整个系统的数 据处理流程及时序要求,在软件设计中,数据接收和发送则是在软件的主流程内部维持一 个无限循环,将接收发送程序驻留在此循环中,通过查询发送缓冲区的读、写指针,实时发 送数据。从机通过两类通信协议实现与采集模块和网络设备的数据通信。主机只需对双 口 RAM中相应的数据缓冲区写入要发送的数据或读取需要的数据即可。鉴于主、从机对这 两种类型数据的存取操作程序类似,在此只给出从机写入和读取双口 RAM数据的程序流程 图,分别如图1和图2所示。其中,Base为系统数据接收缓冲区数据存取基地址。由图1所示,开始写入双RAM数据,读取双RAM接收缓冲区的写指针,将数据写入 基地址加上写指针对应的双RAM单元,接收缓冲区写指针加1,判断写指针,如果写指针是 最后一位,对写指针回零,否则结束写入数据;由图2所示开始读取双RAM数据,读取双RAM接收缓冲区的写指针和读指针进行 判断,读指针与写指针不相等,从基地址加上读指针对应的双RAM单元读取数据,接收缓冲 区读指针加1,判断读指针,如果读指针是最后一位,对读指针回零,否则结束读取数据;读 指针与写指针相等结束操作。由图1和图2可知,采用地址分区方式后,主从机对双口 RAM的软件控制变得较为 简单。同时,为了验证地址分区方式避免双口 RAM地址争用现象的有效性,在系统的数据传 输过程中,用示波器监测双口 RAM左口端口 BUSY引脚的电平。发现无等待状态信号出现, 这表明对双口 RAM的软件分区处理模式的确是一种比较理想的处理方法。(1)简化分区管理本方案在软件分区管理的基础上,将双口 RAM划分成主机主写 交换区和从机主写交换区两个区域。主机主写区只允许主机向双口 RAM写入数据,从机只 允许读取数据,不允许有写操作;同理,从机主写区只允许从机写入数据,主机只允许读取 数据。这样可以避免双口 RAM的访问冲突。如图3所示。(2)采用两缓冲结构为了实现每次操作的数据完整的,在上述交换区中设置两 缓冲区,每个缓冲区的大小、结构完全一样。在一个缓冲区被占用的情况下,可以访问另一 缓冲区。例如当从机读取主机主写交换区数据时,发现1号缓冲区已经被占用,即主机正在 向该缓冲区写入数据,它将转去读取2号缓冲区数据。这样可以保证每次读取的数据是完 整的,避免读取的数据是不同时间段写入的可能性。(3)缓冲区采用循环计数来判断数据的状态引入双缓冲后,会出现更新双缓冲 区数据的问题。因此需要通过某种机抽来判断哪个缓冲区里的数据是新的、哪个缓冲区里 的数据是旧的。本方法采用了计数值的方案,该计数值由主写设备维护,在更新缓冲区数据 时同时更新计数值。下面以主机主写区读写操作为例来描述在主机主写区里的缓冲区都填入了主机 维护的计数值。主机在向双口 RAM写数据时,根据计数值,按照算法得到哪个缓冲区为新, 哪个缓冲区为旧。(1)在缓冲区首尾各设置计数值采用循环计数值判断新旧后,要求这个计数有比较高的可靠性。因此在缓冲区首尾两端各设置了计数值,这两个计数值是相同的。主写 设备在更新缓冲区时,要同时更新两个计数值。当通信对方读取缓冲区数据后,要检查这两 个计数值是否一致,如果一致则认为计数值正确。如图4所示。(2)在缓冲区中设置控制标志由于缓冲区采用了计数值判断新旧据区,在很大 程序上可以避免主从双方同时对同一缓冲区操作的可能性。但是会出现主写区在更新缓冲 区时还未结束时,主读设备会根据已更新的计数值也去访问该缓冲区,造成潜在的访问冲 突。因此本方法在此基础上又在双缓冲区设置了控制标志。该标志只允许主写设备设置, 其它设备只读。(3)在缓冲区最末端添加数据校验和为了提高系统通信的可靠性,在缓冲区末 端添加了数据校验和。双方通过该方式可以检查缓冲区的数据是否是确。有关结构请参见 图4。通信双方各自拥有一个主写交换区的软件分区管理的方式。这种纯软件的方式, 不需要硬件引出Busy线和中断信号,减少了硬件设计的介入。不采用读取Busy线,避免了 访问时的等待处理,保证了时间确定性。不采用中断机制,保证了操作流程的确定性;采用了双缓冲结构。避免了访问双口 RAM的延迟等待,更重要的是保证了访问数 据彼此之间的完整性。不会出现同一缓冲区存在不同时间段写入的数据;采用了首尾两端各设置计数值。采用缓冲区计数值,可以有效检查出双缓冲区之 间的新旧关系。首尾两端各设备相同的计数值,更进一步保证了操作缓冲区之间流程的正 确性和计数值的可靠性。因为很难通过单个计数值来判断该值在操作过程的正确性。另外, 如果两端计数不一致,也可以反映访问缓冲区时整个流程存在问题;缓冲区设置了主写占用标志。由于采用两个缓冲区,有可能出现主写设备更新缓 冲区时,只更新了首计数,还没来得及完成整个缓冲区更新的情况下,读设备正好根据新更 新的部分计数值而认为该缓冲区是新的,从而访问这个缓冲区。这样会带来的潜在访问冲 突。即一方写一方读。而设置了主写占用标志,可以避免读设备访问正在被主写设备操作 的缓冲区。从而进一步解决访问冲突的问题;数据区更新。通信双方每周期更新缓冲区中的数据,包括计数值和校验码。其中 计数值由本地维护。可以通过读取计数值,按照判断算法获得通信对方是否正常,实现通信 监视功能。
权利要求
1.一种双口 RAM互斥访问的实现方法,所述一种双口 RAM互斥访问的实现方法包括如 下操作步骤1)采用地址分区方式,将共享数据区划分成多个数据区,并制定相应软件协议;2)软件分区处理时,按照交换数据的类型将RAM的共享存储区从起始单元开始分成若 干个大的数据区,数据区大小由实际的传输数据确定,每个大数据区又细分为一个数据接 收区和一个数据发送区,且每个区都定义有相应的数据存取地址和控制标识;3)开始写入双RAM数据,读取双RAM接收缓冲区的写指针,将数据写入基地址加上写指 针对应的双RAM单元,接收缓冲区写指针加1,判断写指针,如果写指针是最后一位,对写指 针回零,否则结束写入数据;4)开始读取双RAM数据,读取双RAM接收缓冲区的写指针和读指针进行判断,读指针与 写指针不相等,从基地址加上读指针对应的双RAM单元读取数据,接收缓冲区读指针加1, 判断读指针,如果读指针是最后一位,对读指针回零,否则结束读取数据;读指针与写指针 相等结束操作。
2.根据权利要求1所述的双口RAM互斥访问的实现方法,其特征在于,双口 RAM所对外 部系统的通信工作均由从机来完成,主机只对双口 RAM中相应的数据缓冲区写入要发送的 数据或读取需要的数据。
3.根据权利要求1所述的一种双口RAM互斥访问的实现方法,其特征在于将双口 RAM 划分成两个区域,其中一个区域只允许一方向双口 RAM写入数据,另一方只允许读取数据, 不允许有写操作。
4.根据权利要求3所述的一种双口RAM互斥访问的实现方法,其特征在于每个交换 区中设置一对缓冲,这两个缓冲区的大小、结构相同,在其中一个缓冲区被占用的情况下, 可以访问另一缓冲区。
5.根据权利要求4所述的一种双口RAM互斥访问的实现方法,其特征在于通信双方 通过判断两个交换缓冲区的状态选择相应的缓冲区。
6.根据权利要求5所述的一种双口RAM互斥访问的实现方法,其特征在于每个缓冲 区采用一种计数值来判断数据的状态。
7.根据权利要求6所述的一种双口RAM互斥访问的实现方法,其特征在于双口通信 双方在各自的缓冲区首尾两端各设置了完全相同计数值;主写设备在更新缓冲区时,要同 时更新两个计数值;当通信对方读取缓冲区数据后,要检查这两个计数值是否一致,如果一 致则认为计数值正确。
8.根据权利要求7所述的一种双口RAM互斥访问的实现方法,其特征在于所述的一 种双口 RAM互斥访问的实现方法在此基础上在缓冲区设置了控制标志,该占用标志只允许 主写设备设置,其它设备只读。
9.根据权利要求8所述的一种双口RAM互斥访问的实现方法,其特征在于从机在读 数据时,先检查哪个缓冲区被占用,优先读取未被占用的缓冲区。
10.根据权利要求9所述的一种双口RAM互斥访问的实现方法,其特征在于在系统的 数据传输过程中,为了提高系统通信的可靠性,在缓冲区末端添加了数据校验和,双方通过 该方式检查缓冲区的数据是否正确。
全文摘要
本发明涉及一种双口RAM互斥访问的实现方法,所述一种双口RAM互斥访问的实现方法包括如下操作步骤1)采用地址分区方式,将共享数据区划分成多个数据区,并制定相应软件协议;2)软件分区处理时,按照交换数据的类型将RAM的共享存储区从起始单元开始分成若干个大的数据区,数据区大小由实际的传输数据确定,每个大数据区又细分为一个数据接收区和一个数据发送区,且每个区都定义有相应的数据存取地址和控制标识;3)在本系统中,所有对外部系统的通信工作均由从机来完成,主机只需对双口RAM中相应的数据缓冲区写入要发送的数据或读取需要的数据即可。
文档编号G06F13/16GK101996147SQ20091024991
公开日2011年3月30日 申请日期2009年12月4日 优先权日2009年8月25日
发明者冀建伟, 杜乔瑞, 石桂连, 程建明 申请人:北京广利核系统工程有限公司;中国广东核电集团有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1