折叠式fifo存储器生成器的制造方法

文档序号:6765641阅读:201来源:国知局
折叠式fifo存储器生成器的制造方法
【专利摘要】公开了折叠式FIFO存储器生成器。可以使用表示先进先出(FIFO)存储器的可综合代码来产生硬件元件或者系统中的FIFO存储器。为了更有效地使用FIFO中的存储数据的存储器元件,代码生成器可以生成线程束,其使得FIFO能够使用具有不同于FIFO的规格的规格(即深度和宽度)的存储器元件。例如,线程束使得128深、1位宽的FIFO能够将数据存储在具有每行存储8位的16行的存储器元件中。对于与FIFO通信的任何系统,尽管FIFO使用16×8存储器元件来实现,但FIFO的表现就像128×1FIFO。为了这样做,代码生成器可以生成线程束,其使得折叠式存储器元件的表现就像非折叠式存储器元件。
【专利说明】折叠式FIFO存储器生成器
【技术领域】
[0001]本发明的实施例总体涉及设计先进先出(FIFO)存储器,并且更具体地涉及对FIFO存储器的深度和宽度进行折叠以与对应的存储器元件的规格一致。
【背景技术】
[0002]设计为处理数据的集成电路一般使用FIFO存储器来在处理级之间存储数据。这些FIFO存储器可以具有不同的宽度、深度、以及不同的输入和输出时钟频率。照惯例,产生可综合代码的生成器已被用来产生不同变化的FIFO存储器。然而,FIFO存储器的不同物理特性可能导致低效率。例如,生成器响应于请求,可以产生与128X 1FIF0 (即具有每条目I位的128个条目的FIFO)对应的可综合代码。然而,如果使用RAM来实现该FIF0,那么RAM单元的宽度可以至少是8位宽。相应地,128深的FIFO将要求每行8位宽的128行的RAM。因为每个条目仅存储I位,所以行中的其他7位未被使用。这种低效率可能导致硬件系统消耗附加的功率,并且要求的空间比所必须的更多。

【发明内容】

[0003]本发明的实施例描述接收将第一数据部分存储在FIFO存储器中的请求的方法和计算机可读存储介质。方法和存储介质将第一数据部分存储在FIFO存储器中的缓冲区中。方法和介质接收将第二数据部分存储在FIFO存储器中的请求,并且对将第二数据部分存储在缓冲区将会超过缓冲区的容量进行确定。方法和存储介质将缓冲区的内容存储到FIFO存储器中的存储器元件的单个行,其中存储器元件中的每行设定大小为存储多个数据部分。
[0004]本发明的另一个实施例描述FIFO存储器,其包括用于存储与由FIFO存储器所接收的写请求相关联的多个数据部分的缓冲区。FIFO存储器还包括耦连到缓冲区的存储器元件,其中存储器元件中的每行设定大小为存储多个数据部分。FIFO存储器包括路由逻辑,其配置为对将下一个数据部分存储在缓冲区将会超过缓冲区的容量进行确定,并且将缓冲区的内容存储到存储器元件的单个行。
[0005]通过折叠FIFO存储器的深度和宽度以与对应的存储器元件的规格一致,本实施例可以改善能效以及硬件系统所需的面积。具体,相对其规格没有被折叠的用于FIFO的存储器元件,获得的存储器元件可以减少未使用的存储单元的数目。
【专利附图】

【附图说明】
[0006]因此,可以详细地理解本发明上述特征,并且可以参考施例得到对如上面所简要概括的本发明更具体的描述,其中一些实施例在附图中示出。然而,应当注意的是,附图仅示出了本发明的典型实施例,因此不应被认为是对其范围的限制,本发明可以具有其他等效的实施例。
[0007]图1示出根据本发明的一个实施例的、包括FIFO代码生成器的计算设备的框图。[0008]图2示出根据本发明的一个实施例的、包括具有折叠式存储器单元的FIFO的硬件系统的框图。
[0009]图3A-3G示出根据本发明的实施例的、写入FIFO存储器和从FIFO存储器读取。
[0010]图4A-4B示出根据本发明的实施例的、从FIFO存储器中的相同存储器地址写入数据和读取数据。
[0011]图5是根据本发明的一个实施例的、用于确定何时折叠FIFO的存储器元件的方法。
[0012]图6示出根据本发明的一个实施例的、由多个线程访问的FIFO的硬件系统。
[0013]为便于理解,相同的参考数字在可能情况下已被用于指定图中共同的相同的元件。这是考虑在一个实施例中公开的元件可以有利地用于其他实施例而无需具体详述。
【具体实施方式】
[0014]为了更有效地使用FIFO中的存储数据的存储器元件,代码生成器可以生成线程束(wrapper),其使得FIFO能够使用具有不同于FIFO的规格的规格(即深度和宽度)的存储器元件。例如,线程束使得128深、I位宽的FIFO能够将数据存储在具有每行存储8位的16行存储器元件中。对于与FIFO通信的任何系统,尽管FIFO使用16X8存储器元件来实现,但FIFO的表现就像128X1FIF0。在一个实施例中,FIFO的规格被折叠以确定对应的存储器元件的规格。例如,假如代码生成器被要求配置具有每条目I位宽的128个条目(128X1)的FIFO。然而,如果存储器元件的各个行被限制为最小8位,在没有对存储器元件的规格进行折叠的情况下,用于该FIFO的实际存储器元件可能是128X8 (即具有每行9个存储单元的128行)。在这样的实施例中,每行中的7位可能未被使用。相反,生成器可以折叠所要求的FIFO的规格,从而减小存储器元件的深度并将宽度增加对应量以维持存储器元件的总存储大小。例如,以因子2折叠的128X 1FIF0可以由64X2存储器元件来实现。
[0015]代码生成器可以生成线程束,其使得折叠式存储器元件能够表现得像未折叠的存储器元件。特别是,线程束包括支配数据如何读入和读出折叠式存储器元件的逻辑。以使用128X 1FIF0为例,线程束可以将数据存储在折叠式16X8存储器元件中的8位块中。这样,存储器元件中的每个存储位置均可以被使用。相对于使用非折叠式存储器元件,将存储器元件的规格进行折叠不仅提高了存储效率,获得的存储器元件可能要求更小的面积(例如在集成电路中具有更小的占地面积)。继续以上示例,折叠式16X8存储器元件仅需要足以存储128位的面积,而128X8存储器元件要求存储1024位所需的面积。
[0016]图1示出根据本发明的一个实施例的、包括FIFO代码生成器115的计算系统100的框图。具体地,系统100包括处理器105和系统存储器110。FIFO生成器115可以是存储在存储器110中的程序或者应用程序。生成器115当由处理器105执行时,产生表示FIFO存储器的可综合代码120。可综合代码120可以与由生成器程序所产生的或者由程序员授权的其他代码结合,以产生用于集成电路的可综合代码。可以以Verilog、VHDL或者本领域技术人员已知的其他硬件描述语言来写可综合代码120。可以使用商业上可获得的综合工具诸如由Synopsys公司开发的Design Complier?和由Synplicity公司开发的Synplify?来对可综合代码120进行综合,以产生限定集成电路的部件和连接的网表。在一个实施例中,网表可以用于设计和制造图形处理单元(GPU)中的FIFO存储器,GPU可以用在诸如台式计算机、笔记本电脑、移动电话、服务器等计算设备中。
[0017]图2示出根据本发明的一个实施例的、包括具有折叠式存储器单元的FIFO的硬件系统200的框图。硬件系统200可以是集成电路(例如GPU或者CPU)、FPGA、存储器、安装在共享PCB上的硬件单元等。硬件系统包括至少部分是使用图1的可综合代码生成的FIF0210。也就是说,FIF0210包括其功能由FIFO代码生成器所产生的可综合代码限定的一个或多个硬件元件。FIF0210包括FIFO逻辑215,其包括用于实施FIFO操作(例如存储和取回)所需的逻辑。FIFO逻辑215还可以被赋予任务:接收来自硬件系统200中的其他部件的数据存储请求,以及传送所请求的数据到这些部件。FIF0210包括线程束220,其使得FIFO逻辑215能够与折叠式随机存取存储器(RAM) 225交互。例如,FIFO逻辑215可以输入数据和对应的写地址到线程束220,线程束220随后控制如何将数据写到折叠式RAM225。通过使用线程束220,FIFO逻辑215可以配置为,就像FIFO逻辑215被耦连到非折叠式存储器元件而不是折叠式存储器元件一样实施。在一个实施例中,FIFO逻辑215可以是即使FIF0210包括非折叠式存储器单元其仍然会被使用的相同的逻辑。因此,为了使用FIF0210中的折叠式存储器,只需要增加线程束220到FIF0210,而FIFO逻辑215的其余部分可以保持基本不变。
[0018]折叠式RAM225是具不同于描述FIF0210的深度和宽度规格的规格的存储器元件。在一个实施例中,即使规格可能不同,但总存储空间可以相同(虽然这并不被要求)。例如在总存储容量可以不同的情况下,用户可能期望每条目存储3位的128个条目的FIFO (即最大容量386位)。因为与RAM相关联的物理的或者设计限制,折叠式RAM225的规格可以是64X8 (最大容量512位),而不是例如将会与128X3FIF0的容量匹配的32X6。因此,在FIF0210的操作期间,折叠式RAM225可能包括未被使用的存储位置。尽管如此,即使一些位置未被使用,与使用非折叠式存储器单元(例如128 X 8RAM)相比,折叠式RAM225仍可能是更节能的和/或面积有效的。虽然在本发明的实施例中RAM示出为FIF0210的存储元件,但本公开并不限于此。在其他实施例中,存储器元件可以由触发器、寄存器、锁存器等实现。
[0019]图3A-3G示出了根据本发明的实施例的、写入使用线程束220和折叠式RAM225的FIFO存储器以及从使用线程束220和折叠式RAM225的FIFO存储器读取。具体地,线程束220包括缓冲区302 (buff )和折叠式RAM225。缓冲区302是与折叠式RAM225分开的存储器元件,并且可以包括多个触发器、锁存器、寄存器等。缓冲区302的输入端耦连到线程束220的输入(di),并且在该示例中是8位宽。对于图3A-3G,假设FIFO是使用16X8折叠式RAM225来实现的128深I位宽的存储器。
[0020]如图3A所示,根据时钟信号(例如前沿或者后沿),线程束220按照写使能(we)信号所指示的接收将存储在FIFO中的位301。FIFO逻辑(未示出)可以转发位301到线程束并控制写使能信号。如图3B所示,线程束220根据写地址(wa)将所接收的位存储在缓冲区302。然而此时,位301没有存储在折叠式RAM255 (即FIFO的主要存储元件)。相反,位301保持存储在缓冲区302。在一个实施例中,写过程可以描述为位301被接收并且随后存储在缓冲区302的两步骤的过程。写过程可以在两个顺序的时钟周期期间或者在相同周期的上升沿和下降沿期间发生。
[0021]如图3C所示,重复写过程直到缓冲区302已满。例如,在FIFO逻辑对应于每个命令传送给线程束220 —位的情况下,FIFO可以接收8个存储命令。线程束220将这些位存储在缓冲区302。当线程束220将第8个所接收的位存储在缓冲区302时,读使能(re)信号指示FIFO应该输出第I个存储在FIFO中的数据位。
[0022]图3D示出了使得线程束220能够从缓冲区302或者折叠式RAM225读取数据来满足读请求的逻辑。具体地,线程束220包括存储器选择器305,其配置为确定所请求的数据是存储在缓冲区302还是折叠式RAM225中。如果数据在缓冲区302中,那么存储器选择器305使用可以基于读地址(ra)的3-位信号来从缓冲区302选择对应的位。例如,缓冲区302中的每个存储器位置可以耦连到8个输入端/I个输出端的多路复用器306或者使用3-位信号来选择存储位置之一的多路复用器(mux)。如果数据存储在折叠式RAM225中,那么存储器选择器305可以传送4-位行地址信号到折叠式RAM225,其选择数据所位于的行。下面将具体描述从RAM225读取。
[0023]因为与图3D中所提供的读地址对应的数据(即位301)存储在缓冲区302中,所以存储器选择器305传送该数据的复制到延迟缓冲区307 (buff_d)。也就是说,在一个实施例中,在位301没有被从缓冲区302驱逐的情况下,其被存储在延迟缓冲区307。即使在线程束220中位302保持存储在存储器元件中,线程束之外的FIFO逻辑也可以使与位301相对应的存储器地址无效——即地址I。因此,在取回操作期间,正在读出的数据可能被从FIFO逻辑上驱逐,而实际的数据可以保持存储在FIFO中。继续该示例,地址2成为FIFO存储器的顶部。因此,如果FIFO被要求实施另一个取回操作,那么由FIFO逻辑所提供的新的读地址会是地址2。因此,在该实施例中,管理数据可以由在线程束220外部的FIFO逻辑来实施。然而在其他实施例中,线程束220自身可以具有管理和存储数据两者所需的电路。
[0024]因为所请求的数据可以来自缓冲区302或者折叠式RAM225,所以线程束220包括多路复用器313,其由延迟缓冲区控制信号(use_buff_d)控制。如在此所示,如果该信号为低,那么线程束220的输出(dout)是延迟缓冲区307的输出。如果信号为高,那么输出位由折叠RAM225提供。
[0025]在图3E,线程束220按照写使能信号的指示在输入处接收第9位315。然而在存储所接收的数据之前,线程束220可以转移存储在缓冲区302中的至少部分数据到折叠式RAM225。在一个实施例中,线程束220可以使用写使能信号和当前写地址的组合,来确定是否应该转移缓冲区302中的至少一些内容。例如,如果写使能信号为高并且写地址具有与缓冲区302的多个存储容量对应的值,那么线程束220将缓冲区302中的数据转移到折叠式 RAM225。
[0026]如图3F所示,缓冲区302的内容被存储到折叠式RAM225 (例如第I行)。此外,将输入位315存储在目前空的缓冲区302。虽然,示出为同步发生,在另一个实施例中,图3F所示的过程可以例如发生在不同的时钟周期。随着更多的数据存储到FIF0,线程束220可以继续填满缓冲区302。一旦该存储器元件再次填满,线程束220可以将数据转移到折叠式RAM225。在一个实施例中,一旦确定缓冲区302是满的,无需等待直到新的数据被接收,线程束220就可以转移数据。
[0027]在一个实施例中,线程束220之外的FIFO逻辑可以确定如果超出FIFO的容量则该做什么,在该示例中,这在FIFO被要求存储128位以上的数据时发生。在一个实施例中,如果要求存储大于FIFO容量,那么如果发送器是可停的(Stallable)则FIFO逻辑可以反压发送器。而且,FIFO逻辑可以继续确定与FIFO顶部对应的地址。假设例如FIFO存储128位数据并且读出第一个8位。因为顺序访问FIFO中的数据,所以由FIFO逻辑将存储在地址1-8处的第一个8位数据无效。如果FIFO逻辑随后转发8个附加的位以存储,线程束220可以自由将这些位存储到之前由被读出的位所占用的存储位置——即地址1-8。FIFO队列的顶部将是地址9,而地址8是FIFO的底部。这样,FIFO可以响应于取回数据的请求而更新,而不必将缓冲区302和折叠式RAM225中的数据驱逐和移位。
[0028]返回图3E,当线程束220存储位315到缓冲区302时,读使能信号可以指示FIFO逻辑正请求线程束220实施另一个读操作。与其中所请求的数据存储在缓冲区302中的图3D相反,在图3G中线程束220从折叠式RAM225取回所请求的数据302。在一个实施例中,存储器选择器305确定所请求的数据320是存储在缓冲区302还是折叠式RAM225中。例如,存储器选择器305可以基于读地址来确定是否所请求的数据320之前已经从缓冲区302移动到折叠式RAM225。在图3F中因为所请求的数据位320被移动到RAM225,所以存储器选择器305使用行选择信号(ra_f)来激活折叠式RAM225中的与所请求的位320对应的行。行中的数据随后可以由折叠式RAM225输出。
[0029]线程束220包括位偏移信号(ro_d),其选择折叠式RAM的8位输出中的特定位。具体,将位偏移信号用作用于多路复用器310的控制信号,以从行选择正确的位。随后控制用于多路复用器313的选择信号,使得来自多路复用器310的输出被用作线程束220的输出,而忽略延迟缓冲区307的输出。随着位320从线程束220输出(即通过多路复用器310和313),其采用的通常路径由箭头360生动示出。在一个实施例中,从折叠式RAM225取回所请求的数据320并从线程束220输出该数据仅占用一个周期,而在其他实施例中,读取过程可能要求多个周期。虽然图3A-3G示出了只有I位宽的FIFO条目,但是线程束可以配置为存储和取回具有任何数目的位的FIFO条目,例如具有2位宽的64个条目的FIFO。
[0030]图4A-4B示出了根据本发明的实施例的、从FIFO存储器中的相同存储器地址写入数据和读取数据。具体地,图4A示出了 FIFO存储器中的线程束400,其使能以并行的方式从相同FIFO存储器地址写入和读取。也就是说,除了能够从不同的地址同步读取和写入之夕卜,图4A-4B所示的FIFO存储器可以实施从相同地址同步读取和写入。为了实施从相同地址读取和写入,写入和读取使能信号都变高。而且,线程束400包括使得所接收的数据370能够旁路缓冲区302的数据路径。如所示,多路复用器365对是否许可所接收的数据位旁路缓冲区302以直接存储到延迟缓冲区307进行控制。多路复用器365由控制信号(same_addr_write_and_read)控制,其基于针对相同地址的写使能和读使能信号。如果这些信号都为高,那么用于多路复用器365的控制信号将在线程束的输入处所接收的数据路由到延迟缓冲区307,如箭头380所示。如果不是,则多路复用器365将存储在缓冲区302的数据位转移到延迟缓冲区307。无论多路复用器365是否许可所接收的数据370旁路缓冲区302,箭头375都示出所接收的位370被传送到缓冲区302用于存储。虽然没有示出,但线程束可以包括图3G中所述的、用于从缓冲区302取回所请求的数据的相同的存储器选择器。
[0031]图4B示出了当输出所接收的数据时线程束400的状态。线程束400控制多路复用器313,使得延迟缓冲区307的输出一即所接收的位370——成为线程束400的输出。这样,在一个周期所接收的数据可以在下一个周期输出。如果线程束400不包括多路复用器365,那么数据370将从缓冲区302取回,这可能要求附加的时钟周期。因此,在期望从相同地址同步写入和读取的实施例中,线程束400可以是优选的。虽然没有示出,线程束400可以包括如以上在图3A-3G所述的、用于访问和取回存储在折叠式RAM225中的数据的附加的逻辑。
[0032]表1示出了用于生成折叠式FIFO的可综合代码。具体地,表1示出了可以由图1所示的FIFO生成器产生的可综合代码500。当表1中的代码被综合时,其配置硬件逻辑(例如图3A-3G以及图4A-4B所示的逻辑)为创建用于折叠式FIFO的线程束。也就是说,经综合的代码生成具有上述功能的折叠式FIFO。为了简洁,如表1和2中所提供的代码,图3A-3G以及图4A-4B所示的信号和电路包括相同的变量名。
[0033]
【权利要求】
1.一种方法,包括: 接收将第一数据部分存储在先进先出(FIFO)存储器中的请求; 将所述第一数据部分存储在所述FIFO存储器中的缓冲区中; 接收将第二数据部分存储在所述FIFO存储器中的请求; 对将所述第二数据部分存储在所述缓冲区中将会超过所述缓冲区的容量进行确定;以及 将所述缓冲区的内容存储到所述FIFO存储器中的存储器元件的单个行,其中所述存储器元件中的每行设定大小为存储多个数据部分。
2.根据权利要求1所述的方法,进一步包括: 接收从所述FIFO存储器取回所存储的数据部分的读请求; 确定所述所存储的数据部分是在所述缓冲区中还是在所述存储器元件中; 如果所述所存储的数据部分在所述缓冲区中,那么从所述缓冲区取回所述所存储的数据而不访问所述存储器元件;或者 如果所述所存储的数据部分在所述存储器元件中,那么从所述存储器元件取回所述所存储的数据部分而不访问所述缓冲区。
3.根据权利要求1所述的方法,进一步包括: 接收对相同存储器地址的 同步的读请求和写请求; 将与所述同步的读请求和写请求相关联的第三数据部分,经由旁路所述缓冲区和所述存储器元件的数据路径,路由到所述FIFO存储器的输出端;以及 将所述第三数据部分存储在所述缓冲区中,其中所述第三数据部分经由所述数据路径被同步路由和存储在所述缓冲区。
4.一种FIFO存储器,包括 缓冲区,用于存储与由所述FIFO存储器所接收的写请求相关联的多个数据部分; 耦连到所述缓冲区的存储器元件,其中所述存储器元件中的每行设定大小为存储多个数据部分;以及 路由逻辑,配置为对将下一个数据部分存储在所述缓冲区将会超过所述缓冲区的容量进行确定,并且将所述缓冲区的内容存储到所述存储器元件的单个行。
5.根据权利要求4所述的FIFO存储器,进一步包括: 选择逻辑,配置为响应于取回所存储的数据部分的读请求: 确定所述所存储的数据部分是在所述缓冲区中还是在所述存储器元件中; 如果所述所存储的数据部分在所述缓冲区中,那么从所述缓冲区取回所述所存储的数据而不访问所述存储器元件;或者 如果所述所存储的数据部分在所述存储器元件中,那么从所述存储器元件取回所述所存储的数据部分而不访问所述缓冲区。
6.根据权利要求5所述的FIFO存储器,其中所述选择逻辑包括置于所述缓冲区和所述FIFO存储器的输出端之间的数据路径中的延迟缓冲区,并且所述延迟缓冲区配置为,在所述所存储的数据部分从所述FIFO存储器输出之前,存储从所述缓冲区取回的所述所存储的数据部分。
7.根据权利要求5所述的FIFO存储器,其中所述选择逻辑包括置于所述存储器元件和所述FIFO存储器的输出端之间的数据路径中的多路复用器,并且所述多路复用器配置为,从存储在所述存储器元件的行中的多个数据部分选择所述所存储的数据部分。
8.根据权利要求4所述的FIFO存储器,其中所述存储器元件的总行数小于所述FIFO存储器的总深度。
9.根据权利要求4所述的FIFO存储器,其中所述存储器元件的行的宽度通过改变所述FIFO存储器的深度和宽度规格直到与经改变的规格对应的宽度规格小于或者等于最小宽度阈值来选择。
10.根据权利要求4所述的FIFO存储器,其中所述存储器元件包括随机存取存储器(RAM),并且其中 所 述第一数据部分存储在所述RAM的一个或多个存储单元中。
【文档编号】G11C11/413GK103853522SQ201310658886
【公开日】2014年6月11日 申请日期:2013年12月6日 优先权日:2012年12月6日
【发明者】罗伯特·A·阿尔菲里 申请人:辉达公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1