具体实施方式
附图中示出的特征不一定按比例绘制。熟知的组件和处理技术的描述被省略以避免不必要地模糊所公开的实施例。实施例的描述仅通过示例的方式提供,并且不旨在限制所要求保护的发明的范围。相同的附图标记可以在附图和详细描述中使用以指代相同的设备、部分、组件、步骤、操作等等。
本文的实施例提供了一种避免来自两个或更多数据对象发送器的单端口存储器件写冲突的半导体芯片和方法,所述两个或更多数据对象发送器执行可能同时发生的写操作从而导致写冲突。可以通过将写操作的数据对象划分成两个或更多子数据对象来避免写冲突。可以对每个写操作进行划分、并且写操作的每个子数据对象可以具有专用的单端口存储器件。每个专用单端口存储器件可以存储来自每个写操作的一种类型的子数据对象。这允许写操作同时到达单端口存储器件,以便将来自第一写操作的第一类型子数据对象写入第一单端口存储器件,同时将来自第二写操作的第二类型子数据对象写入第二单端口存储器件。在实施例中,可以按照防止相同的单端口存储器件上的写冲突的目的的必要,通过将第一单端口存储器件专用于偶数数据对象、并将第二单端口存储器件专用于奇数数据对象,来对准和延迟数据对象。
其他实施例包括:在基本上相同的时刻将偶数数据对象存储到第一单端口存储器并将奇数数据对象存储到第二单端口存储器。来自两个或更多发送器的偶数和奇数数据对象在存储到单端口存储器时可以被交织(interleave)以便不产生写冲突。本文的其他实施例提供了避免两个或更多读请求器对单端口存储器的单端口存储器读冲突的半导体芯片和方法。
在单端口存储器件的某些读/写环境中,写冲突可能会发生。当单端口存储器件中两个或更多写操作基本上同时到达时可能会发生写冲突。写冲突会在试图被执行的操作中产生错误。单端口存储器件可以接收两个或更多写操作,因为它们可能正在接收来自两个或更多独立源的写操作,其中所述两个或更多独立源共享该单端口存储器件的资源。出于诸如为了降低功耗和尺寸限制之类的多种原因,共享单端口存储器件可能是有利的。
在单端口存储器件中不但可能有写冲突而且也可能发生读冲突。在基本上相同的时刻有多个读请求器从共享的单端口存储器请求数据对象时,可能会发生读冲突。读冲突也会在试图被执行的操作中产生错误。
本公开的各方面基于这样的认识:单端口存储器件中的写冲突可以通过使用多端口存储器来应对,其中多端口存储器允许同时向存储器的多于一行进行写入。每个写操作源可以具有专用写端口,这将允许同时向存储器的不同行进行写入。然而,在功率、面积、可测试性、产出和开发工作等方面,多端口存储器会比单端口存储器件更昂贵。避免单端口存储器件中的写冲突的另一认识是:当有来自独立源的多个写操作时使用两倍那么多的单端口存储器件。每个源将得到其自己的专用单端口存储器件组。附加的控制逻辑可以用来跟踪哪个写入源拥有实际的单端口存储器件。使单端口存储器件的数量成为两倍也会使功率、面积和产出方面的成本成为两倍。这些认识由于其避免写冲突的性质(多端口和双倍数量的单端口存储器)而也会预期到读冲突的避免。
在单端口存储器件中可能会发生写冲突的情形的示例是在计算机处理器芯片或其他半导体芯片上。诸如三级(L3)高速缓存之类的处理器芯片上的数据发送器(本文中也被称为写入源)可以被分割成两个,这允许来自两个独立的写入源(例如,第一L3高速缓存和第二L3高速缓存)的第一和第二写操作。分割的L3高速缓存可以连接到诸如PCI桥控制器之类的包含单端口存储器件的模块。PCI桥控制器可以包括针对从L3高速缓存取回数据对象的每个I/O取回有限状态机的专用缓冲器。每个缓冲器可以具有256字节的容量。缓冲器不是一次被全部写入而是以4:1周期以16字节被写入。在示例模块中可以有总共32个缓冲器。出于有效率的功率和面积的原因,多个缓冲器可以共享单端口存储器件,诸如SRAM或DRAM。对于所使用的总共八个SRAM而言,在每个SRAM中可以有四个缓冲器。SRAM内的缓冲器可以与对通过分割而生成的L3高速缓存中的任何一个的取回相关联。两个L3高速缓存是独立的、并且具有数据对象的响应可能在任何时刻到达。当针对共享同一个单端口SRAM的两个缓冲器的两个取回响应(也被称为写操作)同时从第一L3高速缓存和第二L3高速缓存到达时,可能会发生写冲突。
图1示出根据本公开实施例的半导体芯片100的框图,在半导体芯片100上,支持单端口存储器件120的模块115被配置成避免写冲突。半导体芯片100例如可以是计算机处理芯片。半导体芯片100可以包括统称为105的一个或多个处理器核。图1示出四个核105a、105b、105c和105d。半导体芯片100可以包括第一数据发送器110a和第二数据发送器110b,本文中统称为数据发送器110。在实施例中,数据发送器110可以是诸如L3高速缓存之类的高速缓存。每个数据发送器110可以被核105共享。与模块115通信的数据发送器110可以向模块115发送写操作。模块115可以包括一个或多个单端口存储器件(SPM)120。模块115可以是外围组件互连(PCI)桥控制器,然而,也可以考虑包括单端口存储器件120的其它模块。模块115可以向一个或多个读请求器输出。在实施例中,可以使用多个半导体芯片来包含所提及的组件。
本文的实施例可以提供模块115,其被配置成允许从数据发送器110向单端口存储器件120的写操作而不会发生写冲突。可以通过将来自数据发送器110的写操作的数据对象划分成两个或更多子数据对象来避免写冲突。可以针对每个写操作进行划分、并且写操作的每个子数据对象可以具有专用单端口存储器件120。每个专用单端口存储器件120存储来自每个写操作的一种类型的子数据对象。这允许写操作同时到达单端口存储器件120,以便将来自第一写操作的第一类型子数据对象写入第一单端口存储器件,同时将来自第二写操作的第二类型子数据对象写入第二单端口存储器件。在实施例中,可以按照防止相同的单端口存储器件上的写冲突的目的的必要,通过将第一单端口存储器件专用于偶数数据对象、并将第二单端口存储器件专用于奇数数据对象,来对准和延迟数据对象。当存在来自单个数据请求器的数据请求时,模块115可以并行地输出数据对象的偶数和奇数子数据对象以便合并成整个数据对象。在其他实施例中,当存在同时来自两个或更多读请求器的两个或更多数据对象请求时,模块115可以配置成发送两个数据对象而不导致读冲突。
图2示出根据实施例的模块115的框图,其中单端口存储器件120位于模块115中并且该模块115被配置成避免该单端口存储器件120上的写冲突和读冲突。按照某些实施例,模块115可以包括用于每个写操作的串行器,诸如串行器205a和205b,其被统称为串行器205。模块115可以包括多个单端口存储器件120(120a、120b、120c和120d)、写控制器215、读控制器220、写电路225和读电路230。第一写操作可以来自第一数据发送器110a,诸如高速缓存或者可产生写操作的任何其它电路。第二写操作可以来自第二数据发送器110b,诸如高速缓存或者可产生写操作的任何其它电路。第一写操作可以产生第一数据对象。第二写操作可以产生第二数据对象。数据对象可以是数据发送器110和单端口存储器件120之间的接口总线的自然宽度。在从L3高速缓存向PCI桥控制器的写操作的情况中,数据对象例如可以是16个字节。
一旦由模块115从数据发送器110接收到,第一数据对象可以进入第一串行器205a。第二数据对象可以进入第二串行器205b。串行器205可以将数据对象划分成多个子数据对象。在图示的示例中,串行器205可以是2:1的串行器,其可以要求单端口存储器件以常规总线速度两倍的速度进行操作。串行器205可以将数据对象划分成两半成为偶数和奇数子数据对象。这可以从第一数据对象产生第一偶数子数据对象和第一奇数子数据对象。第二偶数子数据对象和第二奇数子数据对象可以由第二串行器205b从第二数据对象产生。在给定的示例中,16字节的数据对象可以被划分成8字节的子数据对象。偶数子数据对象可以发送到专用于偶数子数据对象的第一单端口存储器件,并且奇数子数据对象可以发送到专用于奇数子数据对象的第二单端口存储器件。
子数据对象可以被写入到多个单端口存储器件120。在实施例中,单端口存储器件120可以是SRAM。每个单端口存储器件120可以被指定用于偶数子数据对象或者奇数子数据对象。每个单端口存储器件120可以包含多个缓冲器。单端口存储器件120a和120b可以包括八个缓冲器。每个缓冲器的一半可以在每个单端口存储器件120a和120b中。例如,单端口存储器件120a可以包括用于偶数子数据对象的偶数缓冲器(0),并且单端口存储器件120b可以包括用于该数据对象的奇数部分的奇数缓冲器(0)。如所示,写电路225可以利用示例性写多路复用器240调节进入单端口存储器件120的子数据对象。写控制器215可以与单端口存储器件120互连,以便向单端口存储器件提供写使能信号和写地址。写控制器可以与数据发送器110可操作地通信。数据发送器110可以在执行写入时挑选写控制器215。写控制器215也可以与每个写多路复用器240通信(为了附图的清楚起见,在图2中写控制器215与写电路225通信)以操纵子数据对象。
对于针对单端口存储器件120的每个写使能周期,写操作可以被设置成只写入奇数子数据对象或偶数子数据对象。这可以被实现,使得第一写操作并不与第二写操作同等地对准。在图示的示例中,第一数据发送器110a可以写入偶数子数据对象,而第二数据发送器110b写入奇数数据对象。该配置可以确保不会发生单端口存储器件写冲突。这是因为,当偶数子数据对象从第一数据发送器110a被写入到第一单端口存储器件120a时,奇数子数据对象从第二发送器110b被写入到第二单端口存储器件120b,并且当奇数子数据对象从第一数据发送器110b被写入时,反之亦然。
当要从单端口存储器件120中提取数据对象时,读控制器220可以管理获取子数据对象的读操作。读控制器220可以与每个单端口存储器件120互连。读控制器220可以被用来向单端口存储器件120提供读使能信号和读地址。读控制器220可以接收来自一个或多个读请求器250a和250b的读请求。读控制器220也可以与读电路230通信。读控制器220可以控制读电路230的多路解复用器245以及解串器235a和235b以进行适当的读取。可能会存在多个读请求器同时请求一个或多个数据对象,这可能会导致读冲突。图2示出当存在两个读请求器时的读电路230的实施例。在各种实施例中,从一个读请求器一次可以发生一次读取。图5示出下面进一步解释的读电路545,其可以用于模块115以取代当存在一个读请求器时的读电路230。当存在一个读请求器时,奇数和偶数子数据对象可以从针对第一或第二数据对象的单端口存储器件120中被提取或发送。可以并行地提取奇数和偶数子数据对象,以便取决于哪个数据对象被请求而形成完整的第一或第二数据对象。
在其它实施例中,如图2所示,可以存在两个读请求器。可能有来自第一读请求器250a的针对数据对象的第一读取请求,同时有来自第二读请求器250b的针对存储在至少一个相同的单端口存储器中的数据对象的第二请求。这会导致与上面解释的写冲突相类似的读冲突。单端口存储器120可以与相应的多路解复用器245通信。每个多路解复用器245可以与第一解串器235a和第二解串器235b通信。读控制器220可以管理多路解复用器245以及解串器235a和235b的输出。第一读请求器250a可以耦合到第一解串器235a的输出、并且第二读请求器250b可以耦合到第二解串器235b的输出。两个读请求器可以耦合到读控制器220,用于用信号通知读取。
在各种实施例中,第一和第二数据对象可以被存储在至少一个相同的单端口存储器(其可以是针对偶数子数据对象的单端口存储器120a和针对奇数子数据对象的单端口存储器120b)中。第一读请求器可以请求第一数据对象,同时第二读请求器请求第二数据对象。如果出现两个读请求,则模块115的读控制器220可以引导来自偶数单端口存储器120a的第一数据对象的第一偶数子数据对象以使其发送到第一解串器235a。另外,来自奇数单端口存储器120b的第二数据对象的第二奇数子数据对象可以被发送到第二解串器235b。这可以全部发生在读取的前半周期。在读取的后半周期期间,模块115的读控制器220可以引导来自偶数单端口存储器120a的第二数据对象的第二偶数子数据对象以使其发送到第二解串器235b。此外,来自偶数单端口存储器120a的第一数据对象的第一奇数子数据对象可以被发送到第一解串器235a。在第一解串器235a处,可以组合第一奇数子数据对象和第一偶数子数据对象,以向第一读请求器输出第一数据对象。在第二解串器235b处,第二偶数子数据对象可以与第二奇数子数据对象组合,以向第二读请求器输出第二数据对象。
图3示出根据实施例通过模块115的数据对象流的时序图300。参考标记350指向数据对象的写/读的写操作部分。参考标记360指向数据对象的写/读的读操作部分。对于写操作350,在时刻t0,第一写操作可以向模块115发送第一数据对象305a,并且在基本相同的时刻,第二写操作可以发送第二数据对象305b。第一写操作可以来自于第一发送器110a(图1)。第二写操作可以来自于第二发送器110b(图1)。
在时刻t1,第一数据对象305a和第二数据对象305b可以都进入它们各自的第一串行器205a和第二串行器205b。第一串行器205a可以将第一数据对象305a划分成第一偶数子数据对象310a和第一奇数子数据对象315a。例如,一个16B数据对象可以划分成两个8B子数据对象。在其它实施例中,第一串行器205a可以将第一数据对象305a划分成任意数量的子数据对象。另外,第二串行器205b可以将第二数据对象305b划分成第二偶数子数据对象310b和第二奇数子数据对象315b。在其它实施例中,第二串行器205b可以将第二数据对象305b划分成任意数量的子数据对象。
在时刻t2,第一偶数子数据对象310a可以被写入到支持偶数子数据对象的单端口存储器件。第二奇数子数据对象315b可以被写入到支持奇数子数据对象的单端口存储器件。在其它实施例中,第二奇数子数据对象315b的时序可以在之后发生。第二串行器205b可以从第一串行器205a被延迟半个周期,并以在时刻t3被写入的第二偶数子数据对象310b开始,然后使第二奇数子数据对象315b被随后写入。
在时刻t3,第一奇数子数据对象315a可以被写入到支持奇数子数据对象的单端口存储器件。第二偶数子数据对象310b可以被写入到支持偶数子数据对象的单端口存储器件。在子数据对象正被写入到单端口存储器件时使子数据对象交替可以避免从独立的发送器基本同时地到达模块的数据对象的写冲突。
参考标记360指向来自单端口存储器件的子数据对象的读操作。读操作可以包括来自两个读请求器的两个独立的读请求。在时刻t4,读控制器220(图2)可以接收来自第一读请求器的对第一数据对象305a的第一读请求。读控制器220还可以接收来自第二读请求器的对第二数据对象305b的第二读请求。读控制器220可以发布针对第一数据对象305a的第一读命令、以及针对第二数据对象305b的第二读命令。在读命令的前半周期期间,奇数和偶数单端口存储器件可以输出第一数据对象305a的第一偶数子数据对象310a和第二数据对象305b的第二奇数子数据对象315b。在其它实施例中,可能只有一个读请求器,其时序在图7中示出。
在时刻t5,在读命令的后半周期期间,读控制器220可以发布针对从奇数单端口存储器120b要发送的第一数据对象305a的第一奇数子数据对象315a的命令。第二数据对象305b的第二偶数子数据对象310b可以从奇数单端口存储器120a发送。
在时刻t6,第一偶数子数据对象310a和第一奇数子数据对象315a可以进入第一读请求器的第一解串器235a(图2)。还是在时刻t6,第二偶数子数据对象310b和第二奇数子数据对象315b可以进入第二读请求器的第二解串器235b。
在时刻t7,第一解串器235a可以向第一读请求器输出第一偶数和奇数子数据对象310a和315b,其被串接起来作为第一数据对象305a。此外,在时刻t7,第二解串器235b向第二读请求器输出第二偶数和奇数子数据对象310a和315b,其被串接起来作为第二数据对象305a。当有两个或更多读请求器时,通过将多于一个的数据对象分裂开并将每个数据对象的子部分一起发送、以及再次组合适当的部分来交织多于一个的数据对象,可以避免来自单端口存储器的读冲突。
图4示出根据本公开实施例的用于避免单端口存储器件中的写冲突的方法400的流程图。方法400可以开始于操作405。在操作405中,可以将第一数据对象划分成第一偶数子数据对象和第一奇数子数据对象。在实施例中,第一数据对象可以产生于第一写操作。第一写操作可以从诸如高速缓存(L3高速缓存)或者任何其它电路源之类的第一数据发送器向诸如SRAM或DRAM之类的单端口存储器件发送。在实施例中,第一数据对象可以被均匀地划分成第一偶数子数据对象和第一奇数子数据对象。在其它实施例中,如何划分第一数据对象、是被均匀地还是不均匀地划分、以及将其进行多少次划分(例如,三次或四次)都是可预期到的。第一数据对象的划分可以由第一串行器来完成。
在操作410中,可以将第二数据对象划分成第二偶数子数据对象和第二奇数子数据对象。在实施例中,第二数据对象可以产生于第二写操作。第二写操作可以从诸如高速缓存(L3高速缓存)或者任何其它电路数据对象源之类的第二数据发送器向诸如SRAM或DRAM之类的单端口存储器件发送。在实施例中,第二数据对象可以被均匀地划分成第二偶数子数据对象和第二奇数子数据对象。在其它实施例中,如何划分第二数据对象、是被均匀地还是不均匀地划分、以及将其进行多少次划分(例如,三次或四次)都是可预期到的。第二数据对象的划分可以由第二串行器来完成。
在操作415中,可以将第一偶数子数据对象存储在第一单端口存储器件中、并且可以将第二奇数子数据对象存储在第二单端口存储器件中。在操作420中,可以将第二偶数子数据对象存储在第一单端口存储器件中、并且可以将第一奇数子数据对象存储在第二单端口存储器件中。当将第一和第二奇数子数据对象写入到第二单端口存储器件时,第一和第二数据对象可以被对准,使得第一和第二奇数子数据对象的写入不会在同一时刻发生。在各种实施例中,第一和第二写操作可以被对准,使得当第一偶数子数据对象正被写入到第一单端口存储器件时,第二奇数子数据对象正被写入到第二单端口存储器件。同样,当第一奇数子数据对象正被写入到第二单端口存储器件时,那么第二偶数子数据对象正被写入到第一单端口存储器件。
图5示出根据实施例的模块500的框图,在所述模块500上,单端口存储器件被配置成避免数据对象的写冲突,其中所述数据对象未被划分成子数据对象。按照某些实施例,模块500可以用作图1的模块115。模块500可以配置成在无串行器且不使用子数据对象的情况下进行操作。在模块500中可以使用数据对象的常规总线宽度。取决于最低阶(lowest order)地址位,每个数据对象可以是奇数或偶数。此外,数据总线可以按照其常规数据宽度和速度在模块500中运行。
在此所讨论的各种实施例(包括结合图2和5所讨论的那些)可能对所使用的逻辑的特定类型和数量具有不同的要求。例如,第一数据发送器505a、第二数据发送器505b以及模块500在图5中示出。第一数据发送器505a和第二数据发送器505b可以包括启动逻辑以允许模块500的逻辑正确地操作。启动逻辑的示例在图6中示出、并在下面进一步解释。模块500可以包括第一可选延迟510a和第二可选延迟510b,其在此可以被统称为可选延迟510。模块500可以包括第一写多路复用器520a和第二写多路复用器520b,其可以被统称为写多路复用器520。模块500还可以包括多个单写端口存储器。四个单端口存储器件在图5中示出作为示例,即单端口存储器件525a、525b、525c和525d。单端口存储器件在此可以被统称为单端口存储器件525。模块500还可以包括写控制器530和读控制器535。模块500还可以包括第一读多路复用器540a和第二读多路复用器540b,其在此可以被统称为读多路复用器540。
第一数据发送器505a和第二数据发送器505b可以可通信地与模块500的相应的第一可选延迟510a和第二可选延迟510b相耦合。数据发送器505可以包括修改的启动逻辑,其在图6中进一步解释。启动逻辑可以被用来确保来自发送器505的数据传送到达模块500时以相同的方式对准。每个数据传送可以包含多个数据对象。数据对象可以按照它们将被发送到单端口存储器的顺序交替作为偶数和奇数数据对象。数据发送器505可以等待以便在两个发送器具有相同数量的数据对象之后传送数据对象。一旦数据传送被模块500接收并以相同的方式对准,则可选延迟可以保证它们使数据对象被不同地对准且在基本上相同的时刻到达实际的单端口存储器件525。例如,可选延迟510可以确保:在其它数据发送器发送其奇数数据对象时,一个数据发送器505将发送其偶数数据对象到单端口存储器件525。延迟是可选的,因为零是有效的偶数延迟。例如,当两个发送器都具有相同数量的数据对象要写入时,一个发送器可以没有延迟地立即开始,而另一发送器可以被延迟一个数据对象。
第一和第二可选延迟510a和510b分别可通信地与偶数多路复用器520a和奇数多路复用器520b耦合。偶数多路复用器520a可以接收来自任何一个数据发送器505的偶数数据对象、并且奇数多路复用器520b可以接收奇数数据对象。偶数多路复用器520a可以可通信地耦合到第一偶数单端口存储器件525a和第二偶数单端口存储器件525b。第一偶数单端口存储器件525a(最高阶位地址)可以接收偶数数据对象的上半部分、并且第二偶数单端口存储器件525b可以接收偶数数据对象的下半部分(最低阶位地址)。同样地,第一奇数单端口存储器件525c可以接收奇数数据对象的上半部分、并且第二奇数单端口存储器件525d可以接收奇数数据对象的下半部分。在其它实施例中,可以使用双倍宽的单端口存储器件使得每个单端口存储器件具有与偶数或奇数数据对象相同的宽度。
数据发送器505还可以与写控制器530可操作地通信。写控制器可以从数据发送器505接收写命令。写控制器530可以与每个单端口存储器件525可通信地耦合、并且可以发信号传送写地址和针对该写地址的写使能。写控制器530可以同步用于数据对象写入的上半部分和下半部分。偶数对的单端口存储器件可以被写控制器530视为一个单端口存储器件。奇数对的单端口存储器件525也可以被写控制器530视为一个单端口存储器件。
图5示出当存在单个读请求器时来自单端口存储器的读操作的实施例。读控制器535可以与每个单端口存储器件525可通信地耦合、并且当从读请求器550接收到读请求时可以发信号传送针对单端口存储器件525内的数据对象的读地址和读使能。读请求器550可以可通信地耦合到读控制器。读控制器535可以在基本上相同的时刻为所请求的数据对象的上半部分和下半部分发信号。偶数对的单端口存储器件可以被读控制器535视为一个单端口存储器件。同样,奇数对的单端口存储器件525可以被读控制器535视为一个单端口存储器件。数据对象可以以信号形式发送到读电路545,其可以包含用于上半部分数据对象的上部读多路复用器540a和用于下半部分数据对象的下部读多路复用器540b。在被请求时,偶数数据对象的上半部分和下半部分可以一起以信号形式发送。两个半部分可以通过被并行地发送而串接起来。同样,在奇数数据对象被请求时,奇数数据对象的上半部分和下半部分可以一起以信号形式发送。两个半部分可以通过被并行地发送而串接起来。在各种实施例中,当存在两个或更多读请求器时,读电路545可以用图2的读电路230替换。
现在参考图9,图9示出模块500,其中存在来自系统的两个读请求器。具体地,图9示出包括读操作的模块500的部分。偶数单端口存储器525a和525b可以可通信地耦合到第一多路解复用器902a。奇数单端口存储器525c和525d可以耦合到第二多路解复用器。当读取每对单端口存储器时,单端口存储器的上半部分和下半部分的输出可以在到达它们各自的多路解复用器902a和902b之前被串接。取决于数据对象被指定去往的目的地,多路解复用器902可以将数据对象路由到第一数据发送器910a或第二数据发送器910b。读控制器可以控制从单端口存储器525以及读电路904的多路解复用器902的读取何时发生。
第一读请求器910a和第二读请求器910b可以在基本相同的时刻从单端口存储器525a请求读取。第一和第二请求器910a和910b可以具有延迟逻辑,其通过在第一和第二读请求器之间交替奇数和偶数数据对象来确保两个或更多读请求器没有读冲突。延迟逻辑可以将请求器中的一个对数据对象的请求延迟一个周期。一个请求器可以接收偶数数据对象,而另一请求器接收奇数数据对象。在各种实施例中,读控制器906可以包含接收逻辑,使得当两个请求器910a和910b在基本上相同的时刻请求数据对象时,读控制器906可以在奇数数据对象正被第二数据请求器910b读取时,引导偶数数据对象以使其由第一读请求器910a读取。
图6示出根据实施例的数据发送器505的示例性启动逻辑600。启动逻辑600包括数据传送逻辑605、偶数状态锁存器610、与门615、反相器620、以及接收数据总线请求625的数据传送仲裁器630。数据传送逻辑605可以是对数据对象进行计数、并当数据总线可用时发信号通知数据传送仲裁器630的逻辑。当数据总线对模块500可用时,数据传送逻辑605可以用逻辑一发信号通知与门615。当数据对象发送器505处于偶数周期(例如4:1周期)时,偶数状态锁存器610发信号向与门615通知逻辑一。当数据总线可用、并且发送器505处于偶数周期时,则数据总线请求626可以被数据传送仲裁器630许可并发送给模块500。
在某些实施例中,如果有奇数个数据对象,则在可选延迟510处可以延迟具有奇数个数据对象的数据传送以等待一个数据对象,以便从在偶数格(even grid)开始的偶数数据传送开始。在各种实施例中,可以在数据发送器505的一个中用奇数状态锁存器替换偶数状态锁存器610。这可以允许从数据发送器505发送的数据对象在奇数和偶数数据对象之间交替,而无需可选延迟电路510。
图7示出根据实施例通过模块500的数据对象流的时序图700。参考标记750示出对模块500的单端口存储器525的写操作,而参考标记760示出来自模块500的单端口存储器525的读操作。读操作示出来自单个读请求器的读请求。在时刻t0,具有至少第一偶数数据对象705a和第一奇数数据对象707a的第一写操作可以从第一数据发送器505a发送。在与第一写操作从第一发送器505a被发送的时刻基本上相同的时刻,具有至少第二偶数数据对象705b和第一奇数数据对象707a的第二写操作可以从第二数据发送器505b发送。写操作可以被发送到可选延迟510。
在时刻t1,可选延迟510可以延迟写操作之一,使得来自一个写操作的偶数数据对象不与来自另一写操作的另一偶数数据对象同时写入到单端口存储器件。同样地,可选延迟510可以延迟写操作,使得两个奇数数据对象不会在基本上相同的时刻被写入到单端口存储器件。在时序图700所示的示例中,可以延迟第二写操作。
在时刻t2,来自第一写操作的第一偶数数据对象705a可以被写入到专用于偶数数据对象的单端口存储器件。第二偶数数据对象705b可以被延迟,使得它不会与第一偶数数据对象705a同时写入到单端口存储器件。
在时刻t3,第二偶数数据对象705b可以被写入到专用于偶数数据对象的单端口存储器件。此外,在时刻t3,第一奇数数据对象707a可以被写入到专用于奇数数据对象的单端口存储器件。
在时刻t4,第二奇数数据对象707b可以被写入到专用于奇数数据对象的单端口存储器件。延迟可以确保对相同单端口存储器件的数据对象写入在不同的时刻发生,这可以避免单端口存储器件中的写冲突。在实施例中,每个奇数和偶数数据对象可以划分成专用于数据对象的下半部分和上半部分的分离的单端口存储器。
现在参考由附图标记760标明的从单个读请求器向单端口存储器件的单个读请求。在时刻t5,读请求器可以做出对第二偶数数据对象的请求。第二偶数数据对象可能已经被划分成存储在第一偶数单端口存储器525a(图5)中的上半部分710a以及存储在第二偶数单端口存储器525b中的下半部分710b。当存在请求时,读控制器535可以发信号通知包含第二偶数数据对象705b的上半部分710a和下半部分710b的单端口存储器。单端口存储器可以在基本上相同的时刻发送上半部分710a和下半部分710b。
在时刻t6,上半部分710a和下半部分710b在被并行地发送时可以被串接。串接的两个半部分可以形成完整的第二偶数数据对象705b。第二偶数数据对象705b可以继续去往读请求器。
图8示出根据实施例的用于避免图5的模块500中的单端口存储器件中的写冲突的流程图。方法800可以开始于操作805。在操作805中,模块可以从第一数据发送器接收具有第一偶数数据对象和第一奇数数据对象的第一写操作。
在操作808中,模块还可以从第二数据发送器接收具有第二偶数数据对象和第二奇数数据对象的第二写操作。第一写操作和第二写操作可以被模块在基本上相同的时刻接收并被相同地对准。
在操作810中,可以延迟第二写操作,使得第一偶数数据对象不会与第二偶数数据对象基本上同时地写入到第一单端口存储器件。该延迟还确保第一奇数数据对象不会在与第二奇数数据对象被写入的时刻基本上相同的时刻写入到第二单端口存储器件。
在操作815中,可以将第一偶数数据对象写入到第一单端口存储器件、并且可以将第一奇数数据对象写入到第二单端口存储器件。另外,可以将第二偶数数据对象写入到第一单端口存储器件、并且可以将第二奇数数据对象写入到第二单端口存储器件。
尽管已经参考其特定实施例描述了本发明,但本领域技术人员在不脱离实施例的范围和精神的情况下将能够对所描述的各种实施例做出各种修改。在此所使用的术语和描述仅仅通过举例说明的方式来阐述,并且并非意在作为限制。本领域技术人员将意识到在随附的权利要求及其等效物中所定义的实施例的精神和范围内可以存在这些及其他变型。