本发明涉及存储技术领域,特别涉及一种多通道读/写RAM的电路和方法。
背景技术:目前,基于SoC(SystemonChip,系统级芯片)架构的芯片已经广泛应用于各种电子系统。片内RAM(RadomAccessMemory,随机存取存储器)是SoC系统的一个重要组成部分,一般用作指令存储器、数据交换空间以及临时数据存储空间,总线上各主设备(Master)访问RAM的速度成为制约系统性能的一个关键因素。当前绝大多数工艺下RAM的读/写操作都要延迟一拍,即在做读/写操作时,读/写数据总是要在读信号有效的下一拍有效。请参考图1,以读取RAM为例,图中CE为RAM的使能信号,低电平有效,RD为读使能信号,高电平有效。在T0时刻的时钟上升沿,锁存地址ADDR1,在T1时刻的时钟上升沿,才读出RAM输出的数据,因此读出一个数据需要两个时钟周期。这种类型的RAM挂在总线上,如果不做特殊处理,每次读操作都要占用两个时钟周期,如此一来,系统访问RAM的带宽降低了一半。另一种方法是选用符合RAM接口的总线。ARM公司提出的AMBA(AdvancedMicrocontrollerBusArchitecture,高级微控制器总线架构)总线是目前业界使用最为广泛的SoC系统总线。ARM公司在设计总线系统和RAM接口方案时已经经过了整体考虑,因此ARM提供的RAM可以很好的与AMBA总线兼容,在AHB总线上挂接RAM,并不需要做复杂的控制逻辑,就可以直接使用,读/写RAM操作的时候可以做到一个周期完成一次读/写操作。单从提高RAM访问带宽的角度来说,使用AHB总线很方便,但是它的总线仲裁、译码机制都比较复杂,在某些小型系统中,使用AHB总线会使整个系统的设计复杂度增加。
技术实现要素:本发明要解决的主要技术问题是,提供一种多通道读/写RAM的电路和方法,在不提高系统时钟频率的条件下,利用简单的逻辑控制机制,提高RAM的访问带宽。为解决上述技术问题,本发明采用的技术方案如下:一种多通道读/写RAM的电路,所述电路包括:至少两个主设备、至少两个总线桥、仲裁器和至少两个RAM;所述每个主设备通过一个总线桥与所述仲裁器相连,所述至少两个RAM都与所述仲裁器相连;所述主设备用于发出读/写所述RAM的系统总线信号;所述总线桥用于将所述系统总线信号转换成RAM接口时序信号;所述RAM接口时序信号包括所要访问的RAM地址信号;所述仲裁器用于对接收到的所述RAM接口时序信号进行排序,并依据所述地址信号找到对应的系统总线地址数据,按照排序顺序对RAM进行读/写操作;所述至少两个RAM中存储有按照预定系统总线地址数据的分配方式分配的系统总线地址数据,所述至少两个RAM中各自存储的系统总线地址数据组成一串连续的系统总线地址数据。进一步地,所述预定系统总线地址数据的分配方式为:设有k个RAM,n为每个RAM中系统总线地址数据的地址位,n、k均取正整数,k1为k块中的任意一个RAM编号,n1为任意一个RAM中任意一个地址位,则在k1RAM中每个地址位的系统总线地址数据依次为:(1-1)k+k1、(2-1)k+k1、......、(n1-1)k+k1、......(n-1)k+k1;其中0≤k1≤k,0≤n1≤n,k1、n1均为正整数。更进一步地,所述总线桥还包括一个预读处理单元,所述预读处理单元用于对所述系统总线地址数据进行预读处理。更进一步地,所述电路包括第一主设备、第二主设备和第三主设备,所述第一主设备的优先级高于第二主设备,所述第二主设备的优先级高于第三主设备;在第一主设备和第二主设备的总线上,其所述总线桥与所述仲裁器之间连接有一个多路器,所述多路器用于在将所在总线上未被所述仲裁器响应的RAM接口时序信号挂起,待上一RAM接口时序信号访问完毕,所述多路器将挂起的RAM接口时序信号再次发送给所述仲裁器仲裁。更进一步地,所述仲裁器按照所述主设备访问所述RAM的优先级对所述主设备对应的RAM接口时序信号进行排序。更进一步地,所述第一主设备为串行外设接口,第二主设备为直接存储器访问,第三主设备为微码引擎。本发明还提供一种多通道读/写RAM的方法,包括以下步骤:主设备发出读/写RAM的系统总线信号;总线桥接收所述系统总线信号,并将其转换为RAM接口时序信号,并发送给仲裁器,所述RAM接口时序信号包括所要访问的RAM地址信号;所述仲裁器对接收到的所述RAM接口时序信号进行排序,并依据所述地址信号找到相应的系统总线地址数据,按照排序顺序访问对应的RAM;所述RAM接收对应的RAM接口时序信号,完成读/写操作;其中,所述RAM中存储有按照预定系统总线地址数据的分配方式分配的系统总线地址数据,所述至少两个RAM中各自存储的系统总线地址数据组成一串连续的系统总线地址数据。进一步地,所述预定系统总线地址数据的分配方式为:设有k个RAM,n为每个RAM中系统总线地址数据的地址位,n、k均取正整数,k1为k块中的任意一个RAM编号,n1为任意一个RAM中任意一个地址位,则在k1RAM中每个地址位的系统总线地址数据依次为:(1-1)k+k1、(2-1)k+k1、......、(n1-1)k+k1、......(n-1)k+k1;其中0≤k1≤k,0≤n1≤n,k1、n1均为正整数。更进一步地,所述总线桥在所述主设备对所述RAM进行读/写操作时,预读总线地址数据。更进一步地,在所述仲裁器按照所述主设备访问所述RAM的优先级对其对应的RAM接口时序信号进行排序后,多路器将未得到所述仲裁器响应的RAM接口时序信号挂起,待上一RAM接口时序信号访问完毕,所述多路器将挂起的RAM接口时序信号再次发送给所述仲裁器仲裁。更进一步地,所述仲裁器按照所述主设备访问所述RAM的优先级对所述主设备对应的RAM接口时序信号进行排序。本发明的有益效果是:通过在不提高系统时钟频率的情况下,在电路中设置多个RAM,使RAM的访问带宽得到了较大提高,且不增加系统的平均功耗;因该访问电路控制逻辑简单,设计成本较低,所以在系统中容易实现。附图说明图1为现有Master读取RAM时序图;图2为本发明一实施例中多通道读/写RAM的电路的电路图;图3为本发明一实施例中SPI主读RAM的时序图;图4为本发明又一实施例中多通道读/写RAM的电路的电路图;图5为本发明一实施例中多通道读/写RAM的方法的流程图。具体实施方式为使本发明的技术方案和优点更加清楚,下面通过具体实施方式结合附图对本发明作进一步详细说明。在本申请中,总体的发明思路为:为了提高RAM访问带宽,在电路中设置多个RAM,且多个RAM能同时接受总线上的多个Master的读/写操作。具体的实现方法如下:本发明提供一种多通道读/写RAM的电路,其中包括至少两个主设备、至少两个总线桥、仲裁器和至少两个RAM;其中,每个主设备通过一个总线桥与仲裁器相连,至少两个RAM都与仲裁器相连。Master用于发出读/写RAM的系统总线信号,并将其传递给总线桥进行转换。总线桥不仅用于将系统总线信号转换成RAM接口时序信号;还用于对所述系统总线地址数据进行预读处理,其中所述RAM接口时序信号包括RAM地址信号、读/写信号,若为写操作时,还应当包括写入数据。而仲裁器则用于对接收到的RAM接口时序信号进行排序,并依据所述地址信号找到对应的系统总线地址数据,按照排序顺序对该系统总线地址数据对应的RAM进行读/写操作;其中,排序的方式可以有多种规则,较常用的,一般可按照总线上Master访问RAM的优先级来进行判断排序,优先级高的Master,仲裁器207优先响应其访问请求。而为了实现提高访问带宽的目的,各个RAM按照预定系统总线地址数据的分配方式交替存储系统总线地址数据,各个RAM中存储的系统总线地址数据组 成一个连续的系统总线地址数据,例如:若存在两个RAM,则在其中一个中存放系统总线奇地址数据,在另一个中存放系统总线偶地址数据;若存在k个RAM,则按表1中的分配方式对系统总线地址数据进行分配,设n为每个RAM中系统总线地址数据的地址位,n、k均取正整数,k1为k块中的任意一个RAM编号,n1为任意一个RAM中任意一个地址位,则在k1RAM中每个地址位的系统总线地址数据依次为:(1-1)k+k1、(2-1)k+k1、......、(n1-1)k+k1、......(n-1)k+k1;其中0≤k1≤k,0≤n1≤n,k1、n1均为正整数。设系统总线地址数据为1、2、3......n(n≥1)。表1下面将具体以三个Master及两个RAM的情况对本实施例进行详细说明,但应该清楚,本申请的技术方案并不局限于此一种情况,还可以有多种实现形式。请参考图2,在本实施例中,多通道读/写RAM的电路包括三个Master, 分别为第一主设备、第二主设备和第三主设备;其中,第一主设备为SPI主(SerialPeripheralInterfaceMaster,串行外设接口)201,第二主设备为DMA(DirectMemoryAccess,直接存储器访问)202,第三主设备为微码引擎203。它们访问RAM的优先级是SPI主201>DMA202>微码引擎203,总线桥将SPI主201、DMA202和微码引擎203访问RAM的系统总线信号转换为符合RAM接口时序的信号。请参考图3,为了提高SPI主201读RAM的速度,在总线桥204中还包括一个预读处理单元2041,该预读处理单元主要对读取系统总线地址数据做预读处理,即读RAM的总线地址自动加一,SPI主201读RAM的总线时序如图3所示。其中,SpiAck为总线应答信号,只有当该信号为高时,读数据总线上的SpiRdat才有效;SpiAdd是总线地址,而RamAdd是RAM地址线,从图3中可以看出,从读信号SpiRd为高的第二个时钟周期开始,RamAdd总是超前SpiAdd一个周期,作为预读RAM的地址。这样的设置使Master向RAM写N个字节的数据可以在N个系统时钟周期内完成,而从RAM连续读N个字节的数据可以在N+1个系统时钟周期内完成。基于同样的发明思路,还可以在其他系统总线上的总线桥设置预读处理模块,以达到同样的技术效果。请参考图4,在仲裁器207判断Master优先级过程中,为了进一步提高仲裁器处理效率,还可与多路器进行配合,多路器设置在总线桥与仲裁器之间,其作用是将所在总线上未被仲裁器响应的RAM接口时序信号挂起,待上一RAM接口时序信号访问完毕,多路器将挂起的RAM接口时序信号再次发送给所述仲裁器仲裁,因优先级最高的Master发出的访问请求在任何时刻都能得到相应,所以在其总线上可不设置多路器。如图4,多路器401用于判断上一次的DMA202RAM接口时序信号是否得到 响应,如果没有得到响应,则将上次的RAM接口时序信号输出给仲裁器207,RAM接口时序信号包括读/写信号以及地址信号。如果上次DMA202访问得到了响应,则将当前的RAM接口时序信号输出给仲裁器207。多路器402的作用和多路器401的作用相同,只不过它判断的对象是微码引擎203。3个Master的访问请求输出给仲裁器207,仲裁器207根据各Master访问RAM的优先级响应Master的请求。由于有两个RAM,因此在同一时刻最多有两个Master的访问请求可以得到响应。其中,RAM0208存放的是总线奇地址数据,RAM1209存放的是总线偶地址数据。仲裁器的仲裁机制是:SPI主201的优先级最高,任何时刻SPI主201的访问请求都可以在当拍得到响应。如果SPI主201访问的总线地址数据为奇地址,则仲裁器将SPI主201的访问请求交给RAM0208,否则交给RAM1209。当DMA202有访问请求时,仲裁器会判断DMA202要访问的RAM是否正在被SPI主201访问,如果是,则不会响应当前的DMA201访问请求,直到下一拍SPI主201将DMA202要访问的RAM空间释放。如果DMA202和SPI201主同时要对某一个RAM(RAM0或者RAM1)进行访问,则仲裁器207会响应SPI主201的访问,而将DMA202的访问请求挂起,直到SPI主201将这个RAM空间释放。仲裁器207对微码引擎203的处理机制和对DMA202的处理一样,只不过它的优先级比DMA202更低。在本发明中,还提供一种多通道读/写RAM的方法,具体步骤为:步骤501:Master发出读/写RAM的系统总线信号;在该步骤中,根据其所要访问的RAM,发出相应的系统总线信号,其中可包括读/写信号以及要访问的地址信号,进一步,若需对RAM进行写操作,还 应该包括写入数据。步骤503:总线桥接收系统总线信号,并将其转换为RAM接口时序信号,并发送给仲裁器;在该步骤中,总线桥将接收的系统总线信号转换为符合RAM接口的RAM接口时序信号,在该信号中依然含有Master所要访问的RAM读/写信号以及RAM地址信号,若是对RAM进行写操作,则还需包括写入数据。进一步地,总线桥还可以在Master对所述RAM进行读/写操作时,预读总线地址数据,即读RAM的总线地址自动加一。这样的设置使Master向RAM写N个字节的数据可以在N个系统时钟周期内完成,而从RAM连续读N个字节的数据可以在N+1个系统时钟周期内完成。步骤505:仲裁器对接收到的RAM接口时序信号进行排序,并依据所述地址信号找到相应的系统总线地址数据,按照排序顺序访问对应的RAM;在该步骤中,仲裁器对接收到的RAM接口时序信号进行排序,并依据地址信号找到对应的系统总线地址数据,按照排序顺序对该系统总线地址数据对应的RAM进行读/写操作;其中,排序的方式可以有多种规则,较常用的,一般可按照总线上Master访问RAM的优先级来进行判断排序,优先级高的Master,当其所要访问的RAM为空闲状态时,仲裁器则优先响应其访问请求。因存在多个RAM,仲裁器根据各个RAM的空闲情况相应Master的访问请求,若有N个RAM,则可同时由N个Master对其进行访问。而为了进一步提高仲裁器处理效率,仲裁器还可与多路器进行配合,多路器将所在总线上未被仲裁器响应的RAM接口时序信号挂起,待上一RAM接口时序信号访问完毕,多路器将挂起的RAM接口时序信号再次发送给所述仲裁器仲 裁,因优先级最高的Master发出的访问请求在任何时刻都能得到相应,所以在优先级最高的总线上可不设置多路器。步骤507:RAM接收对应的RAM接口时序信号,完成读/写操作。因存在多个RAM,而为了最大限度的提高带宽,各个RAM按照预定系统总线地址数据的分配方式交替存储系统总线地址数据,例如:存在两个RAM,则在其中一个中存放系统总线奇地址数据,在另一个RAM中存放系统总线偶地址数据。仲裁器根据当前最高RAM接口时序信号中的地址信号,查看所属RAM是否空闲,若空闲,响应Master访问请求,对应的RAM根据读/写请求完成读/写操作;若存在多个RAM,则其中系统总线地址数据的存储方式为:设有k个RAM,n为每个RAM中系统总线地址数据的地址位,n、k均取正整数,k1为k块中的任意一个RAM编号,n1为任意一个RAM中任意一个地址位,则在k1RAM中每个地址位的系统总线地址数据依次为:(1-1)k+k1、(2-1)k+k1、......、(n1-1)k+k1、......(n-1)k+k1;其中0≤k1≤k,0≤n1≤n,k1、n1均为正整数。以上内容是结合具体的实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。