一种零等待周期SRAM的控制方法及装置与流程

文档序号:26101287发布日期:2021-07-30 18:12阅读:123来源:国知局
一种零等待周期SRAM的控制方法及装置与流程

本发明涉及存储控制技术领域,尤其是涉及一种零等待周期sram的控制方法及装置。



背景技术:

静态随机存储器(staticrandom-accessmemory,sram)是soc系统中常用的一种存储器。sram里的静态主要是指只要不掉电,存储器里的数据就能一直保持,掉电以后,存储器里的数据将会丢失。sram的存取速度快,一般多用于存储cpu一些临时的数据,使得cpu在执行运算时速度更快捷方便;sram也可用于高速cpu与低速存储之间的数据或指令缓存,可加快cpu读取低速存储器中数据的效率。所以sram的存取速度决定了soc系统的性能,cpu的执行效率,而sram控制器的功能便决定了sram内存的存取速度。

在ahb协议中,数据总是比其对应的地址和控制信号等延后一个时钟。在主机对sram内存进行写后读操作时,sram控制器需要先对写操作的地址和一些控制信号进行锁存,等待总线上写入的数据准备好以后,才把数据真正写入sram内存。根据ahb总线上的流水线操作,跟在写操作后面的读操作需要多等待一个时钟周期,等待sram控制器把写入数据真正写入到sram内存中后才能执行。所读数据在下一个周期被总线读取。

上述写后读操作将会多花至少一个周期在等待数据写入过程中,从而影响了sram读写速率,也大大降低了cpu指令执行效率。



技术实现要素:

本发明旨在提供一种零等待周期sram的控制方法及装置,以解决对sram存储器进行写后读操作时需要等待至少一个时钟周期的问题,从而能够大大提高指令的执行效率,提升了soc系统运行程序的能力。

为了解决上述技术问题,本发明实施例提供了一种零等待周期sram的控制方法,包括:

当sram控制器处于空闲状态下,若满足第一条件则控制所述sram控制器进入读状态;若满足第二条件则控制所述sram控制器进入写状态;其中,所述第一条件为当ahb总线选中sram地址区,总线空闲并且ahb总线写使能信号为无效;所述第二条件为当ahb总线选中sram地址区,总线空闲并且ahb总线写使能信号为有效;

当所述sram控制器处于读状态下,若满足所述第二条件则控制所述sram控制器进入写状态;若满足所述第一条件则控制所述sram控制器维持在读状态;若不满足所述第一条件且不满足所述第二条件则控制所述sram控制器进入空闲状态;

当所述sram控制器处于写状态下,若满足所述第一条件则控制所述sram控制器进入写后读状态;若满足所述第二条件则控制所述sram控制器维持在写状态;若不满足所述第一条件且不满足所述第二条件则控制所述sram控制器进入空闲状态;其中,在写后读状态下,所述sram控制器优先执行当前读操作并将之前写操作的数据进行锁存;

当所述sram控制器处于写后读状态下,若满足所述第二条件则控制所述sram控制器进入写后写状态;若满足所述第一条件则控制所述sram控制器维持在写后读状态;若不满足所述第一条件且不满足所述第二条件则控制所述sram控制器进入写后空闲状态;其中,在写后写状态下,所述sram控制器将之前锁存的写操作的数据写入sram内存;在写后空闲状态下,所述sram控制器将之前锁存的写操作的数据写入sram内存;

当所述sram控制器处于写后写状态下,若满足所述第二条件则控制所述sram控制器进入写状态;若满足所述第一条件则控制所述sram控制器进入写后读状态;若不满足所述第一条件且不满足所述第二条件则控制所述sram控制器进入空闲状态;

当所述sram控制器处于写后空闲状态下,若满足所述第二条件则控制所述sram控制器进入写状态;若满足所述第一条件则控制所述sram控制器进入读状态;若不满足所述第一条件且不满足所述第二条件则控制所述sram控制器进入空闲状态。

进一步地,当ahb总线没有选中sram地址区时,默认为sram控制器处于空闲状态。

进一步地,所述写操作的数据包括写操作地址、写数据和数据传输宽度。

为了解决相同的技术问题,本发明还提供了一种零等待周期sram的控制装置,包括:

空闲状态控制模块,用于当sram控制器处于空闲状态下,若满足第一条件则控制所述sram控制器进入读状态;若满足第二条件则控制所述sram控制器进入写状态;其中,所述第一条件为当ahb总线选中sram地址区,总线空闲并且ahb总线写使能信号为无效;所述第二条件为当ahb总线选中sram地址区,总线空闲并且ahb总线写使能信号为有效;

读状态控制模块,用于当所述sram控制器处于读状态下,若满足所述第二条件则控制所述sram控制器进入写状态;若满足所述第一条件则控制所述sram控制器维持在读状态;若不满足所述第一条件且不满足所述第二条件则控制所述sram控制器进入空闲状态;

写状态控制模块,用于当所述sram控制器处于写状态下,若满足所述第一条件则控制所述sram控制器进入写后读状态;若满足所述第二条件则控制所述sram控制器维持在写状态;若不满足所述第一条件且不满足所述第二条件则控制所述sram控制器进入空闲状态;其中,在写后读状态下,所述sram控制器优先执行当前读操作并将之前写操作的数据进行锁存;

写后读状态控制模块,用于当所述sram控制器处于写后读状态下,若满足所述第二条件则控制所述sram控制器进入写后写状态;若满足所述第一条件则控制所述sram控制器维持在写后读状态;若不满足所述第一条件且不满足所述第二条件则控制所述sram控制器进入写后空闲状态;其中,在写后写状态下,所述sram控制器将之前锁存的写操作的数据写入sram内存;在写后空闲状态下,所述sram控制器将之前锁存的写操作的数据写入sram内存;

写后写状态控制模块,用于当所述sram控制器处于写后写状态下,若满足所述第二条件则控制所述sram控制器进入写状态;若满足所述第一条件则控制所述sram控制器进入写后读状态;若不满足所述第一条件且不满足所述第二条件则控制所述sram控制器进入空闲状态;

写后空闲状态控制模块,用于当所述sram控制器处于写后空闲状态下,若满足所述第二条件则控制所述sram控制器进入写状态;若满足所述第一条件则控制所述sram控制器进入读状态;若不满足所述第一条件且不满足所述第二条件则控制所述sram控制器进入空闲状态。

进一步地,当ahb总线没有选中sram地址区时,默认为sram控制器处于空闲状态。

进一步地,所述写操作的数据包括写操作地址、写数据和数据传输宽度。

与现有技术相比,本发明具有如下有益效果:

本发明实施例提供了一种零等待周期sram的控制方法及装置,在基本的读、写、空闲状态以外,增加了三个状态,在保留与现有技术相同的指令执行效果的前提下,通过对sram控制器进行先读后写和对写操作进行锁存的控制,避免了在写后读操作需多等待至少一个周期的问题。从而通过实施本发明能够大大提高指令的执行效率,有效提升soc系统运行程序的能力。

附图说明

图1是本发明一实施例提供的零等待周期sram的控制方法的流程示意图;

图2是本发明一实施例提供的零等待周期sram的控制方法的软件实现流程示意图;

图3是本发明一实施例提供的现有技术的读写操作时序示意图;

图4是本发明一实施例提供的零等待周期sram的控制方法的读写操作时序示意图;

图5是本发明一实施例提供的零等待周期sram的控制方法的另一读写操作时序示意图;

图6是本发明一实施例提供的零等待周期sram的控制装置的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参见图1-2,本发明实施例提供了一种零等待周期sram的控制方法,包括步骤:

s1、当sram控制器处于空闲状态(图2中表示为“idle”)下,若满足第一条件则控制所述sram控制器进入读状态;若满足第二条件则控制所述sram控制器进入写状态;其中,所述第一条件为当ahb总线选中sram地址区,总线空闲并且ahb总线写使能信号为无效(如图2所示,满足第一条件表示为“valid=1&hwrite=0”);所述第二条件为当ahb总线选中sram地址区,总线空闲并且ahb总线写使能信号为有效(如图2所示,满足第一条件表示为“valid=1&hwrite=1”)。在本发明实施例中,进一步地,当ahb总线没有选中sram地址区时,默认为sram控制器处于空闲状态。

s2、当所述sram控制器处于读状态(图2中表示为“read”)下,若满足所述第二条件则控制所述sram控制器进入写状态;若满足所述第一条件则控制所述sram控制器维持在读状态;若不满足所述第一条件且不满足所述第二条件则控制所述sram控制器进入空闲状态;

s3、当所述sram控制器处于写状态(图2中表示为“write”)下,若满足所述第一条件则控制所述sram控制器进入写后读状态;若满足所述第二条件则控制所述sram控制器维持在写状态;若不满足所述第一条件且不满足所述第二条件则控制所述sram控制器进入空闲状态;其中,在写后读状态下,所述sram控制器优先执行当前读操作并将之前写操作的数据进行锁存。在本发明实施例中,进一步地,所述写操作的数据包括写操作地址、写数据和数据传输宽度。

s4、当所述sram控制器处于写后读状态(图2中表示为“read_stall_write”)下,若满足所述第二条件则控制所述sram控制器进入写后写状态;若满足所述第一条件则控制所述sram控制器维持在写后读状态;若不满足所述第一条件且不满足所述第二条件则控制所述sram控制器进入写后空闲状态;其中,在写后写状态下,所述sram控制器将之前锁存的写操作的数据写入sram内存;在写后空闲状态下,所述sram控制器将之前锁存的写操作的数据写入sram内存;

s5、当所述sram控制器处于写后写状态(图2中表示为“write_and_write_stalled”)下,若满足所述第二条件则控制所述sram控制器进入写状态;若满足所述第一条件则控制所述sram控制器进入写后读状态;若不满足所述第一条件且不满足所述第二条件则控制所述sram控制器进入空闲状态;

s6、当所述sram控制器处于写后空闲状态(图2中表示为“idle_and_write_stall”)下,若满足所述第二条件则控制所述sram控制器进入写状态;若满足所述第一条件则控制所述sram控制器进入读状态;若不满足所述第一条件且不满足所述第二条件则控制所述sram控制器进入空闲状态。

请参见图2-5,基于上述方案,为便于更好的理解本发明实施例提供的零等待周期sram的控制方法,以下进行详细说明:

本发明实施例的设计适用于使用ahb协议的soc系统。

本方案的基本原理:在sram控制器不同读写状态下,遵循ahb协议,对sram内存接口和ahb接口进行数据传送,使系统能够正常运行。

本方案下控制器的状态机工作流程如下(软件实现流程图如图2所示):

1、当ahb总线没有选中sram地址区时,即默认为sram控制器为空闲状态(idle);当ahb总线选中sram地址区,总线空闲(hreadyin信号为高,在附图中标识为“valid=1”),并且ahb总线写使能信号为无效时,进入读状态(read)。

2、在读状态时,若ahb总线选中sram地址区,总线空闲(hreadyin信号为高),并且ahb总线写使能信号有效,进入写状态(write);若ahb总线保持选中sram地址区,总线空闲(hreadyin信号为高),并且ahb总线写使能信号为无效,控制器将继续停留在读状态(read);若满足不了以上两个条件,控制器将回到空闲状态(idle)。

3、在写状态(write)时,若ahb总线选中sram地址区,总线空闲(hreadyin信号为高),并且ahb总线写使能信号为无效,此时将进入写后读状态(read_stall_write);若ahb总线保持选中sram地址区,总线空闲(hreadyin信号为高),并且ahb总线写使能信号有效,控制器将继续停留在写状态(write);若满足不了以上两个条件,控制器将回到空闲状态(idle)。

4、若写指令后紧跟读指令,会进入read_stall_write状态,在此状态下,控制器会先进行读操作,并把之前的写操作内容保存下来,包括写操作的地址,写数据和数据传输宽度。

在写后读状态(read_stall_write)时,若ahb总线选中sram地址区,总线空闲(hreadyin信号为高),并且ahb总线写使能信号有效,进入write_and_write_stalled状态;若ahb总线保持选中sram地址区,总线空闲(hreadyin信号为高),并且ahb总线写使能信号为无效,控制器将继续停留在写后读状态(read_stall_write);若满足不了以上两个条件,控制器将进入idle_and_write_stall状态。

5、若在写操作锁存后,读操作执行完毕,紧接着来了一个写操作,会进入write_and_write_stalled状态,在此状态下,控制器会把此前锁存的写数据真正的写进sram内存。

在write_and_write_stalled状态时,若ahb总线选中sram地址区,总线空闲(hreadyin信号为高),并且ahb总线写使能信号有效,进入写状态(write);若ahb总线保持选中sram地址区,总线空闲(hreadyin信号为高),并且ahb总线写使能信号为无效,进入写后读状态(read_stall_write)。

6、若在写操作锁存后,读操作执行完毕,紧接是空闲操作,会进入idle_and_write_stall状态,在此状态下,控制器会把此前锁存的写数据真正的写进sram内存。

在idle_and_write_stall状态时,若ahb总线选中sram地址区,总线空闲(hreadyin信号为高),并且ahb总线写使能信号有效,进入写状态(write);若ahb总线选中sram地址区,总线空闲(hreadyin信号为高),并且ahb总线写使能信号为无效,进入读状态(read)。若满足不了以上两个条件,控制器将进入空闲(idle)状态。

以上原理描述在软件实现上的流程如图2所示。

请参见图3(读写操作时序图),需要说明的是,根据ahb传输协议,要完成一次简单传输,首先主机需要在第一个hclk的上升沿后驱动数据传输的地址总线和控制总线,包括写使能信号和传输数据宽度等信号。然后从机会在第二个hclk的上升沿采样此地址数据和控制数据。在从机对相应的地址和控制进行采样后,就可以开始驱动反馈给主机的响应信号,以告诉主机自己是否忙碌,主机需要在下个周期等待。主机会在第三个hclk的上升沿采样从机的响应信号。若不需要主机等待,在第2个hclk上升沿后,主机会向总线写入要写的数据,或者从机会向总线写入主机读取的数据。数据总是比其对应的地址和控制信号等延后一个时钟。

对于sram控制器来说,sram内存的读写时序与ahb总线有所不同。读取sram内存数据时,在地址信号改变后,sram在下一个hclk上升沿采样到此地址信号,并返回对应相应地址的数据,主机将会在接下来的hclk上升沿采样到所需读取的数据,此读取时序与ahb协议一致;向sram内存写入数据时,需要同时写入地址信号,数据信号和写使能信号,此写时序与ahb写时序是不一样的,所以sram控制器需要在ahb总线的第一个hclk上升沿后,锁存住地址信号和写使能信号,然后在第二个hclk上升沿后,锁存的写地址和写使能等信号能跟总线写入的写数据一起写入到sram内存中。

如上所述,因为ahb协议的特性,sram控制器只能在写操作的数据阶段才能将数据写入到sram内存,若主机在发起写操作(a)后紧接着发起读操作(b),则需要等到前面发起的写操作真正写到了sram里(a地址和dataa同时准备好写入到sram)后,sram控制器才能用后面的读地址寻址(saddr写入b地址),再在下一个hclk读取到对应的数据(datab)。可以看到,此写后读操作将会多花至少一个周期在等待数据写入过程中,从而影响了sram读写速率和cpu指令执行效率。

为了解决这个等待的问题,本发明方案提供了一种零等待周期的sram控制器设计,此设计可在上述的场景中得到相同的指令执行效果,但不需要一个周期的等待,实现零等待周期。本设计的方法将利用前文所述的状态机工作流程。在基本的读,写,空闲状态以外,增加了3个状态。在上述场景中,采用先读取后写入的方法,并提前锁存写入地址和数据等,以实现零等待周期的功能。本设计读写操作时序图如下。本发明方案的设计读写操作时序如图4所示。

如图4所示,主机在ahb总线上先后发起了a,b,c三个操作。a操作为写操作,后面紧跟的b,c操作为读操作。

1.在第一个hclk上升沿后,sram控制器检测到了sram地址的选定和写使能信号,判定下一个状态为写状态(write);

2.第二个hclk上升沿后,sram控制器把a地址锁存,并且接收到总线上的b操作读操作,判定下一个状态为写后读(read_stall_write),此时控制器先执行b操作,把b地址送入sram内存;

3.sram内存在第三个hclk的上升沿采样到b地址和选通信号,将返回data(b)。在此上升沿后控制器接收到总线上的c操作读操作,判定下一个状态为写后读(read_stall_write),此时控制器先执行c操作,把c地址送入sram内存。在这个hclk上升沿时,控制器检测到本状态为write,下一状态为read_stall_write,即把此前锁存的aphase_haddr值和hwdata值,锁存到stalled_haddr和stalled_hwdata中。

4.第四个hclk上升沿后,sram内存采样到c地址和选通信号,将返回data(c)。在此上升沿后,主机不再选通sram内存地址,控制器判定下一个状态为idle_and_write_stall,说明下一个状态不是读状态,可以进行写操作,此时控制器取出锁存在stalled_haddr和stalled_hwdata中的数据,把a数据真正写入a地址。

上述场景中,本设计可实现写后读操作,可以看到,所写跟所读的地址是不同的。下面再描述一个场景:

请参见图5,主机在ahb总线上先后发起了a,b,a三个操作。a操作为写操作,后面紧跟的b,a操作为读操作。

1.在第一个hclk上升沿后,sram控制器检测到了sram地址的选定和写使能信号,判定下一个状态为写状态(write);

2.第二个hclk上升沿后,sram控制器把a地址锁存,并且接收到总线上的b操作读操作,判定下一个状态为写后读(read_stall_write),此时控制器先执行b操作,把b地址送入sram内存;

3.sram内存在第三个hclk的上升沿采样到b地址和选通信号,将返回data(b)。在此上升沿后控制器接收到总线上的a操作读操作,判定下一个状态为写后读(read_stall_write),此时控制器会先执行a操作,把a地址送入sram内存。同时,控制器检测到本状态为write,下一状态为read_stall_write,即把此前锁存的aphase_haddr值和hwdata值,锁存到stalled_haddr和stalled_hwdata中。

4.第四个hclk上升沿后,控制器锁存操作a的读地址,判断出此读地址跟stalled_haddr里锁存的写地址一致,说明此操作读出的数据应为要写入a地址的数据。此时控制器拉高read_match_stalled信号,忽略在上一个周期读出的数据,直接把存在stalled_hwdata中的数据写入总线。此周期内,主机不再选通sram内存地址,控制器判定下一个状态为idle_and_write_stall,说明下一个状态不是读状态,可以进行写操作,此时控制器取出锁存在stalled_haddr和stalled_hwdata中的数据,把a数据真正写入a地址。

由上述可知,本发明设计方案解决了在读写地址一致和不一致的情况下,对sram内存进行写后读操作都无需等待周期的问题,实现了零等待周期的sram控制器设计。大大提高了指令的执行效率,提升了soc系统运行程序的能力。

需要说明的是,对于以上方法或流程实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作并不一定是本发明实施例所必须的。

请参见图6,为了解决相同的技术问题,本发明还提供了一种零等待周期sram的控制装置,包括:

空闲状态控制模块1,用于当sram控制器处于空闲状态下,若满足第一条件则控制所述sram控制器进入读状态;若满足第二条件则控制所述sram控制器进入写状态;其中,所述第一条件为当ahb总线选中sram地址区,总线空闲并且ahb总线写使能信号为无效;所述第二条件为当ahb总线选中sram地址区,总线空闲并且ahb总线写使能信号为有效;

读状态控制模块2,用于当所述sram控制器处于读状态下,若满足所述第二条件则控制所述sram控制器进入写状态;若满足所述第一条件则控制所述sram控制器维持在读状态;若不满足所述第一条件且不满足所述第二条件则控制所述sram控制器进入空闲状态;

写状态控制模块3,用于当所述sram控制器处于写状态下,若满足所述第一条件则控制所述sram控制器进入写后读状态;若满足所述第二条件则控制所述sram控制器维持在写状态;若不满足所述第一条件且不满足所述第二条件则控制所述sram控制器进入空闲状态;其中,在写后读状态下,所述sram控制器优先执行当前读操作并将之前写操作的数据进行锁存;

写后读状态控制模块4,用于当所述sram控制器处于写后读状态下,若满足所述第二条件则控制所述sram控制器进入写后写状态;若满足所述第一条件则控制所述sram控制器维持在写后读状态;若不满足所述第一条件且不满足所述第二条件则控制所述sram控制器进入写后空闲状态;其中,在写后写状态下,所述sram控制器将之前锁存的写操作的数据写入sram内存;在写后空闲状态下,所述sram控制器将之前锁存的写操作的数据写入sram内存;

写后写状态控制模块5,用于当所述sram控制器处于写后写状态下,若满足所述第二条件则控制所述sram控制器进入写状态;若满足所述第一条件则控制所述sram控制器进入写后读状态;若不满足所述第一条件且不满足所述第二条件则控制所述sram控制器进入空闲状态;

写后空闲状态控制模块6,用于当所述sram控制器处于写后空闲状态下,若满足所述第二条件则控制所述sram控制器进入写状态;若满足所述第一条件则控制所述sram控制器进入读状态;若不满足所述第一条件且不满足所述第二条件则控制所述sram控制器进入空闲状态。

进一步地,当ahb总线没有选中sram地址区时,默认为sram控制器处于空闲状态。

进一步地,所述写操作的数据包括写操作地址、写数据和数据传输宽度。

可以理解的是上述装置项实施例,是与本发明方法项实施例相对应的,本发明实施例提供的一种零等待周期sram的控制装置,可以实现本发明任意一项方法项实施例提供的零等待周期sram的控制方法。

以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1