具有指针偏移的异步缓冲器

文档序号:1302041 发布日期:2020-08-07 浏览:52次 >En<

阅读说明:本技术 具有指针偏移的异步缓冲器 (Asynchronous buffer with pointer offset ) 是由 理查德·马丁·博恩 大卫·M·达勒 史蒂文·科姆鲁施 于 2018-09-24 设计创作,主要内容包括:一种处理器(100)对用于先进先出缓冲器(FIFO)(110)的读指针和写指针(125、115)应用偏移值(155、150)以在时钟域(102、104)之间传送数据。所述指针偏移值是基于在所述时钟域之间的频率比,并且减少了延时,同时确保所述接收时钟域直到已将数据写入所述FIFO的条目之后才从所述条目读取数据,从而减少了数据传送错误。所述处理器响应于在所述时钟域中的一者或两者处的时钟频率变化而将指针偏移值复位,从而允许所述处理器响应于时钟频率变化而继续正确地传送数据。(A processor (100) applies offset values (155, 150) to read and write pointers (125, 115) for a first-in-first-out buffer (FIFO) (110) to transfer data between clock domains (102, 104). The pointer offset value is based on a frequency ratio between the clock domains and reduces latency while ensuring that the receiving clock domain does not read data from an entry of the FIFO until after the data has been written to the entry, thereby reducing data transfer errors. The processor resets pointer offset values in response to clock frequency changes at one or both of the clock domains, allowing the processor to continue to correctly transfer data in response to clock frequency changes.)

具体实施方式

图1至图7示出了用于基于在时钟域之间的频率比为用于FIFO的读和写指针应用偏移值以在处理器的时钟域之间传送数据的技术,与通过与读和写指针相关联的亚稳态电路进行管理相比,允许以更快的速率将数据写入FIFO或从FIFO读取数据。处理器采用一个或多个控制器,所述一个或多个控制器在时钟域中的每一者中设置和应用指针偏移以减少延时,同时确保接收时钟域不从FIFO的条目读取数据直到数据被写入所述条目之后为止,从而减少数据传送错误。此外,控制器响应于在时钟域中的一者或两者处的时钟频率变化而将指针偏移值复位。通过采用一个或多个控制器来设置和应用指针偏移值,处理器响应于时钟频率变化而继续正确地传送数据,同时减少延时并使带宽最大化。处理器提高处理效率,同时支持时钟域之间的正确数据传送。

为了说明,处理器包括先进先出队列(FIFO),其具有多个条目,以存储两个不同时钟域之间传送的数据。每个时钟域包括控制器以管理一组指针,以访问FIFO。常规地,经由亚稳态电路跨时钟域传送读和写指针以确保不将数据写入FIFO条目或从FIFO条目读取数据,直到条目的读取或写入已经完成为止。然而,亚稳态电路的定时和配置是基于在不同时钟域的时钟信号之间的假定的“最差情况”关系。此外,由于不同时钟信号的频率基于处理器的变化的运行要求而随时间发生改变,因此假定的最差情况关系在许多情况下过于保守,负面地影响处理效率。使用本文所述的技术,FIFO控制器基于不同时钟域的时钟信号的频率来对读和写指针中的一者或多者应用非零偏移值,从而允许更快地对FIFO进行读取或写入。控制器由此确保针对写入到FIFO的数据在该数据被读取之前建立较低延时。例如,对于其中时钟域的频率相等的一些实施方案,控制器设置正写指针偏移值和正读指针偏移值,其将FIFO的延时减少几个时钟周期。在一些实施方案中,写时钟的频率高于读时钟的频率,并且控制器为写指针设置负偏移值以减少位于FIFO中的时间条目并为读指针设置正偏移值以防止读取侧由于其等待指针同步而停留,从而导致减少的延时和增加的带宽。FIFO的两个时钟域都基于已知的频率(或周期)比以恒定速率移动其读和写指针,即使没有数据进行传送也是如此。传送速率的恒定允许适当偏移的应用,否则在频率未知或波动超出具裕度的限制的情况下,该应用将是不安全的。为了确定偏移值,控制器在考虑到FIFO深度、同步器深度、由于指示写模块写入FIFO和读模块从FIFO读取的准备状态的信号(准备就绪和注意深度(heads up depth))而导致的延迟以及所需的裕度调整的情况下比较时钟域的频率。如本文进一步所述,通过采用控制器使写和读指针位置偏移,处理器减少了跨时钟域的数据流的延时。

图1示出了根据一些实施方案的处理器100,其用于基于在时钟域之间的频率比为用于FIFO的读和写指针应用偏移值以在处理器的时钟域之间传送数据,并且响应于用于时钟域中的至少一者的时钟信号的频率变化而将指针偏移值复位。处理器100通过各种启用计算的电子装置中的任何一种来实现,诸如服务器、台式计算机、笔记本计算机、平板计算机、启用计算的便携式蜂窝电话(例如,“智能手机”)、启用计算的手表或其他可穿戴物品、个人数字助理、游戏机等。在所描绘的示例中,处理器100包括两个时钟域,表示为写时钟域102和读时钟域104。写时钟域102包括与处理器核心(未示出)的操作相关联的写模块140。读时钟域104包括与处理器核心(未示出)的操作相关联的读模块145。在一些实施方案中,处理器100包括与写时钟域102和读时钟域104类似的附加的时钟域(未示出)以支持不同的处理器核心和对应的高速缓存,其中每个时钟域具有包括其自己的高速缓存的其自己的存储器层次结构。

为了维持处理效率,处理器100向写时钟域102和读时钟域104提供不同的时钟信号以使其相应的操作同步。在所描绘的示例中,提供给写时钟域102的时钟信号表示为“写时钟”并且提供给读时钟域104的时钟信号表示为“读时钟”。如本文进一步所述,写时钟和读时钟信号是异步的,并且因此可以具有不同的频率和相位。

特别地,为了产生读时钟和写时钟信号,处理器100采用时钟发生器108。时钟发生器108是被配置为基于定时信号(未示出)产生写时钟和读时钟信号的模块,该定时信号被锁相为由诸如参考晶振(reference crystal)的时钟源(未示出)提供的稳定的振荡信号。在一些实施方案中,时钟发生器108通过基于控制信令(其独立地建立每个时钟信号的时钟频率)选择性地组合多个时钟信号来产生写时钟和读时钟信号。在所描绘的示例中,控制信令由控制器106提供。

时钟发生器108基于来自控制器106的控制信令来识别写时钟和读时钟信号中的每一者的频率。时钟发生器108以写时钟和读时钟信号的相应的所确定的频率产生写时钟和读时钟信号。在一些实施方案中,时钟发生器108通过独立地组合定时信号的相移版本以每个时钟信号的相应频率产生每个时钟信号来产生写时钟和读时钟信号中的每一者。时钟发生器108将时钟信号(写时钟和读时钟)中的每一者的频率独立于彼此进行设置和改变,使得写时钟和读时钟信号是异步的。

由于时钟信号(写时钟和读时钟)的异步性,因此写时钟域102和读时钟域104无法基于其对应时钟信号中的仅一个时钟信号来可靠地同步传达数据。因此,为了促进在写时钟域102与读时钟域104之间数据的传送,处理器100包括具有多个条目的FIFO 110,其中每个条目是由写时钟域102和读时钟域104两者访问的可单独寻址的存储位置。例如,在一些实施方案中,FIFO 110包括八个条目(即,其深度为8)。如本文所使用的,FIFO 110的深度是指FIFO 110的条目的数量。因此,在一些实施方案中,FIFO 110的深度为4、6、8、10、12、14或16。为了便于描述,假定FIFO 110用于根据本文所述的技术从写时钟域102向读时钟域104传送数据。

为了访问FIFO 110,写时钟域102包括写模块140并且读时钟域104包括读时钟域145。读/写模块140和145中的每一者独立地管理一组指针以访问FIFO 110。特别地,写模块140采用写指针115以指示FIFO 110的要被写入的下一个条目。响应于检测到FIFO 110中的用于将数据传送到读时钟域104的可用时隙,写模块140在一个时钟周期内断言准备就绪信号165,以向与处理器100的部件通信的外部逻辑指示开放的FIFO条目将可用于写时钟域102中的所配置数量的时钟。在写时钟域102中的所配置数量的时钟之后,写模块140将数据写入FIFO 110的条目,然后调整写指针115以指向FIFO 110的下一个条目。无论是否存在有效数据,写模块140都执行向FIFO 110中的写入,以便维持所需的节奏。如果被写入条目是FIFO 110的最后一个条目,则写模块140调整写指针115以指向FIFO 110的第一个条目。因此,假定FIFO 110具有八个条目,写指针115首先指向条目零,然后指向条目一,然后指向条目二,然后指向条目三,然后指向条目四,然后指向条目五,然后指向条目六,然后指向条目七,然后返回到条目零。

读模块145采用读指针125以指示FIFO 110的要被读取的下一个条目。响应于读模块145检测到可以从FIFO 110读取条目,它在一个时钟周期内向外部逻辑断言注意信号160,即从FIFO 110的读取将在所配置数量的读时钟域104周期中发生。在所配置数量的读时钟域104周期之后,读模块145读取由读指针125指示的条目,然后调整读指针125以指向FIFO 110的下一个条目。无论是否存在要传送的有效数据,读模块145都执行传送,以便维持正确的节奏。如同以上所述的写指针115,如果读取条目是FIFO 110的最后一个条目,读模块145调整读指针125以指向FIFO 110的第一个条目。

在复位期间,写指针115和读指针125两者都被设置为与FIFO 110的初始条目相对应的初始值。FIFO 110在写指针115和读指针125相等时为空。FIFO 110在写指针115和读指针125的最高有效位(MSB)不同但其余位相等时为满。在一些实施方案中,使用格雷码对写指针115和读指针125编码。在任何两个相邻格雷码字之间的码距离为1;因此,从一个格雷计数到下一个仅改变一位。通过使用格雷码来对写指针115和读指针125编码,不需要使时钟边沿上的多个变化位同步。

写模块140和读模块145中的每一者通过与其时钟域相对应的时钟信号(即,时钟信号分别为写时钟和读时钟)来同步。为了使读指针125与写时钟域102同步,并且为了防止亚稳态错误,写指针115相对于FIFO 110的条目的位置经由写指针同步135传输到读指针125。类似地,为了使写指针115与读时钟域同步,并且为了防止亚稳态错误,读指针125相对于FIFO 110的条目的位置经由读指针同步130传输到写指针115。写指针同步135和读指针同步130中的每一者包括多个触发器(未示出)(触发器的数量被称为“同步深度”)并且维持将数据写入FIFO 110的条目或从FIFO 110的条目读取的延迟。

在一些实施方案中,写模块140断言准备就绪信号165,其指示写模块140准备好向FIFO 110输出数据。在一些实施方案中,写模块140在写模块140向FIFO 110输出数据之前的预定数量的写时钟周期断言准备就绪信号165。在一些实施方案中,预定数量的写时钟周期是可编程的。在一些实施方案中,读模块145在读模块145准备好从FIFO 110读取数据之前的预定数量的读时钟周期断言注意信号160。在一些实施方案中,预定数量的读时钟周期是可编程的。注意信号160和准备就绪信号165允许FIFO 110的每侧上的接口逻辑高效地递送和接收数据、减少延时并减轻关键定时路径。然而,来自读指针同步130、写指针同步135、注意信号160和准备就绪信号165的累积延迟导致FIFO 110处的增加的延时。在一些实施方案中,写模块140包含状态元件(未示出)的管道,以延迟准备就绪信号165和注意信号160。

在一些实施方案中,写模块140采用指派写指针(commit write pointer)170并且读模块145采用指派读指针(commit read pointer)180以分别跟踪附加的写和读指针状态,所述写和读指针状态反映具有准备就绪信号165和注意信号160断言的周期数量,其对外部逻辑是明显的但还未提交给FIFO 110(分别被称为准备就绪信号165延迟和注意信号160延迟)。可独立地配置的指派写指针170的准备就绪信号165延迟和指派读指针180的注意信号160延迟允许外部逻辑时间将要传送的数据与FIFO 110中的可用传送时隙的节奏对齐,如由写时钟域102与读时钟域104的比控制的。在异步模式中,准备就绪信号165和注意信号160延迟直接添加到数据传送的延时。然而,在正确计算的写偏移150和读偏移155值的情况下,准备就绪信号165和注意信号160可以被吸收在处理器100的操作内,导致减少的总系统时钟域传送延时。在一些实施方案中,指派写指针170和指派读指针180使用一系列的触发器以创建在断言准备就绪信号165和注意信号160的时钟周期分别到写模块140和读模块145执行写或读操作之间所需的延迟。

为了促进减小的延时和较高的带宽,控制器106基于写时钟与读时钟的频率(或周期)比将写偏移150应用到写指针115。控制器106还基于写时钟与读时钟的频率(或周期)比将读偏移155应用到读指针125。在一些实施方案中,写偏移150和读偏移155两者都是正整数。在一些实施方案中,写偏移150和读偏移155中的一者或两者是负整数。写偏移150和读偏移155分别使写指针115和读指针125的限制提前(在正偏移的情况下)或延后(在负偏移的情况下),从而允许FIFO 110通过在FIFO 110等待写指针115和读指针125跨写时钟域102和读时钟域104同步时不停留来维持全带宽。

在一些实施方案中,控制器106基于下面表1中阐述的变量计算写偏移150和读偏移155。

表1

变量 意义
SyncDepth 同步器深度
FifoDepth FIFO中的条目数量
Rdy_m 提早递送用于数据输入的准备就绪信号的周期
HeadsUp_m 提早递送用于数据输出的注意信号的周期
ReadPeriod 读时钟的周期
WritePeriod 写时钟的周期
ShortPeriod 较快时钟的周期
LongPeriod 较慢时钟的周期

在一些实施方案中,控制器将读偏移155计算为:

读偏移=(ReadPeriod*(SyncDepth+HeadsUp_m–2.75))/LongPeriod

在一些实施方案中,除了最后的除法之外,控制器106用整数执行所有计算,在最后的除法中余数用于四舍五入到最近的整数。

在一些实施方案中,如果WritePeriod小于或等于ReadPeriod,则控制器将写偏移150计算为:

写偏移=(WritePeriod*(SyncDepth+Rdy_m+1)+2*ReadPeriod–LongPeriod*FifoDepth)/LongPeriod

在一些实施方案中,如果WritePeriod大于ReadPeriod,则控制器将写偏移150计算为:

写偏移=SyncDepth+Rdy_m–2

在一些实施方案中,这些方程式仅用于写时钟频率与读时钟频率的10比1和1比10的比。在一些实施方案中,控制器106计算写偏移150和读偏移155两次,每次用于通过FIFO110的每个方向。

响应于写时钟或读时钟任一者的频率变化,控制器106以受控方式将写偏移150和读偏移155的值复位。在一些实施方案中,响应于接收到改变频率的请求,控制器106将写偏移150和读偏移155两者设置为零以将FIFO 110置于简单的异步模式。然后,控制器106调整写时钟和/或读时钟以匹配所请求的频率,并且基于写时钟和读时钟的调整后的频率来确定调整后的写偏移150和读偏移155。

图2示出了根据一些实施方案的针对向FIFO 110写入和从FIFO 110读取将为零的写偏移150应用到写指针115并将为零的读偏移155应用到读指针125的图1的控制器106的示例。特别地,图2示出了分别与写时钟和读时钟信号相对应的波形240和241。对于图2的示例,写时钟和读时钟信号具有相同的频率。波形240和241各自分成若干周期:写时钟(波形240)的周期250-259和读时钟(波形241)的周期260-269。另外,对于每个周期250-259,图2示出了由写指针115指示的要由写模块140写入数据的FIFO 110的位置,并且对于每个周期260-269,图2示出了由读指针125指示的要由读模块145读取数据的FIFO 110的位置。

在图2的示例中,FIFO 110的深度为8个条目,读指针同步130和写指针同步135各自的深度为4个触发器,注意信号160指定1个周期的延迟,并且准备就绪信号165指定2个周期的延迟。FIFO 110在写指针115和读指针125相等时为空。FIFO 110在写指针115和读指针125(在图2中被示出为具有A或B的值)的最高有效位(MSB)不同但其余位相等时为满。因此,在所描绘的示例中,写模块140在周期250期间写入FIFO 110的位置0,在周期251期间写入FIFO 110的位置1,以此类推到周期257,这时写模块140写入FIFO 110的位置7,在这之后写模块140停留在位置0,因为位置0的读取还未被传达到写模块140。在所描绘的示例中,读模块145在读时钟的周期266期间从FIFO 110的位置1读取数据,周期266是在将数据写入FIFO110的位置1之后5个周期。

与图2的示例类似,在图3的示例中,写时钟和读时钟信号具有相同的频率。图3示出了根据一些实施方案的针对向FIFO 110写入和从FIFO 110读取将为2的写偏移150应用到写指针115并将为2的读偏移155应用到读指针125的图1的控制器106的示例。与图2类似,图3示出了分别与写时钟和读时钟信号相对应的波形340和341。波形340和341各自分成若干周期:写时钟(波形340)的周期350-359和读时钟(波形341)的周期360-369。另外,对于每个周期350-359,图3示出了由写指针115指示的要由写模块140写入数据的FIFO 110的位置,并且对于每个周期360-369,图3示出了由读指针125指示的要由读模块145读取数据的FIFO 110的位置。

如同图2的示例,在图3的示例中,FIFO 110的深度为8个条目,读指针同步130和写指针同步135各自的深度为4个触发器,注意信号160指定1个周期的延迟,并且准备就绪信号165指定2个周期的延迟。写指针115和读指针125的最高有效位(MSB)在图3中被示出为具有A或B的值。在所描绘的示例中,将为2的写偏移150应用到写指针115并将为2的读偏移155应用到读指针125,写模块140在周期350期间写入FIFO 110的位置3,在周期351期间写入FIFO 110的位置4,以此类推到周期354,这时写模块140写入FIFO 110的位置7,在这之后写模块140写入位置0。在所描绘的示例中,读模块145在读时钟的周期363期间从FIFO 110的位置3读取数据,周期363是在将数据写入FIFO 110的位置3之后3个周期。因此,通过将为2的写偏移150应用到写指针115并将为2的读偏移155应用到读指针125,控制器106将FIFO110的延时从如图2中所描绘的5个周期缩短到如图3中所描绘的3个周期。

图4示出了根据一些实施方案的针对向FIFO 110写入和从FIFO 110读取将为零的写偏移150应用到写指针115并将为零的读偏移155应用到读指针125的图1的控制器106的示例。图4示出了分别与写时钟和读时钟信号的示例相对应的波形440和441。对于图4的示例,读时钟信号比写时钟信号慢50%。波形440和441各自分成若干周期:写时钟(波形440)的周期450-459和读时钟(波形441)的周期460-469。另外,对于每个周期450-459,图4示出了由写指针115指示的要由写模块140写入数据的FIFO 110的位置,并且对于每个周期460-469,图4示出了由读指针125指示的要由读模块145读取数据的FIFO 110的位置。

如同图2和图3的示例,在图4的示例中,FIFO 110的深度为8个条目,读指针同步130和写指针同步135各自的深度为4个触发器,注意信号160指定1个周期的延迟,并且准备就绪信号165指定2个周期的延迟。写指针115和读指针125的最高有效位(MSB)在图4中被示出为具有A或B的值。因此,在所描绘的示例中,写模块140在周期450期间写入FIFO 110的位置3,在周期451期间写入FIFO 110的位置4,在周期452期间写入FIFO 110的位置5,以此类推到周期456,这时写模块140写入FIFO 110的位置7,在这之后写模块140写入位置0。在所描绘的示例中,读模块145在读时钟的周期466期间从FIFO 110的位置5读取数据,周期466是在将第一数据值A写入FIFO 110的位置5之后7个写时钟周期和5个读时钟周期。

与图4的示例类似,在图5的示例中,读时钟信号比写时钟信号慢50%。图5示出了根据一些实施方案的针对向FIFO 110写入和从FIFO 110读取将为-1的写偏移150应用到写指针115并将为2的读偏移155应用到读指针125的图1的控制器106的示例。与图4类似,图5示出了分别与写时钟和读时钟信号的示例相对应的波形540和541。波形540和541各自分成若干周期:写时钟(波形540)的周期550-559和读时钟(波形541)的周期560-569。另外,对于每个周期550-559,图5示出了由写指针115指示的要由写模块140写入数据的FIFO 110的位置,并且对于每个周期560-569,图5示出了由读指针125指示的要由读模块145读取数据的FIFO 110的位置。

如同图4的示例,在图5的示例中,FIFO 110的深度为8个条目,读指针同步130和写指针同步135各自的深度为4个触发器,注意信号160指定1个周期的延迟,并且准备就绪信号165指定2个周期的延迟。写指针115和读指针125的最高有效位(MSB)在图5中被示出为具有A或B的值。在所描绘的示例中,将为-1的写偏移150应用到写指针115并将为2的读偏移155应用到读指针125,写模块140在周期550期间写入FIFO 110的位置2,在周期551期间写入FIFO 110的位置3,在周期553期间写入FIFO的位置4,在周期554期间写入位置5,以此类推到周期557,这时写模块140写入FIFO 110的位置7,在这之后写模块140在周期559中写入位置0。在所描绘的示例中,读模块145在读时钟的周期565期间从FIFO 110的位置5读取数据,周期565是在将数据写入FIFO 110的位置5之后4个写时钟周期和3个读时钟周期。因此,通过将为-1的写偏移150应用到写指针115并将为2的读偏移155应用到读指针125,控制器106将FIFO 110的延时从如图4中所描绘的7个写时钟周期和5个读时钟周期缩短到如图5中所描绘的4个写时钟周期和3个读时钟周期。

图6是根据一些实施方案的图1的控制器106的框图。在所描绘的示例中,并且如下面进一步所述,控制器106计算写偏移150和读偏移155并分别将其应用到指派写指针170和指派读指针180。继而,指派写指针170和指派读指针180分别通过触发器管道直接控制写指针115和读指针125。在一些实施方案中,触发器管道的深度取决于准备就绪信号和注意信号(未示出)的延迟。例如,如果准备就绪深度为零并且注意深度为零,则指派写指针170和指派读指针180实际上被移除。

通过考虑写时钟和读时钟的相对频率以及诸如FIFO 110的深度、读指针同步130和写指针同步135的深度以及注意信号160和准备就绪信号165的周期数之类的其他参数,控制器106能够预期将在FIFO 110的一位置由写模块140写入的时间与FIFO 110的所述位置由读模块145读取的时间之间的延迟期间发生的进出FIFO 110的每一侧的传送次数。控制器106应用写偏移150和读偏移155的偏移值,所述偏移值允许指派写指针170和指派读指针180移动超出其原本指示的原始值,同时维持足以确保以下各项的裕度:读模块145从FIFO 110的由指派读指针180指示的位置读取正确值,并且写模块140不会在FIFO 110的尚未由读模块145读取的位置处覆写值。

在图6的示例中,处理器100包括时钟发生器108、控制器106、读偏移155、指派读指针180、读指针模块125、写偏移150、指派写指针170、写指针模块115和FIFO 110。读指针模块125被配置为存储用于读模块(未示出)的读指针。响应于被表示为“RD”的信号的断言,指派读指针180调整读指针模块125以指向FIFO 110的下一个位置,并且读指针模块125又将读指针提供给FIFO 110。作为响应,FIFO 110读取由读指针指示的位置并将读取数据提供给读模块。

写指针模块115与读指针模块125类似地被配置为将数据写入FIFO 110。特别地,写指针模块115存储用于写模块(未示出)的写指针。响应于被表示为“WRT”的信号的断言,指派写指针170调整写指针模块115以指向FIFO 110的下一个位置,并且写指针模块115又将写指针以及由写模块(未示出)提供的数据提供给FIFO 110。作为响应,FIFO 110对由写指针指示的数据位置进行写入。

控制器106被配置为产生RD和WRT信号以从FIFO 110读取数据和向FIFO 110写入数据,以计算和应用如上面关于图1、图3和图5所述的写偏移150和读偏移155。特别地,在图6的示例中,控制器106从时钟发生器108接收频率改变请求610。频率改变请求610指示时钟发生器108将改变写时钟(WRITE CLK)和读时钟(READ CLK)中的一者或两者的频率。控制器106基于写时钟和读时钟的调整后的频率计算新的写偏移150和读偏移155。控制器106然后等待写指针115和读指针125经过FIFO 110的第一共同条目,然后临时地停止来自处理器100的部件的数据传送,并且清空FIFO 110的包括尚未由读模块访问的数据的条目。控制器106使写指针115和读指针125停止在FIFO 110的第二共同条目处,并且应用新的写偏移150和新的读偏移155。控制器106然后重启写指针115和读指针150,并且再次启用来自处理器100的部件的数据传送。

图7是根据一些实施方案的响应于用于时钟域中的一者或两者的时钟信号的频率变化而设置写偏移150和读偏移155以在FIFO处在时钟域之间传送数据的方法700的流程图。方法700在图1所示的处理器100的一些实施方案中实现。每当写时钟和读时钟中的一者或两者改变频率之前和之后需要新的写偏移150或新的读偏移155时,控制器106执行方法700。方法700通过停止传送通过FIFO 110、刷新FIFO 110中的所有待定条目、使写指针115和读指针125停止在固定位置处、应用新的写偏移150和读偏移155值、以受控方式重启写指针115和读指针125以及最终继续进行通过FIFO 110的数据传送来确保在写偏移150和读偏移155改变时没有数据丢失或重复。

在一些实施方案中,控制器106操作方法700的两个并行实例:一个实例用于写时钟域102,并且另一个实例用于读时钟域104。在方法700中的几个点处,写指针115和读指针125需要以协作方式进行操作,使得方法700的读时钟域102和写时钟域104中的并行版本根据正确操作的需要同时或几乎同时在同一框702至724中。

在框702处,控制器106确定频率变化是否正在进行以及是否需要新的写偏移150和读偏移155。如果不需要,则方法流程返回到框702。如果需要新的写偏移150和读偏移155,则在框704处,控制器106计算新的写偏移150和读偏移155。在框706处,控制器106等待读指针115和写指针125经过第一共同参考点。共同参考点是在FIFO 110中的方法700在写时钟域102和读时钟域104中的实例达成一致的定义位置。在一些实施方案中,共同参考点是FIFO 110的条目0A。在一些实施方案中,共同参考点是由指派写指针170和指派读指针180跟踪的FIFO 110条目。指派写指针170和指派读指针180的使用确保了准备就绪信号165的每一个脉冲具有对应的注意信号160并且在框708的入口处仍在FIFO 110中的条目将仍由读模块145读取并且具有注意信号160的对应脉冲。

在框708处,在写指针125和读指针115已经过第一共同参考点之后,控制器106迫使准备就绪信号165和注意信号160的值为低以向连接到处理器100的部件通知无传送可用。然而,在处理器100外部的部件被停止的同时,写指针115和读指针125继续在处理器100内操作以执行方法700。在框710处,控制器106排空在FIFO 110中等待由读模块145读取的任何数据。在一些实施方案中,通过指派写指针170和指派读指针180迫使准备就绪信号165和注意信号160为低确保了在方法700到达框708时通过FIFO 110的任何传送仍将具有正确的注意信号160,这是因为在指派写指针170和指派读指针180内部使用的触发器管道将包含正确的值来分别操作写指针115和读指针125以防止丢失数据。

在框712处,首先是指派写指针170并且然后是写指针115停止在第二共同参考点处。指派读指针180和读指针125然后停止在第二共同参考点处。在一些实施方案中,第二共同参考点是FIFO 110的条目0B。当写指针115和读指针125停止时,在框714处,控制器106应用新的读写偏移150和新的读偏移155。在框716处,控制器106在检测到读指针同步130已到达第二共同参考点时重启写指针115。在框718处,读指针125检测到写指针同步136移动经过第二共同参考点。指派读指针180绕过内部触发器管道并且同时开始移动读指针125和指派读指针180,从而将指派读指针180提前指派读指针180与读指针125之间的管道中的触发器的数量。在具有指派读指针180的实施方案中,框718确保在写指针115和读指针125之间的时间差不会基于指派读指针180的管道深度而偏差。

在框720处,控制器106等待写指针115和读指针125返回到第一共同参考点,从而给予写指针115和读指针125时间以稳定到正确的时间差。在框722处,控制器106通过将准备就绪信号165和注意信号160恢复到用于新处理器100配置的正确值来启用正常流量。在框724处,控制器106向时钟发生器108发送信号以指示方法700完成。

在一些实施方案中,一种方法包括:在处理器的第一时钟域处,基于缓冲器的深度和第一偏移值,相对于所述缓冲器的多个条目递增写指针的位置;在所述处理器的写模块处,响应于所述写指针指示所述缓冲器的所述多个条目中的第一条目而访问所述第一条目;在所述处理器的第二时钟域处,基于所述写指针的所述位置和第二偏移值,相对于所述缓冲器的所述多个条目递增读指针的位置,所述第二偏移值基于所述第一时钟域的第一时钟信号的第一频率与所述第二时钟域的第二时钟信号的第二频率的比,所述第二时钟信号与所述第一时钟信号异步;以及在所述处理器的读模块处,响应于所述读指针指示所述缓冲器的所述多个条目中的所述第一条目而访问所述第一条目。一方面,所述第一偏移值是基于所述第一频率与所述第二频率的比。另一方面,所述第一偏移值是基于在所述第一时钟域和所述第二时钟域之间的同步器的深度。

一方面,所述方法包括断言指示所述写模块将访问所述缓冲器的信号,并且其中所述第一偏移值还基于在断言所述信号和所述写模块访问所述缓冲器之间的所述第一时钟信号的时钟周期数。另一方面,所述第二偏移值还基于在所述第一时钟域和所述第二时钟域之间的同步器的深度。又另一方面,所述方法包括响应于将所述第一频率调整为第一调整后的频率或将所述第二频率调整为第二调整后的频率的请求而将所述第一偏移值和所述第二偏移值复位。一方面,将所述第一偏移值和所述第二偏移值复位包括:响应于所述第一调整后的频率高于所述第二调整后的频率,基于所述第一调整后的频率与所述第二调整后的频率的比确定用于所述写指针的第一调整后的偏移值;基于所述第一调整后的频率与所述第二调整后的频率的比确定用于所述读指针的第二调整后的偏移值;清空所述缓冲器的包括尚未由所述读模块访问的数据的条目;使所述写指针和所述读指针停止在所述缓冲器的共同条目处;基于所述第一调整后的偏移值递增所述写指针的所述位置;以及基于所述第二调整后的偏移值递增所述读指针的所述位置。

在一些实施方案中,一种方法包括:在处理器的第一时钟域处,基于第一偏移值使写指针的位置相对于具有一定深度的先进先出缓冲器(FIFO)偏移;在所述处理器的第二时钟域处,基于第二偏移值使读指针的位置相对于所述FIFO偏移,其中所述第二偏移值是基于所述第一时钟域的第一时钟信号的第一周期与所述第二时钟域的第二时钟信号的第二周期的比;在所述处理器的写模块处,基于所述写指针的所述位置访问所述FIFO的第一条目;响应于访问所述第一条目,相对于所述FIFO递增所述写指针;在所述处理器的读模块处,基于所述读指针相对于所述FIFO的位置从所述FIFO的所述第一条目进行读取;以及响应于从所述第一条目进行读取,相对于所述FIFO递增所述读指针。一方面,所述第一偏移值是基于所述第一周期与所述第二周期的比。另一方面,所述第一偏移值是基于在所述第一时钟域和所述第二时钟域之间的同步器的深度。

又另一方面,所述方法包括断言指示所述写模块将访问所述缓冲器的信号,并且其中所述第一偏移值还基于在断言所述信号和所述写模块访问所述缓冲器之间的所述第一时钟信号的时钟周期数。还另一方面,所述方法包括响应于将所述第一周期调整为第一调整后的周期或将所述第二周期调整为第二调整后的周期的请求而将所述第一偏移值和所述第二偏移值复位。另一方面,将所述第一偏移值和所述第二偏移值复位包括:响应于第一调整后的频率高于第二调整后的频率,基于所述第一调整后的频率与所述第二调整后的频率的比确定用于所述写指针的第一调整后的偏移值;基于所述第一调整后的频率与所述第二调整后的频率的比确定用于所述读指针的第二调整后的偏移值;清空所述缓冲器的包括尚未由所述读模块访问的数据的条目;使所述写指针和所述读指针停止在所述缓冲器的共同条目处;基于所述第一调整后的偏移值递增所述写指针的所述位置;以及基于所述第二调整后的偏移值递增所述读指针的所述位置。

在一些实施方案中,一种处理器包括:先进先出缓冲器(FIFO);第一时钟域,其包括:写指针,第一同步器;和写模块,所述写模块被配置为响应于所述写指针相对于所述FIFO的位置而访问所述FIFO的第一条目,其中所述写指针的所述位置是基于所述FIFO的深度和第一偏移值;第二时钟域,其包括:读指针,第二同步器;和读模块,所述读模块被配置为响应于所述读指针相对于所述FIFO的位置而访问所述FIFO的所述第一条目,其中所述读指针的所述位置是基于所述写指针的所述位置和第二偏移值;以及控制器,其被配置为确定所述第一偏移值和所述第二偏移值。一方面,所述控制器被配置为基于所述第一时钟域的第一时钟信号的第一频率与所述第二时钟域的第二时钟信号的第二频率的比确定所述第一偏移值,所述第二时钟信号与所述第一时钟信号异步。

另一方面,所述控制器被配置为基于所述第一同步器的深度确定所述第一偏移值。又另一方面,所述写模块还被配置为断言指示所述写模块将访问所述缓冲器的信号,并且其中控制器还被配置为基于在断言所述信号和所述写模块访问所述缓冲器之间的所述第一时钟信号的时钟周期数确定所述第一偏移值。还另一方面,所述控制器被配置为基于所述第一时钟域的第一时钟信号的第一频率与所述第二时钟域的第二时钟信号的第二频率的比确定所述第二偏移值,所述第二时钟信号与所述第一时钟信号异步。另一方面,所述控制器被配置为响应于将所述第一频率调整为第一调整后的频率或将所述第二频率调整为第二调整后的频率的请求而将所述第一偏移值和所述第二偏移值复位。又另一方面,所述控制器还被配置为:响应于所述第一调整后的频率高于所述第二调整后的频率,基于所述第一调整后的频率与所述第二调整后的频率的比确定用于所述写指针的第一调整后的偏移值;基于所述第一调整后的频率与所述第二调整后的频率的比确定用于所述读指针的第二调整后的偏移值;清空所述FIFO的包括尚未由所述读模块访问的数据的条目;使所述写指针和所述读指针停止在所述FIFO的共同条目处;基于所述FIFO的所述深度和所述第一调整后的偏移值递增所述写指针的所述位置;以及基于所述写指针的所述位置和所述第二调整后的偏移值递增所述读指针的所述位置。

在至少一个实施方案中,上文所描述的设备和技术在包括一个或多个集成电路(IC)装置(也被称为集成电路封装或微芯片)的系统中实现,诸如上文参考图1至图7所描述的多媒体系统。这些IC装置的设计和制造中使用了电子设计自动化(EDA)和计算机辅助设计(CAD)软件工具。这些设计工具典型地表示为一个或多个软件程序。所述一个或多个软件程序包括可由计算机系统执行的代码,以操纵计算机系统来操作表示一个或多个IC装置的电路的代码,从而执行用于设计或调适制造系统的过程的至少一部分来制造电路。这个代码包括指令、数据或指令和数据的组合。表示设计工具或制造工具的软件指令通常存储在可由计算系统访问的计算机可读存储介质中。同样地,代表IC装置的设计或制造的一个或多个阶段的代码可存储在同一计算机可读存储介质或不同的计算机可读存储介质中,以及从同一计算机可读存储介质或不同的计算机可读存储介质进行存取。

计算机可读存储介质包括任何非暂时性存储介质或非暂时性存储介质的组合,所述非暂时性存储介质在使用期间可由计算机系统访问,以将指令和/或数据提供给计算机系统。此类存储介质包括但不限于光学介质(例如,压缩光盘(CD)、数字通用光盘(DVD)、蓝光光盘)、磁性介质(例如,软盘、磁带或磁性硬盘驱动器)、易失性存储器(例如,随机存取存储器(RAM)或高速缓存)、非易失性存储器(例如,只读存储器(ROM)或快闪存储器)或基于微机电系统(MEMS)的存储介质。在一个实施方案中,计算机可读存储介质嵌入在计算系统中(例如,系统RAM或ROM)、固定地附接到计算系统(例如,磁性硬盘驱动器)、可移除地附接到计算系统(例如,光盘或基于通用串行总线(USB)的快闪存储器),或者经由有线或无线网络耦合到计算机系统(例如,网络可访问存储装置(NAS))。

在一些实施方案中,上文所描述的技术的某些方面可由执行软件的处理系统的一个或多个处理器实现。软件包括存储或以其他方式有形地体现在非暂时性计算机可读存储介质上的一组或多组可执行指令。软件包括在由一个或多个处理器执行时操纵一个或多个处理器来执行上文所描述的技术的一个或多个方面的指令和某些数据。非暂时性计算机可读存储介质包括例如磁盘或光盘存储装置、固态存储装置(诸如快闪存储器、高速缓存、随机存取存储器(RAM)或一个或多个其他非易失性存储器装置)等。存储在非暂时性计算机可读存储介质上的可执行指令例如以源代码、汇编语言代码、对象代码或由一个或多个处理器解译或以其他方式执行的其他指令格式来实现。

应注意,并不需要上文在一般描述中所描述的所有活动或元件,特定活动或装置的一部分可能是不需要的,并且可执行一个或多个其他活动,或者可包括除所描述的那些元件之外的元件。此外,列出活动的顺序不一定是执行活动的顺序。另外,已经参考具体实施方案描述了概念。然而,本领域普通技术人员应了解,在不脱离如所附权利要求中所阐述的本公开范围的情况下,可作出各种修改和改变。因此,本说明书和附图将被视为说明性而非限制性的,并且所有此类修改都意图被包括在本公开的范围内。

上文已经关于具体实施方案而描述了益处、其他优点以及问题解决方案。然而,所述益处、优点、问题解决方案以及可使任何益处、优点或问题解决方案出现或变得更突出的任何特征都不应被解释为是任何或所有权利要求的关键、必需或必要特征。此外,上文所公开的特定实施方案只是说明性的,因为所公开的主题可按受益于本文教义的本领域技术人员显而易见的不同但等效的方式来修改和实践。除了如所附权利要求中所描述的之外,并不意图限制本文所展示的构造或设计的细节。因此,明显的是,上文所公开的特定实施方案可更改或修改,并且所有此类变化都被认为是在所公开的主题的范围内。因此,本文所寻求的保护如所附权利要求中所陈述。

23页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:电子设备的结构和电子设备

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!