发明内容
本发明实施例主要解决的技术问题是提供一种静态随机读取存储器的模拟多端口方法、其装置、模拟多端口存储器、窗处理模块及其电子设备,能够解决现有技术中存储器使用单端口SRAM和多端口SRAM之间存在矛盾的问题。
为解决上述技术问题,本发明实施例提供一种静态随机读取存储器的模拟多端口方法。所述方法包括:
在第一时钟周期,预先读取所述静态随机读取存储模块的第一静态存储单元的第一数据;
在第二时钟周期,在所述第一静态存储单元写入第二数据,并且输出所述第一数据。
可选地,所述静态随机读取存储器包括k个静态随机读取存储模块;所述静态随机读取存储模块包括n个静态存储单元,n和k均为正整数;以二元数组(n,k)表示与第k个静态随机读取存储器中的第n个存储单元对应的编号。
可选地,所述方法具体包括:
在第一时钟周期,在编号为(n-2,k-1)的静态存储单元写入第三数据;
读取编号为(n-1,1)、(n-1,2)至(n-1,k)的k个静态存储单元存储的第一数据;
在第二时钟周期,在编号为(n-1,k-1)的静态存储单元写入第二数据;
读取编号为(n,1)、(n,2)至(n,k)的k个静态存储单元存储的第四数据,并且获取所述第一数据。
可选地,所述方法还包括:在第一时钟周期,将读取的第一数据输出至对应的缓存装置中缓存。
为解决上述技术问题,本发明另一实施例提供了一种静态随机读取存储器的模拟多端口装置。所述装置包括:
信息读取单元,用于在第一时钟周期,预先读取所述静态随机读取存储模块的第一静态存储单元的第一数据;
信息写入单元,用于在第二时钟周期,在所述第一静态存储单元写入第二数据,并且输出所述第一数据。
可选地,所述静态随机读取存储器包括k个静态随机读取存储模块;
所述静态随机读取存储模块包括n个静态存储单元,n和k均为正整数;以二元数组(n,k)表示与第k个静态随机读取存储器中的第n个存储单元对应的编号。
可选地,所述信息读取单元具体用于:
在第一时钟周期,读取编号为(n-1,1)、(n-1,2)至(n-1,k)的k个静态存储单元存储的第一数据;在第二时钟周期,读取编号为(n,1)、(n,2)至(n,k)的k个静态存储单元存储的第四数据,并且获取所述第一数据;
所述信息写入单元具体用于:在第一时钟周期,在编号为(n-2,k-1)的静态存储单元写入第三数据;在第二时钟周期,在存储地址为(n-1,k-1)的静态存储单元写入第二数据。
可选地,所述装置还包括缓存装置,所述缓存装置用于:缓存读取的第一数据。
为解决上述技术问题,本发明实施例还提供了一种应用如上所述的方法的模拟多端口存储器。其包括若干个单端口静态随机读取存储模块、控制器、地址解码器,以及若干个选择器;
所述单端口静态随机读取存储模块具有若干个静态存储单元,所述静态存储单元以预定的规则,分配至若干个独立读取和写入的存储区块;
所述存储区块具有PxQ个静态存储单元,其中,P表示所述存储区块具有第1列至第P列静态存储单元,Q表示所述存储区块具有第1行至第Q行静态存储单元;
所述行地址解码器包括:若干用于解码行地址信号的解码器及其字线;所述列地址解码器包括:若干解码列地址信号的解码器及其输出线,所述字线用于控制所述存储区块对应行的导通,所述输出线用于控制所述存储区块对应列的导通;
所述控制器根据输入指令,输出对应的控制信号从预定的存储区块中写入数据或者输出预定的存储区块的读取数据;
所述选择器设置在相邻的两个解码器之间,根据与输入指令对应的选择信号,选择所述存储区块的对应的静态存储单元导通。
可选地,所述预定的规则为:将单端口静态随机读取存储器的奇数编号的静态存储单元分配至奇存储区块;并且将所述单端口静态随机读取存储器的偶数编号的静态存储单元分配至偶存储区块。
可选地,在写入操作发生在所述奇存储区块的最后一列的第q行静态存储单元时,所述选择器根据对应的选择信号,在同一时钟周期的读取操作时,选择所述偶存储区块的第q+1行静态存储单元导通;
当所述写入操作发生在所述奇存储区块的最后一列的最后一行静态存储单元时,所述选择器根据对应的选择信号,在同一时钟周期的读取操作时,选择所述偶存储区块的第1行静态存储单元导通。
可选地,所述行地址解码器具体包括:与所述存储区块的第1行至第Q行静态存储单元对应的字线0至字线Q-1;
依次序设置的,与字线0至字线Q-1对应的Q个解码器以及一个额外设置的,用以解码第Q行静态存储单元的行地址信号的解码器;
所述额外设置的,用以解码第Q行静态存储单元的地址信号的解码器与所述字线0对应的解码器相邻,用以控制偶存储区块的第1行静态存储单元的导通。
可选地,所述存储器还包括若干个寄存器,所述寄存器用于缓存在一个时钟周期从所述单端口静态随机读取存储模块读取的数据;以及在下一个时钟周期输出。
为解决上述技术问题,本发明实施例还提供了一种应用如上所述的存储器的窗处理模块。使用一个单端口静态随机读取存储模块存储数据阵列中的一行数据;所述单端口静态随机读取存储模块的一个静态存储单元存储存储数据阵列中的一个数据单元;
随所述窗处理模块的窗口在数据阵列中的移动,在对应的静态存储单元中写入数据阵列中对应的数据单元;
所述窗处理模块为kⅹk窗处理模块,k为正整数;所述存储器包括k-1个单端口静态随机读取存储模块。
为解决上述技术问题,本发明实施例还提供了一种电子设备。所述电子设备包括如上所述的存储器以及至少一个处理器;所述存储器在一个时钟周期写入和输出预定数量的数据,并将所述数据输出至所述处理器,执行窗处理操作。
本发明实施例中提供的模拟多端口方法,在上一个时钟周期预先读取下一周期所需要的第一存储信息,从而可以实现在下一时钟周期同时执行第二存储信息写入和第一存储信息输出的效果,模拟了多端口SRAM可同时执行读取和写入操作的工作特性,解决了选用单端口SRAM与多端口SRAM的矛盾,在使用较少的单端口SRAM的情况下通过模拟多端口的方式实现更好的工作性能,降低电路的硬件成本和提高良品率。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
窗处理模块(filter)是图像或者视频信号中广泛应用的基础模块。其通常具有一个预定大小的矩形窗口,如3ⅹ3、4ⅹ4或者面积更大的窗口。窗处理模块以该矩形框为一个处理单元,对属于该窗口内的元素(例如3ⅹ3窗口中的9个信号)执行特定的处理操作并输出整合后对应的数据。
窗处理模块(filter)的处理对象可以是任何合适的,具有一个或者多个参数特征的图像、视频或者其它相关的信号。例如,该处理对象可以是图像解析度为1920ⅹ1080,每个像素为24位,由8位的红、绿、蓝三个子像素组成(如24位真彩色)的图像或者视频帧信号。
图3为本发明实施例提供的大小为3x3的窗处理模块的应用环境示意图。如图3所示,该应用环境包括:用户10、显示器20、网络30以及服务器40。
用户10可以为具有任何数量的,具有相同或者相近操作行为的群体,例如家庭、工作组或者个人。用户10可以通过任何合适的类型的,一种或者多种用户交互设备与显示器20交互,例如鼠标、键盘、遥控器、触摸屏、体感摄像头或者智能可穿戴设备,输入指令或者控制显示器20执行一种或者多种操作。
网络30可以是任何合适的,用以实现两个电子设备之间通信连接的有线或者无线网络,例如因特网、局域网或者有线线缆。服务器40可以是任何合适类型的,实现一种或者多种功能,例如存储、运算、中继的电子设备。所述服务器40具有至少一个网络接口,与网络30建立通信连接。
显示器20可以为任何合适类型的,具有流媒体播放或者图像展示功能的电子设备,可向用户展示一个或者多个图像或者连续的视频帧,例如,智能电视、个人电脑、平板电脑、智能手机、图形显示器等。该显示器20可以通过网络30与服务器40通信连接,从服务器40中获取原始视频或者图像信号。
在一些实施例中,该显示器20还可以包括任何合适类型的,用以存储数据的存储介质,例如磁碟、光盘(CD-ROM)、只读存储记忆体或随机存储记忆体。该存储介质存储有若干视频或者图像数据,作为本地数据,显示器20可以根据实际情况,可以选择使用本地数据或者使用通过服务器40获取的在线数据。
所述显示器20还可以包括一个或者多个逻辑运算模块,单线程或者多线程并行执行任何合适类型的,图像或者视频信号的处理操作,例如基于窗处理模块的噪声消除。所述逻辑运算模块可以是任何合适类型的,能够执行逻辑运算操作的电子电路或者贴片式电子器件,例如单核心处理器、多核心处理器、图形处理器(GPU)。在一些实施例中,所述存储介质还可以存储有供逻辑运算模块调用和执行的计算机可执行程序,该程序在被所述逻辑运算模块执行用以实现对应的图像/视频信号处理的一个或者多个步骤。
例如,显示器20可以根据用户指令,对图像信号执行图4所示的中值滤波的窗处理模块。该中值滤波使用的窗口大小为3ⅹ3。如图4所示,窗口内包含了P0-P8一共9个元素。
所述显示器20的逻辑运算模块可以从存储介质中调用对应的计算机可执行程序,执行以下的步骤:
首先,分别对每一列计算其最大值、中值和最小值,能够获得如下的三组数据:
最大值组:Max0=[P0,P3,P6],Max1=[P1,P4,P7],Max2=[P2,P5,P8]
中值组:Med0=[P0,P3,P6],Med0=[P1,P4,P7],Med2=[P2,P5,P8]
最小值组:Min0=[P0,P3,P6],Min0=[P1,P4,P7],Min2=[P2,P5,P8]
根据以上的三组数据可以看到:
1)最大值组和最小值组中的最小值一定是9个元素的最大值和最小值,可以排除。
2)中值组中的最大值和最小值均至少大于或者小于5个元素,因此也可以排除。
3)最大值组中的中值和最小值组中的中值均小于5个元素,也可以排除。由此,9个元素中的中值必然存在于最大值组中的最小值、中值组中的中值以及最小值组中的最大值三者之中,确定三者之间的中值作为9个元素的中值。
然后,在待处理的图像信号中,每个时钟周期将窗口向左移动一个单位长度(例如如图5所示的移动至虚线框的位置),直至到达一行中的末端。在经过预定的时钟周期后,窗口下移一行,重新从另一行数据的起始端开始重复向左移动,直至一行数据的末端。对于每个时钟周期中窗口包括的9个元素重复执行上述过程以实现对于图像信号的中值滤波处理。
应当说明的是,所述显示器20还可以执行其它任何合适的,基于窗处理模块的图像或者视频信号处理,包括领域平均法消除噪声、加权平均法消除噪声、掩膜式平滑、图像锐化等。
虽然图3中仅显示了2个用户10,2个服务器40,2个显示器20。但本领域技术人员可以理解的是,在实际应用过程中,该应用环境还可以包括更多或者更少的用户、服务器或者显示器。
图3中所示的显示器20执行的基于窗处理模块的图像处理方法通常可以概括为如下两个步骤:获取窗口内所有元素数据以及对窗口内的元素数据进行预定的逻辑运算,输出处理结果并显示。
本领域技术人员可以理解的是,上述窗处理模块的步骤也可以在不同的功能模块中执行,也可以通过任何合适的软件、硬件或者软硬件结合的方式实现,例如在服务器40中执行,并将处理后的数据传输至显示器20中进行展示。该窗处理模块可以作为独立的功能模块,整合在所述显示器20中。在一些实施例中,该窗处理模块还可以独立设置在显示器20外,通过网络30或者其它连接方式,与显示器20实现数据通信以完成上述图像、视频信号的处理过程。
图5为本发明实施例提供的一个大小为3ⅹ3的窗处理模块的示意图。如图5所示,假设待处理视频信号划分为若干个独立的数据块101(每个数据块可以表示一个像素点或者其它图像、视频数据帧),由具有i列和j行的信号阵列201表示,窗处理模块具有一个大小为3x3的矩形框301作为窗口。窗处理模块(如显示器20)在执行过程中,首先从存储器中读取窗口内的全部元素,并输入至对应的处理器执行相应的处理操作,实现特定的信号处理。
所述处理操作可以是任何合适类型的,对信号或者图像的数据进行逻辑运算的方法或者一种以上的逻辑运算方法的结合,包括滤波、二值化、压缩或者解码等。
如图5所示,每个数据块101可以由二维坐标(i,j)定义。其中,i表示该数据块位于信号阵列201的第i列,j表示该数据块位于信号阵列的第j行。
令F表示窗处理模块预设的,用于对窗口内的数据块101进行的处理操作。对于该窗处理模块,可以通过如下算式表示:
在算式(1)中,Di,j是窗处理模块处理前,在坐标(i,j)的原始数据,D′i-1,j-1是9个原始数据经过窗处理模块处理后,在坐标(i-1,j-1)的输出数据,Fi,j是对在坐标(i,j)的原始数据的处理操作,其可以是权重参数、滤波函数或者其它各种合适类型的,用于进行信号或者数据处理的函数。
在窗处理模块执行过程中,每个坐标上的原始数据Di,j需要逐个的输入到上述窗处理模块中,例如,Di,j为当前时钟周期输入的原始数据,根据输入的原始数据Di,j以及之前输入的8个原始数据:
(Di-2,j;Di-2,j-1;Di-2,j-2;Di-1,j;Di-1,j-1;Di-1,j-2;Di,j-1;Di,j-2)执行算式(1),并输出处理信号D′i-1,j-1。该处理信号是在坐标(i-1,j-1)上的输出数据。
因此,可以通过不断的移动窗口301,对信号阵列中不同坐标位置的原始数据执行处理操作F,从而获得信号阵列中全部或者部分坐标位置的输出数据。
可选地,经过所述窗处理模块获得的输出数据可以直接作为显示数据,输出并显示(如直接由显示器20显示),也可以作为一个中间过程结果,用以提供给其它功能模块(如服务器40执行窗处理模块完毕后,传输显示器20),进行后续的其它数据处理从而输出最终的显示数据。
如图5所示,上述的逐个输入原始数据Di,j的操作过程可以理解为:每个时钟周期将窗口301左移一个数据块101(或者数据单元)的长度(将窗口301移动至虚线框401的位置)。当然,在移动至每行的最后一个数据块时,经过预定的时钟周期后,将窗口301下移一行,重新获取下一行中的第一个数据块。该预定的时钟周期可以是根据实际情况,由技术人员进行设置,例如10个时钟周期,或者更多、更少的时钟周期。
在上述窗口的移动过程中,可以看到除了需要使用当前行j的原始数据外,也需要使用在先的j-1和j-2行的原始数据,亦即读取存储坐标位置为(i+1,j-1)和(i+1,j-2)的原始数据(图5中的具有阴影的数据块)。当然,为了下一次的窗处理模块的顺利执行,还需要存储这一坐标位置的原始数据(供下一次处理操作使用)。
由此,在本实施例中,大小为3ⅹ3的窗处理模块在一个时钟周期内,需要执行2个数据块的读取操作和1个数据块的写入操作。本领域技术人员可以根据以上实施例揭露的内容,推导至更大或者更小的窗处理模块中,例如对于4ⅹ4的窗处理模块,在一个时钟周期内,需要执行3个数据块的读取操作和1个数据块的写入操作。
惯常的,可以通过基于单端口的SRAM(single-port SRAM)的存储器或者基于多端口的SRAM(dual-port SRAM)的存储器来实现上述获取窗口内所有元素数据的操作步骤(即若干个数据块的读取操作和1个数据块的写入操作)。
图6为惯常使用的基于单端口SRAM(single-port SRAM)的,用以实现大小为3x3的窗处理模块的存储器。如图6所示,该存储器包括3个单端口SRAM单元,即S1-S3。每个单端口SRAM单元存储在图5中所示的待处理信号中的一行数据,例如,第一单端口SRAM单元S1存储第j-2行的数据、第二单端口SRAM单元S2存储j-1行的数据、第三单端口SRAM单元S3存储第j行的数据。
在窗口301移动到图5所示的(i,j)的位置时,需要执行的操作为在第三单端口SRAM单元S3的第i位存储地址中写入位置(i,j)的原始数据并且读取第二单端口SRAM单元S2和第一单端口SRAM单元S1第i位存储地址中的原始数据。
在图5中所示的第j行数据执行完毕后,窗口移动到第j+1行,用以计算第j行的数据。此时,第j+1行的数据将写入到第一单端口SRAM单元S1中,丢弃原有的j-2行的数据。上述过程重复进行直至图5中的全部行的数据均被处理完毕。
在本实施例中,由于图5所示的j-2行的部分数据(标记有交叉的数据块),在以后的时钟周期中不需要再次从存储器中读取。因此,为了减少所需要的存储信息量,进一步的可以使用基于多端口SRAM(dual-port SRAM)用以实现大小为3ⅹ3的窗处理模块的存储器。
如图7所示,该基于多端口SRAM的存储器包括2个多端口SRAM存储单元D1和D2。每个多端口SRAM单元存储在图5中所示的待处理信号中的一行数据,例如,第一多端口SRAM单元D1存储第j-2行的仍需要读取的部分数据和第j行的新数据、第二多端口SRAM单元D2存储j-1行的数据。
在窗口301移动到图5所示的(i,j)的位置时,在该时钟周期内,读取第二多端口SRAM单元D2和第一多端口SRAM单元D1第i位存储地址中的数据并且在第一多端口SRAM单元D1的第i位存储地址中写入位置(i,j)的数据。
结合图6和图7可以看出,由于在第二多端口SRAM单元中存储有以后的时钟周期中需要使用的j-2行和j行的数据,在以后时钟周期内不需要从存储器中取出的数据(即图5所示的标记有交叉的数据块)可以被及时的覆盖。因此,图7所示的存储器中仅需要存储两行待处理数据,而图6所示的存储器中需要存储3行数据。
但是,图7所示的存储器需要在同一个时钟周期对同一个存储地址(即同一个静态存储单元)执行数据读取和写入两个操作(即D1的地址i)。因此,单端口SRAM由于其工作特性(即6T bitcell)无法满足这样的操作要求。
基于一些额外增设的功能模块或者存储器构造,可以在6T bitcell的工作特性限制下,模拟图7所示存储器的多端口工作效果以降低存储器的硬件成本。如图13所示,为本发明实施例提供的实现模拟多端口的方法。该方法包括:
100:在某个时钟周期,预先读取所述静态随机读取存储模块的第一静态存储单元的第一数据。
200:在另一个时钟周期,在所述第一静态存储单元写入第二数据,并且输出所述第一数据。
由于步骤100时预先读取了存储在第一静态存储单元的数据。因此,从整体的数据读写来看,在步骤200的时钟周期内,存储器能够既在第一静态存储单元写入第二数据,又能输出第一静态存储单元原存储的第一数据,实现多端口模拟的效果。
图8为本发明实施例提供的静态随机读取存储器的模拟多端口存储器。该模拟多端口存储器用以实现图13所示的方法,即在第m个时钟周期预读第m+1个时钟周期所需要输出的数据,并且在第m+1个时钟周期输出该预读的数据。
图9为所述模拟多端口存储器的信息输入和输出示意图。如图9所示该模拟多端口存储器具有用于输入若干输入指令的输入端,两个数据输出端Data_out1[23:0]和Data_out2[23:0]。
在本实施例中,图8所示的模拟多端口存储器用以实现3ⅹ3的窗处理模块。与图7所示的基于多端口的存储器类似,在图8所示的存储器中,需要存储的数据量为两行,分别使用第一和第二单端口静态随机读取存储模块存储图5所示的第j-1行以及第j-2行的部分数据和第j行的部分数据。假设图5所示的信号阵列表示的图像解析度为1920ⅹ1080(即列数为1920,行数为1080),每个数据块为1个像素点。
本领域技术人员可以理解的是,在另一些实施例中,若需要实现更大窗口的窗处理模块,例如4ⅹ4或者5ⅹ5时,所述模拟多端口存储器还可以通过设置更多的单端口静态随机读取存储模块,形成更多的数据输出端、接收对应的输入指令以满足不同大小的窗处理模块的需要。可以理解的是,对于窗口大小为kⅹk的窗处理模块,应当使用k-1个单端口静态随机读取存储模块。
图10为图8所示的模拟多端口存储器的单端口静态随机读取存储模块的存储地址示意图。如图10所示,假设每个单端口静态随机读取存储模块包括1920个静态存储单元(与图5所示的1920列对应),每个静态存储单元具有依次的编号,即0、1、2至1919。
图11为图8所示的模拟多端口存储器的存储区块(即偶数存储区块bank0,bank2以及奇数存储区块bank1,bank3)的示意图。每个单端口静态随机读取存储模块,如图10的K1及K2可以依照预定的规则,可以被划分为两个存储区块(如K1被分为bank0,bank1;K2被分为bank2、bank3)。
如图11所示,在本实施例中,每个存储区块包括4ⅹ240的静态存储单元,单端口静态随机读取存储模块K1和K2按照奇数和偶数的规则对静态存储单元进行划分,将偶数编号的静态存储单元和奇数编号的静态存储单元分别划分为一个存储区块(bank0、bank2以及bank1、bank3)内,并且将奇数存储区块和偶数存储区块分别放置于行地址解码器的两侧。
图10所示的K1和K2的静态存储单元可以采用图1所示的6T bitcell(静态存储单元)。其中,图8和图11所示的从列地址解码器引出的,指向存储区块的竖线(其表示与列地址解码器位数对应的输出线,例如图11中所示的输出线0-输出线3)代表图1中所示的6Tbitcell的一对bitline和bitline_bar(位线)。该bitline和bitline_bar在图1中分别以BL和BL表示。
如图8所示,该模拟多端口存储器包括:第一单端口静态随机读取存储模块K1、第二单端口静态随机读取存储模块K2、列地址解码器802、两者共用的控制器800、行地址解码器801、选择器mux以及寄存器804。
所述列地址解码器802和行地址解码器801分别包括与存储区块的阵列相对应设置的,用以解码对应行或者列的解码器。解码器具有对应的输出线或字线(如图11所示,包括与第1行至第240行静态存储单元对应的字线0-字线239以及与第1列至第四列的静态存储单元对应的输出线0-输出线3)。每个字线或者输出线能够控制对应行或者对应列的静态存储单元的导通。解码器解码行地址信号和列地址信号,令相应的字线和输出线导通从而在特定的地址执行数据写入或者读取操作。
例如,当需要在图11虚线框所示的静态存储单元(编号12)写入某位数据时,根据接收到的行地址信号和列地址信号,经过列地址解码器和行地址解码器解码后,输出线2和字线1导通,从而令该位数据写入虚线框所示的存储地址中。
请继续参阅图8,所述选择器mux连接行地址解码器中相邻的两个解码器(图8中的解码器由与解码器对应的字线序号表示,即具有240个解码器,分别与字线0至字线239对应)并接收选择信号。选择信号根据列地址解码器的列地址信号所决定,在列地址信号为最大值,并且写入操作发生在右侧的奇数存储区块时,选择信号为1,否则为0(具体位于哪一侧的存储区块可以由a[0]判断)。选择器接收到该选择信号后,可以选择引导行地址解码器的字线q还是字线q+1导通(即在左侧存储区块中的当前行还是下一行中执行数据读取操作)。应当说明的是,在写入操作发生在右侧的最后一行(如239行)的最后一个地址时,读取操作在左侧的0行进行。
在本发明实施例提供的模拟多端口存储器中,所述存储区块(bank0,bank2或者bank1、bank3)均为独立读写的存储区块,所述控制器可以通过输出对应的控制信号(包括全局的准备信号pre、行/列地址解码使能信号row_en/csel_en、分左右的写入/读取使能信号:w_en_0;w_en_2;w_en_1;w_en_3/r_en_0;r_en_2;r_en_1;r_en_3以及左右的列地址信号a_r[2:1];a_l[2:1]),分别控制不同的存储区块进行数据的读取或者写入操作。
请继续参阅图8,所述寄存器804与所述控制器800连接,作为缓存装置,暂时存储从存储区块中读取的数据。所述寄存器804可以形成所述模拟多端口存储器的数据输出端Data_out1[23:0]和Data_out2[23:0],输出窗处理模块所需要的数据。
在本发明实施例中,该寄存器804设置为两个(与单端口静态随机读取存储模块的数量对应)。在另一些实施例中,该寄存器804也可以省略,在第m个时钟周期读取的数据直接输出并放置在数字电路中其它合适的数据存储介质中,在第m+1个时钟周期提供给窗处理模块使用。
以下结合图8-图11,以3ⅹ3大小的窗处理模块的执行过程为例,对本发明实施例提供的多端口存储器的在相关的两个时钟周期中的数据读写过程进行详细描述。
假设在当前时钟周期m,在静态随机读取存储模块K1的编号为8的静态存储单元写入第三数据(步骤110)。如图9所示,所述模拟多端口存储器接收的输入指令可以包括:在K1中写入数据的输入指令WEN1(1表示在K1写入,若WEN2则表示在K2写入),目标写入地址a[10:0]=00000001000(十进制数字8的二进制表示,以下皆同,均使用对应的二进制数表示),对应的列地址信号a[2:1]=00、行地址信号a[10:3]=0000001以及用于判断奇偶存储区块的信号a[0]=0,写入数据p[23:0],时钟信号CLK等。
在同一个时钟周期内,如图9所示,所述模拟多端口存储器分别从Data_out1[23:0]及Data_out2[23:0]输出第一和第二单端口静态随机读取存储模块K1和K2的存储数据。其中,输出的数据Data_out1[23:0]来自于上一时钟周期预先读取的,存储在编号为8的静态存储单元的数据。
如图8所示,输出的数据源自于控制器接收从存储区块bank0、bank2和bank1、bank3输出的数据q_0[23:0]、q_2[23:0]、q_1[23:0]、q_3[23:0]。然后根据指示信号a[0]选择对应的数据输出至输出端口Data_out1[23:0]及Data_out2[23:0]。
在另一些实施例中,还可以根据实际情况,增加或者减省一些输入指令以满足实际的应用要求。
如图8所示,根据输入指令WEN1,a[10:0]=00000001000,控制器800依据a[0]=0可以判断需要在偶数一侧的存储区块bank0写入数据。由此,发出对应的控制信号w_en_0和全局的pre;row_en;csel_en信号,选择在存储区块bank0的对应的静态存储单元写入数据。
在本实施例中,控制器可以根据输入指令WEN1(或WEN2)、a[0]来确定数据写入的存储区块。另外,控制器还可以根据a[0]来确定需要输出到寄存器的数据。
在另一些实施例中,所述控制器800具体还可以根据实际情况,根据输入指令,输出对应的一种或者多种用以选择目标的存储区块进行数据读取或者写入的控制信号。
该控制信号具体的信号形式、信号种类等可以由实际情况所决定,其可以源于现有的一些控制指令,为本领域技术人员所熟知。在本实施例中,由控制器根据实际的存储地址划分策略,进行整合或者调整,能够实现独立的控制各个存储区块进行读写操作即可。
除确定存储区块外,列地址解码器和行地址解码器也根据与目标地址对应的地址信号(包括地址解码使能信号row_en、csel_en;行地址或者列地址信号a[10:3]、a_r[2:1]/a_l[2:1]),令对应的输出线或者字线导通(如图11所示,即字线1和输出线0),从而在地址8中写入数据。
由于address[10:0]=00000001000,根据上述实施例的描述,在这个时钟周期内,还需要读取下一个时钟周期m+1需要的输出信息。因此,读取数据的地址应该在address[10:0]的下一位,亦即读取存储位置00000001001的K1和K2的数据。
相类似地,控制器800根据a[0],可以判断需要在奇数一侧的存储区块bank1和bank3读取数据。在执行数据读取操作时,控制器800发出对应的控制信号r_en_x(x可以为0-3的整数值,分别表示bank0-bank3,读取使能信号)和pre、row_en、csel_en信号。
在本实施例中,控制器可以根据a[0],选择存储区块bank1和bank3对应的输出数据q_1[23:0]、q_3[23:0]输出至输出端口Data_out1[23:0]及Data_out2[23:0]。
列地址解码器和行地址解码器也根据与目标静态存储单元对应的地址信号,令对应的输出线和字线导通,从而读取K1和K2编号为9的静态存储单元存储的第一数据并输出至寄存器804中(步骤120)。。
采用以上实施例提供的相同的数据读写操作方法,在下一时钟周期时,在K1的编号9的静态存储单元中执行写入第二数据的操作(步骤210)。在时钟周期m读取的第一数据则在时钟周期m+1,从寄存器804输出(步骤220)。
在本实施例中,如图11所示,在一些特定编号的静态存储单元中写入数据时,例如7,读取数据需要在存储区块的下一行的第一个静态存储单元中进行,通过在相邻的两个解码器之间设置的选择器以及控制器输出的控制信号可以用以实现上述换行读取的任务。
例如,在静态存储单元7写入数据时,a[2:1]=11(二进制表示),a[0]=1。在写入右边的存储区块(即bank1或者bank3)时,控制器输出的a_l[2:1]=a[2:1]+1,a_r[2:1]=a[2:1],因此,a_l[2:1]=0。另外,根据选择信号,选择器需要引导解码器解码对应的行地址信号获得的导通信号进入下一行(如与字线0对应的解码器的导通信号进入字线1,控制字线1导通),
由此,可以在bank1或者bank3的静态存储单元7写入数据时,在同一个时钟周期内,控制读取存储区块bank0和bank2中静态存储单元8的数据。
相对应地,若写入数据为左边的存储区块(即bank0或者bank2)时,控制器输出的a_l[2:1]=a[2:1],a_r[2:1]=a[2:1],例如若在静态存储单元8写入数据,在执行读取操作时,列地址解码器的输出线0和行地址解码器的字线1导通,读取静态存储单元9的数据。
可以理解的是,上述特定地址是指写入数据位于右侧的存储区块的每一行最后一个地址的情况。亦即当位于右侧的列地址解码器的值(或者导通信号)为最大时。换言之,可以根据列地址解码器在当前时钟周期选择导通的输出线以及a[0]来判断该静态存储单元是否为上述特定静态存储单元,并输出对应的选择信号控制选择器是否引导导通信号进入下一个字线。
在写入操作发生在右侧的存储区块的第240行的最后一个静态存储单元时,如图11所示,对应的读取操作应该发生在另一侧存储区块的第1行静态存储单元上。在一些实施例中,可以在所述行地址解码器中增加一个额外的的解码器,该地址解码器用于解码第Q行静态存储单元的行地址信号。
如图11所示,该额外增加的解码器(图11中与数字0相邻的数字239的解码器)可以设置在与字线0相对应的的解码器(图11中的行地址解码器的数字0表示)相邻的位置,当写入数据位于右侧的存储区块的存储区块的第240行的最后一个静态存储单元时,字线239导通。在这一时钟周期内,选择器根据选择信号,将额外增加的解码器的导通信号引导至字线0,令另一侧的存储区块的字线0导通,读取第1行的静态存储单元的数据。
上述额外设置的解码器能够极大的缩短原行地址解码器中与字线0和字线Q-1相对应的解码器之间的距离,不需要选择器跨越整个行地址解码器(即从图11的0跨越至239),有利于电路上的实现。
在另一些实施例中,还可以通过发出特定的终止指令的方式实现上述额外增加的解码器的功能。例如,可以由控制器发出特定的信号,告知行地址解码器当前输入的地址为右侧的最后行地址的最后一个地址,以在读取操作时,令字线0导通,读取第1行静态存储单元的数据。
以上实施例仅公开了一种用以实现3ⅹ3窗口大小的窗处理模块的实施例。本领域技术人员可以理解的是,对于存储区块的静态存储单元是可以根据实际情况进行调整设置的,例如如图11所示的4列,或者更多更少的列。每个存储区块都可以根据预定的标准设置为一个PⅹQ阵列表示的P列静态存储单元和Q行静态存储单元,并且具有对应的列地址解码器和行地址解码器。
图11中所示的选择信号或者控制信号仅为示例性功能演示,用以表示各个功能模块之间的可能的信号交流情况,各个功能模块需要确定的信息(如列地址解码器需要的列地址解码使能信号和列地址信号)。具体的信号形式、类型等可以由实际使用的电路等所决定,本领域技术人员可以根据本发明实施例揭露的内容,进行调整、变换或者整合。
图12为本发明实施例提供的,用以实现kⅹk窗口大小的窗处理模块的模拟多端口存储器的示意图(为陈述简便,图12中省略了如图8所示的信号指令流向而仅示出必要的存储区块、控制器及地址解码器)。如图12所示,对于kⅹk大小的窗处理模块,需要使用k-1个单端口静态随机读取存储模块(0至k-2单端口静态随机读取存储模块),存储k-1行数据。可以理解的是,由于具有k-1个单端口静态随机读取存储模块,输入指令信号也对应包括:WEN1、WEN2直至WEN(k-1),用以供控制器确定具体执行写入操作的存储模块。
每个单端口静态随机读取存储模块均被分为奇数地址的存储区块和偶数地址的存储区块,所述模拟多端口存储器具有2(k-1)个存储区块(即图12所示的L0至Lk-2和R0至Rk-2)。
奇数区块和偶数区块分别放置于行地址解码器1201的两侧。每个存储区块为PⅹQ的阵列,表示具有第1至第P列和第1行至第P行静态存储单元,列地址解码器包括输出线0-输出线P-1及对应的P个解码器,行地址解码器可以包括字线0-字线Q-1及对应的Q个解码器。行地址解码器1201相邻的两个解码器之间连接有一选择器mux,选择器mux根据一位的选择信号(该选择信号可以由列地址解码器的地址信号是否为最大值以及判断奇偶存储区块的a[0]决定),选择当前行还是下一行字线导通,列地址解码器1203选择导通的输出线从而控制存储区块的某一列的导通。
可选地,该存储器还可以包括若干个用于缓存在上一周期输出的数据的寄存器。读取的数据在当前时钟周期暂时存放到寄存器中,并在下一时钟周期输出。
所述选择器mux及其选择信号用于解决这样的问题:在第m个时钟周期中,写入数据地址为右侧的存储区块的最后一列时(即R0至Rk-2的输出线P-1导通时),需要预先读取的第m+1个时钟周期的数据读取的静态存储单元应当位于左侧存储区块的下一行。所述选择器mux可以根据选择信号,在写入数据发生在奇存储区块的最后一列和第q行静态存储单元时,将导通信号引导至下一行的字线,选择偶存储区块第q+1行静态存储单元导通,读取其数据。
而当所述写入操作发生在所述奇存储区块的最后一列的最后一行静态存储单元时,所述选择器根据对应的选择信号,在同一时钟周期的读取操作时,选择所述偶存储区块的第1行静态存储单元导通。
在实际运行过程中,模拟多端口存储器在一个时钟周期内在对应的静态存储单元执行正确的读取和写入操作(以下简称读写操作)需要确定如下几个指令,包括:行地址解码器所需的读写操作的行地址信号,列地址解码器所需的读写操作的列地址信号,控制器1202所需的,确定写入操作所在的存储区块的指令信息以及输出哪一个存储区块中读取的数据。
控制器1202输出对应的控制信号,控制对应的存储区块执行读写操作。列地址解码器控制对应的列,行地址解码器控制对应的行,并且当写入操作在右侧的存储区块的最后一列时,选择器根据选择信号,在读取操作时,引导信号进入下一行字线。
可选地,如图12所示,所述行地址解码器具体包括:与所述存储区块的第1行至第Q行静态存储单元对应的字线0至字线Q-1;依次序设置的,与字线0至字线Q-1对应的Q个解码器以及一个额外设置的,用以解码第Q行静态存储单元的行地址信号的解码器。
所述额外设置的,用以解码第Q行静态存储单元的地址信号的解码器与所述字线0对应的解码器相邻(图12中由设置在与数字0相邻的位置的数字Q-1表示),用以控制偶存储区块的第1行静态存储单元的导通。这样的,当写入操作地址位于右侧的存储区块的最后行的最后一个地址时,选择器可以以较短的距离,连接额外设置的解码器和与字线0相对应的解码器,根据选择信号,引导导通信号进入字线0,令第1行静态存储单元导通,,进行读取操作。
结合图6-8、图12所示的存储器,惯常使用的单端口SRAM的存储器在实现窗口大小为kⅹk的窗处理模块时,需要的硬件成本为存储k行的显示数据、k个控制器以及k个地址解码器(每个单端口SRAM均为独立的模块单元,分别具有其控制器和地址解码器)。
使用多端口SRAM的存储器需要的硬件成本为存储k-1行的显示数据、k-1个控制器以及k-1个地址解码器。但是该存储器需要使用8T的静态存储单元而不能使用面积较小的6T的静态存储单元实现。
采用本发明实施例提供的存储器,所需要的硬件成本为k-1行的显示数据、1个控制器以及1个地址解码器(存储一行数据的SRAM存储模块、控制器和地址解码器打包在一个功能模块中),并且可以使用6T静态存储单元实现。
使用在一个时钟周期中预读下一时钟周期的输出数据,从而分离对于同一个地址的读取和写入操作的策略,可以解决现有技术中存在的矛盾,综合了使用单端口和多端口SRAM的两者优势(即6T静态存储单元的电路简单,成本低以及可以存储更少的数据)能够有效的降低实现窗处理模块所需的存储器的硬件成本。
本发明实施例提供的,如图8或者图12所示的存储器的数据输出端口可以与后续的其它功能模块连接,如寄存器、处理器,完成整个窗处理模块的操作。
专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的模拟多端口方法(即图8和图12所示的模拟多端口存储器的读写操作过程),能够以电子硬件、计算机软件或者二者的结合来实现(例如通过软件模块“信息读取单元”、“信息写入单元”和/或“连接单元”),为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。所述的计算机软件可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体或随机存储记忆体等。
以上所述仅为本发明的实施方式,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。