本发明属于处理器数据交换领域
背景技术:
随着电子技术的发展,系统的复杂性越来越高,往往需要多个处理器协同工作来实现产品功能,双口ram是一种广泛使用于多cpu之间数据交换的的双端口易失性存储器,一般每个双口ram都有两个完全独立的端口,每个端口有自己的数据线、地址线、控制线。但当双口ram两端cpu同时对一个存储单元进行读写操作时,双口ram会产生冲突问题,导致读写数据错误。
目前采用的防冲突机制主要依赖于双口ram芯片提供的防冲突机制,主要包括:
1)插入等待状态的防冲突机制
当双口ram两侧端口同时对同一个地址单元进行访问时,双口ram内部仲裁单元会将双口ram的busy引脚置为有效状态,比如当对左侧的存储单元进行读写时,若右侧端口也对该存储单元进行操作,则右侧busy信号则会变成有效,直到左侧端口操作完成,busy信号转为无效状态。在使用中一般将busy信号与cpu端的busy信号输入管脚连接,当busy信号有效时,cpu在读写操作时插入等待状态,避免两端同时对双口ram进行操作;
2)信号量防冲突机制
在双口ram芯片中提供了几个特定的锁存器,以双口ram芯片idt70v28为例,提供了8个锁存器,整个存储区间可以分为8个区,每个区的状态由1个锁存器指示,这些锁存器用来存放令牌,用来指示当前存储区是否被占用。如果处理器想使用一段双口ram空间,则首先需要以写寄存器的方式申请获取令牌,如果读寄存器的和写入的一致,则说明获取令牌成功,可以安全使用这段双口ram空间,在这段时间内,双口ram内部仲裁逻辑保证其它处理器无法获得这个令牌,直到另外一侧的cpu释放这个令牌为止。
基于双口ram芯片提供的busy信号或者信号量的机制主要有以下缺点:
1)采用busy信号的机制,要求双口两端cpu的存储器访问机制必须支持这种插入等待机制,而实际使用过程中,很多cpu并不支持这种存储器访问等待插入机制;
2)采用信号量的机制,要求双口两端的cpu软件都必须制定好通讯协议,比如信号量的数量以及每个信号量控制的存储区域的划分,双口两端cpu往往是在不同的模块上,在一些改造项目中,经常出现一侧cpu的状态已经固定,软硬件不可更改,只能更改另一侧cpu软硬件的情况,如果在老状态下没有使用或者约定好信号量机制,则在改造过程中就无法使用基于信号量的防冲突机制。
技术实现要素:
本发明的发明目的在于提供一种基于可编程逻辑的双口ram防冲突方法,解决双口ram两端cpu在操作双口ram中,避免产生冲突。本发明的技术方案是在双口ram一侧(从端)cpu采用基于可编程逻辑对双口ram另一侧(主端)的控制信号进行监测,当从端访问双口ram时,如果主端也在访问,则通过逻辑立即切断从端的控制信号,保证主端的安全访问,并在逻辑中标记本次访问冲突,从端每次读后,都要通过读取逻辑中的标志判断是否发送了冲突,如果发生了则丢弃本次的数据,重新发起读写。
本发明的发明目的通过以下技术方案实现:
一种基于可编程逻辑的双口ram防冲突装置,应用在双口ram从端,包含以下步骤;
1)将双口ram主端的片选引脚上的片选信号port_a_cs_ram输入非门,将非门的输出和双口ram从端一侧的cpu输出的片选信号port_b_cs_cpu输入或门,或门的输出连接到双口ram从端的片选引脚;
2)将双口ram主端的片选引脚上的片选信号port_a_cs_ram和双口ram从端的片选引脚上的片选信号port_b_cs_ram输入或非门,或非门的输出送至d触发器的clocks输入端,d触发器的d端接逻辑“1”,d触发器的s端接双口ram从端一侧的cpu的gpio_clr引脚,d触发器的输出作为冲突标志连接至双口ram从端一侧的cpu的gpio_interrupt引脚;
3)双口ram从端一侧的cpu执行以下步骤:读取gpio_interrupt引脚来判断本次读写是否有读写冲突,若有,则通过gpio_clr引脚清除冲突标志后,重新发起读写操作,直到没有读写冲突,则认为数据正常读写,本次读写结束。
依据上述特征,片选信号为低电平有效。
本发明的优点是不依赖于双口ram两侧cpu是否支持busy信号插入等待或者软件是否有信号量机制,也不要求硬件引出busy信号,对软硬件状态的要求低,特别适用于一些软硬件状态不支持双口ram芯片提供的检测机制的场合。因该方法实现简单、方便易用,将会有广阔的市场使用空间。
附图说明
图1为实施例所示第一逻辑模块的结果示意图;
图2为实施例所示第二逻辑模块的结果示意图;
图3为实施例所示cpu的读写流程示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。
本发明提出了一种基于可编程逻辑的双口ram防冲突方法,它弥补了传统的双口ram防冲突方法的限制。本方案在即使双口ram两端均没有使用双口ram提供的检测机制的情况下,能保持双口ram一侧(主端)软硬件均不更改,通过编写从端可编程逻辑和应用软件,可以保证双口ram两端cpu的可靠数据交互。主要实现步骤如下:
1)在可编程逻辑中,增加以下第一逻辑模块:
将双口ram主端的片选引脚上的片选信号port_a_cs_ram输入非门,将非门的输出和双口ram从端一侧的cpu输出的片选信号port_b_cs_cpu输入或门,或门的输出连接到双口ram从端的片选引脚(片选低有效),如图1所示。当双口ram主端一侧的cpu操作双口ram时,通过逻辑强制双口ram从端一侧的cpu发出的cs信号无效,因此当双口ram从端一侧的cpu发起读写操作时,双口ram从端的片选信号实际为无效状态,从而保证不会冲突;
2)在可编程逻辑中,增加以下第二逻辑模块:
将双口ram主端的片选引脚上的片选信号port_a_cs_ram和双口ram从端的片选引脚上的片选信号port_b_cs_ram输入或非门,或非门的输出送至d触发器的clocks输入端,d触发器的d端接逻辑“1”,d触发器的s端接双口ram从端一侧的cpu的gpio_clr引脚,d触发器的输出作为冲突标志连接至双口ram从端一侧的cpu的gpio_interrupt引脚,如图2所示。
当系统上电后,通过gpio_clr将冲突标志清0,当双口ram两侧的片选信号port_a_cs_ram和port_b_cs_ram信号有一个有效,另一个无效,或者两个都无效时,或非门输出为0,当两侧片选信号均有效时,或非门输出为1,此时,触发器的输出q=d,也就是冲突标志为“1”,表示有双口访问冲突。
3)双口ram从端一侧的cpu执行以下步骤:
双口ram从端一侧的cpu每次读写双口ram某地址后,都会通过读取gpio_interrupt状态来判断本次读写是否有读写冲突,若有,则通过gpio_clr清除冲突标志后,重新对上次的地址发起读写操作,直到没有读写冲突,则认为数据正常读写,本次读写结束,如图3所示。
本发明提出了一种新的基于可编程逻辑的双口ram防冲突方法。它非常适合于双口ram芯片本身提供的防冲突机制不适用的场合,降低了传统方式对软硬件的要求,这种方法在双口ram两侧cpu都没有使用busy信号或则信号量的情况下,只需更改一侧cpu端的逻辑和软件,另一侧cpu的软硬件无需任何更改,给传统的双口防冲突机制提供了一种新的方案。
同时,因该方法实现简单、方便易用,适用于各种多gpu双口ram通讯的场合,推广性强,将会有广阔的市场使用空间和显著的经济效益。
可以理解的是,对本领域普通技术人员来说,可以根据本发明的技术方案及其发明构思加以等同替换或改变,而所有这些改变或替换都应属于本发明所附的权利要求的保护范围。